Spring Boot之@Value和@ConfigurationProperties
小弟刚接触spring boot不久,仅想通过写网志的形式来加深记忆和方便以后查阅。如内容有不正确之处,还望各位大佬海量汪涵,并给小弟指出,共同进步。
1.@ConfigurationProperties校验
每当使用Spring注解@Validated时,Spring Boot都会尝试校验该类。可以直接在配置类上使用JSR-303约束注解,只需保证类路径中JSR-303的实现,然后在属性上添加约束注解:
@ConfigurationProperties(“book”) @Validated public class BookProperties{ @NotNull private String bookName; //setter和getter }
1.1校验嵌套属性的值
为了校验嵌套属性的值,必须使用@Valid注解在相关属性上,以触发其校验。如:
@ConfigurationProperties(prefix=“book”) @Validated public class BookProperties{ @NotNull private String bookName; @Valid private final Security security = newSecurity(); //setter和getter public static class security{ @NotNull public String price; //setter和getter } }
2. @ConfigurationProperties
通常希望把配置文件的信息,读取并自动封装成实体类,在这时就可以使用@ConfigurationProperties。
如:application.yml
spring: application: name: ng_knowmanage #-----------redis config------------------- redis: cluster: expiration: 30 max-redirects: 3 nodes: - 172.17.200.4:6380 - 172.17.200.4:6381 - 172.17.200.4:6382
Demo.class:
@Component @ConfigurationProperties(prefix=“spring.redis.cluster”) public class Demo{ List<String> nodes; Integer expiration; Integer maxRedirects //setter和getter }
3.@Value
@Value注解用来读取配置文件中属性。
如:application.yml
aliyun: ossurl: xxx
Demo.class:
@Component publicclass Demo{ @Value(“${aliyun.ossurl}”) String ossurl; //setter和getter }
可将需要的单个属性配置,加载到java代码中。
4.@Value和@ConfigurationProperties
@Value是一个核心容器功能,不提供与类型安全配置属性相同的功能。
简单的个人理解:
@ConfigurationProperties是将application配置文件的某类名下所有的属性值,自动封装到实体类中。
@Value是将application配置文件中,所需要的某个属性值,封装到java代码中以供使用。