springboot1.x升级到2.x问题

java时间类型通过Jackson转换后输出格式的变化

如果未指定具体的时间格式的话,通过 @ResponseBody 返回带有 java时间类型的结果时,默认会将 java 时间类型( java.util.Date、java.util.Calendar、java.sql.Date、java.sql.Timestamp 等)以时间戳(当前时间的毫秒数)返回,而在SpringBoot 2.0.2则返回格式是经过了格式化的: yyyy-mm-ddTHH:mi:ss。
如果想要继续返回时间戳格式的数据,则只需要在properties配置文件中添加如下配置即可:

spring.jackson.serialization.write-dates-as-timestamps=true

注意:SpringBoot 2.0.2 对 java 时间格式的影响对 java8 中新增的 java.time.LocalDateTime 并没有效果,当设置 spring.jackson.serialization.write-dates-as-timestamps=true 时,java.time.LocalDateTime会被转换成一个形如 [2018,5,31,17,58,35] 的数组,而非毫秒数。

context-path配置修改

SpringBoot 1.5.9 在properties文件中配置 context-path 的方式如下所示:

server.context-path = XXX

而在SpringBoot 2.0.2中其配置方式变成了

server.servlet.context-path = XXX

@ConfigurationProperties配置的限制

SpringBoot 中可以使用 @ConfigurationProperties 将一个实体类转变为可配置的类(在properties文件中可以直接配置对应参数的值,如果使用IDE的话,会自动提示)。在 SpringBoot 1.5.9 中设置 @ConfigurationProperties 的 prefix 属性时,使用驼峰命名(如eclipseLink)不会有任何问题,但在 Spring Boot 2.x 启动时会报错:

InvalidConfigurationPropertyNameException: Configuration property name '********' is not valid.

当使用eclipse-link时就不会有任何问题。

多数据源配置问题

Spring Boot 2.x中如果配置了多个数据源的话,其中有一项配置是需要注意的:spring.datasource.url!这样的配置有可能是有问题的,需要将其设置成 spring.datasource.jdbc-url!

Spring Boot 2.1.x 版本之后默认不支持同名 bean

需要增加配置 spring.main.allow-bean-definition-overriding=true。但是这是一个非常危险的配置,bean 覆盖开启,如果你定义了重复 Bean,你并不知情,这样可能导致你不确定用的是哪个 bean 导致业务问题。所以不推荐开启。

另一个解决办法是参考:Support Multiple Clients Using The Same Service

使用FeignClient中的contextId配置:

@FeignClient(value = "service-provider", contextId = "UserService")
public interface UserService {
}
@FeignClient(value = "service-provider", contextId = "RetailerService")
public interface RetailerService {
}

猜你喜欢

转载自blog.csdn.net/chen_cxl/article/details/108869455