注:本文是从2.2.7.RELEASE版本升级到2.6.6遇到的问题
1、报错:java: 程序包javax.validation.constraints不存在
解决方法:引入validation依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
原因:我们在controller接口中有时候会用注解 @Validated @Valid来校验参数,比如校验非空、数据格式等,或者用注解@NotNull @NotBlank来校验实体,这些注解都是javax.validation包下的。该内容在2.3.0版本被官方移除了,2.3.0及以上版本要用这些注解需要引入上述依赖
2、报错:org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property 'spring.profiles.active' imported from location 'class path resource [application-dev.yml]' is invalid in a profile specific resource [origin: class path resource [application-dev.yml] - 20:13]
解决方案:
将spring.profiles.active用spring.config.activate.on-profile替代
原因:spring.profiles.active即显式激活指定的配置文件,SpringBoot在启动加载配置文件时,如没有明确指定spring.profiles.active属性,默认是加载application.yml或application.properties文件
xml多环境配置方案
<profiles>
<profile>
<id>dev</id>
<properties>
<profileActive>dev</profileActive>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<profileActive>test</profileActive>
</properties>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
</profile>
<profile>
<id>prod</id>
<properties>
<profileActive>prod</profileActive>
</properties>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
</profile>
</profiles>
spring boot在2.4版本spring.profiles.active被弃用了,推荐使用spring.config.activate.on-profile,据说是为了更好的支持Kubernetes(官方说明:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-Config-Data-Migration-Guide)
3、报错:org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException
解决方案:
这个报错是因为项目中使用了Swagger2,需要在你的SwaggerConfiguration类加上注解@EnableWebMvc
原因:大致是因为spring boot在2.6把请求路径与spring MVC处理应用程序映射进行匹配的默认策略从AntPathMatcher改为了PathPatternParser导致的
原理上我也没懂,springfox的github有关于此的讨论(Spring 5.3/Spring Boot 2.4 support · Issue #3462 · springfox/springfox · GitHub)里边有个提出的hack解决方案需要修改Springfox的源码,有兴趣的可以看一下(反正我是没看太懂)