@PropertySource多环境配置以及表达式使用(spring.profiles.active)
方法一:可以这么配置
@PropertySource(“classpath:jdbc-${spring.profiles.active}.properties”)
程序员在开发时不需要关心生产环境数据库的地址、账号等信息,一次构建即可在不同环境中运行
@ConfigurationProperties
注意:上面其实都是Spring Framwork提供的功能。而@ConfigurationProperties是Spring Boot提供的。包括@EnableConfigurationProperties也是Spring Boot才有的。它在自动化配置中起到了非常关键的作用
ConfigurationPropertiesBindingPostProcessor会对标注@ConfigurationProperties注解的Bean进行属性值的配置。
有时候有这样子的情景,我们想把配置文件的信息,读取并自动封装成实体类,这样子,我们在代码里面使用就轻松方便多了,这时候,我们就可以使用@ConfigurationProperties,它可以把同类的配置信息自动封装成实体类
该注解在Spring Boot的自动化配置中得到了大量的使用
如SpringMVC的自动化配置:
@ConfigurationProperties(prefix = "spring.mvc") public class WebMvcProperties {} //加载方式 @Configuration @Conditional(DefaultDispatcherServletCondition.class) @ConditionalOnClass(ServletRegistration.class) // 此处采用这个注解,可议把WebMvcProperties这个Bean加载到容器里面去~~~ // WebMvcProperties里面使用了`@ConfigurationProperties(prefix = "spring.mvc")` @EnableConfigurationProperties(WebMvcProperties.class) //加载MVC的配置文件 protected static class DispatcherServletConfiguration {}
似乎我们能看出来一些该注解的使用方式。
@ConfigurationProperties 注解支持两种方式
说明:这里说的两种,只是说的最常用的。其实只要能往容器注入Bean,都是一种方式,比如上面的@EnableConfigurationProperties方式也是ok的
关于@EnableConfigurationProperties的解释,在注解驱动的Spring相关博文里会有体现
1.加在类上,需要和@Component注解,结合使用.代码如下
com.example.demo.name=${aaa:hi} com.example.demo.age=11 com.example.demo.address[0]=北京 # 注意数组 List的表示方式 Map/Obj的方式各位可以自行尝试 com.example.demo.address[1]=上海 com.example.demo.address[2]=广州 com.example.demo.phone.number=1111111
java代码:
@Component @ConfigurationProperties(prefix = "com.example.demo") public class People { private String name; private Integer age; private List<String> address; private Phone phone; }
- 通过@Bean的方式进行声明,这里我们加在启动类即可,代码如下
@Bean @ConfigurationProperties(prefix = "com.example.demo") public People people() { return new People(); }
其余属性见名之意,这里一笔带过:
ignoreInvalidFields、ignoreNestedProperties、ignoreUnknownFields
简单理解:
@ConfigurationProperties 是将application配置文件的某类名下所有的属性值,自动封装到实体类中。 @Value 是将application配置文件中,所需要的某个属性值,封装到java代码中以供使用。
应用场景不同:
如果只是某个业务中需要获取配置文件中的某项值或者设置具体值,可以使用@Value;
如果一个JavaBean中大量属性值要和配置文件进行映射,可以使用@ConfigurationProperties;