Java 使用预设默认值的Spring引导配置?

Java 使用预设默认值的Spring引导配置?,java,spring-boot,configuration,Java,Spring Boot,Configuration,在SpringBoot2.1中使用配置时,我围绕如何实现适当的配置管理的问题展开讨论,在这里,我既有属性文件中的参数,也有配置参数的硬编码值,以及每个参数的默认值。最后,我需要对每个参数进行某种“完整性检查”,例如检查整数是否在指定范围内 虽然这看起来很简单,但实现起来却相当臃肿,违反直觉 我的最小示例如下所示: @Value("#{${my.param} > PARAM1_MIN || ${my.param} < PARAM1_MAX ? ${my.param} : DEFAUL

在SpringBoot2.1中使用配置时,我围绕如何实现适当的配置管理的问题展开讨论,在这里,我既有属性文件中的参数,也有配置参数的硬编码值,以及每个参数的默认值。最后,我需要对每个参数进行某种“完整性检查”,例如检查整数是否在指定范围内

虽然这看起来很简单,但实现起来却相当臃肿,违反直觉

我的最小示例如下所示:

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

param1=42
Config.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;
    }
}
@配置
@PropertySource(“classpath:application.yml”)
公共类配置{
私有静态final int DEFAULT_PARAM1=1;
私有静态最终int参数1_MIN=1;
私有静态最终int参数1_MAX=5;
@自动连线
私有int参数1;
公共int getParam1(){
返回参数1;
}
@施工后
公共void init(){
如果(param1==null | | |!checkParam1(param1))param1=DEFAULT|param1;
}
公共布尔值checkParam1(param)
{
如果(参数>参数1_最小值|参数<参数1_最大值)
返回true;
否则返回false;
}
公共无效集setParam1(int-param){
如果(检查参数1(参数))
param1=param;
}
}

现在,仅仅设置一个参数似乎需要大量的代码。是否有一种更优雅、更苗条、更精简的方法来实现这一点?

可以使用一些验证约束,如
@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 
}

这要详细得多

可以使用一些验证约束,如
@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 
}
这要详细得多

您必须使用SpEL(Spring Expression Language,一种非常强大的工具:)

然后你可以这样做:

@Value("#{${my.param} > PARAM1_MIN || ${my.param} < PARAM1_MAX  ? ${my.param} : DEFAULT_PARAM1"})
private int param; 
带有一个组件:

@Component("checker")
    private class PropertyChecker {
       public int inRange(int param) {
        ......
        }
    }
这里有一个不错的教程: 或者:

您必须使用SpEL(Spring Expression Language,一种非常强大的工具:)

然后你可以这样做:

@Value("#{${my.param} > PARAM1_MIN || ${my.param} < PARAM1_MAX  ? ${my.param} : DEFAULT_PARAM1"})
private int param; 
带有一个组件:

@Component("checker")
    private class PropertyChecker {
       public int inRange(int param) {
        ......
        }
    }
这里有一个不错的教程: 或: