亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

具有預設默認值的彈簧啟動配置?

具有預設默認值的彈簧啟動配置?

慕虎7371278 2022-09-22 15:56:09
在Spring Boot 2.1中使用配置時,我圍繞著如何實現正確的配置管理的問題,其中我既有來自屬性文件的參數,也有硬編碼的值als配置參數,以及每個參數的默認值。最后,我需要對每個參數進行某種“完整性檢查”,例如檢查整數是否在指定范圍內。雖然這似乎很容易和簡單,但意識到這一點是相當臃腫和違反直覺的。我的最小示例如下所示:應用.ymlparam1=42配置.java@Configuration@PropertySource("classpath:application.yml")public class Config {    private static final int DEFAULT_PARAM1 = 1;    private static final int PARAM1_MIN = 1;    private static final int PARAM1_MAX = 5;    @Autowired    private int param1;    public int getParam1() {        return param1;    }    @PostConstruct    public void init() {        if(param1 == null || !checkParam1(param1)) param1 = DEFAULT_PARAM1;    }    public boolean checkParam1(param)    {        if(param > PARAM1_MIN || param < PARAM1_MAX)            return true;        else return false;    }    public void set setParam1(int param) {        if(checkParam1(param))            param1 = param;    }}現在,這似乎需要大量的代碼來簡單地設置一個參數。有沒有一種更優雅,更苗條,更精益的方式來做到這一點?
查看完整描述

2 回答

?
莫回無

TA貢獻1865條經驗 獲得超7個贊

你必須使用SpEL(彈簧表達式語言),這是一個非常強大的工具:)


比你可以做這樣的事情:


@Value("#{${my.param} > PARAM1_MIN || ${my.param} < PARAM1_MAX  ? ${my.param} : DEFAULT_PARAM1"})

private int param; 

或者可能更具可讀性:


 @Value("#{checker.inRange(${my.param})}")

 private int param;

使用組件:


@Component("checker")

    private class PropertyChecker {

       public int inRange(int param) {

        ......

        }

    }

一個不錯的教程在這里:https://www.baeldung.com/spring-expression-language 或:https://www.baeldung.com/spring-value-annotation


查看完整回答
反對 回復 2022-09-22
?
阿晨1998

TA貢獻2037條經驗 獲得超6個贊

可以使用一些驗證約束,例如 、和包 Java 驗證 API 中的許多其他約束@Max@Min@NotEmpty

請參閱春季文檔。

下面是一個示例:

public class User {


    @NotNull(message = "Name cannot be null")

    private String name;


    @AssertTrue

    private boolean working;


    @Size(min = 10, max = 200, message 

      = "About Me must be between 10 and 200 characters")

    private String aboutMe;


    @Min(value = 18, message = "Age should not be less than 18")

    @Max(value = 150, message = "Age should not be greater than 150")

    private int age;


    @Email(message = "Email should be valid")

    private String email;


    // standard setters and getters 

}


查看完整回答
反對 回復 2022-09-22
  • 2 回答
  • 0 關注
  • 103 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號