原创者:文思
上集讲解了入门,这集讲一讲学习与实际应用中容易出现的坑。
1、版本之坑:
test=1无法绑定影射到private int test中,ignoreUnknownFields = false在有属性不能匹配到声明的域的时候抛出异常.
单独使用并注入配置类进行调用:
@EnableConfigurationProperties注解。 这个注解告诉Spring Boot 使能支持@ConfigurationPropertie。但是
Spring boot1.5以上在spring boot(版本1.5.1.RELEASE)项目中,当准备映射自定义的配置文件属性到类中的时候,发现原本的@ConfigurationProperties注解已将location属性移除,因此导致无法正常给配置类的属性赋值
用的1.5.4版本,所以用location这里报错了
为何去除:
spring boot认为将一在配置类中采用@Component的方式注册为组件,然后使用@PropertySource来指定自定义的资源目录个配置类绑定到一个配置文件是一件不好的事,避免一个重要的配置文件有多处修改入口,保持入口一致性。
解决方法:
在配置类中采用@Component的方式注册为组件,然后使用@PropertySource来指定自定义的资源目录
这就是@ConfigurationProperties的location属性被取消后的一种替代方案,如果TestPropertiesNow还取不到我也没办法了。
spring boot 1.5版本后使用@Value注解注入属性,以读取邮件配置文件并发送为例:
实例:
-----------------------------------------------------------------------------------------------------------------------------------------------------
2:覆盖约定
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
3:maven依赖
3.1、继承 spring-boot-starter-parent:
spring-boot-starter-parent project
默认是 Java 1.6。 Resource filtering。exec plugin、surefire、Git commit ID、shade。
Resource filtering for application.properties 和 application.yml,以及,profile-specific file,如application-foo.properties 或 application-foo.yml。
想使用不同版本的JDK:
3.2、不继承 spring-boot-starter-parent:
这种情况下,仍然可以使用dependency management,但不能使用plugin management啦。方式如下:
注意,scope是import。而且,这种情况下,不再允许在覆盖相应的版本。如果要使用其他版本,需要在上面的前面添加一个完整的dependency。如下: