具有预设默认值的弹簧启动配置?

在Spring Boot 2.1中使用配置时,我围绕着如何实现正确的配置管理的问题,其中我既有来自属性文件的参数,也有硬编码的值als配置参数,以及每个参数的默认值。最后,我需要对每个参数进行某种“完整性检查”,例如检查整数是否在指定范围内。


虽然这似乎很容易和简单,但意识到这一点是相当臃肿和违反直觉的。


我的最小示例如下所示:


应用.yml


param1=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;

    }

}

现在,这似乎需要大量的代码来简单地设置一个参数。有没有一种更优雅,更苗条,更精益的方式来做到这一点?


慕虎7371278
浏览 63回答 2
2回答

莫回无

你必须使用SpEL(弹簧表达式语言),这是一个非常强大的工具:)比你可以做这样的事情:@Value("#{${my.param} > PARAM1_MIN || ${my.param} < PARAM1_MAX&nbsp; ? ${my.param} : DEFAULT_PARAM1"})private int param;&nbsp;或者可能更具可读性:&nbsp;@Value("#{checker.inRange(${my.param})}")&nbsp;private int param;使用组件:@Component("checker")&nbsp; &nbsp; private class PropertyChecker {&nbsp; &nbsp; &nbsp; &nbsp;public int inRange(int param) {&nbsp; &nbsp; &nbsp; &nbsp; ......&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }一个不错的教程在这里:https://www.baeldung.com/spring-expression-language 或:https://www.baeldung.com/spring-value-annotation

阿晨1998

可以使用一些验证约束,例如 、和包&nbsp;Java 验证 API&nbsp;中的许多其他约束@Max@Min@NotEmpty请参阅春季文档。下面是一个示例:public class User {&nbsp; &nbsp; @NotNull(message = "Name cannot be null")&nbsp; &nbsp; private String name;&nbsp; &nbsp; @AssertTrue&nbsp; &nbsp; private boolean working;&nbsp; &nbsp; @Size(min = 10, max = 200, message&nbsp;&nbsp; &nbsp; &nbsp; = "About Me must be between 10 and 200 characters")&nbsp; &nbsp; private String aboutMe;&nbsp; &nbsp; @Min(value = 18, message = "Age should not be less than 18")&nbsp; &nbsp; @Max(value = 150, message = "Age should not be greater than 150")&nbsp; &nbsp; private int age;&nbsp; &nbsp; @Email(message = "Email should be valid")&nbsp; &nbsp; private String email;&nbsp; &nbsp; // standard setters and getters&nbsp;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java