一.从spring4升级到了spirng5
1.spring5废弃了log4j,新增了log4j2
Apache Log4j是一个非常古老的日志框架,并且是多年来最受欢迎的日志框架。 它引入了现代日志框架仍在使用的基本概念,如分层日志级别和记录器。
2015年8月5日,该项目管理委员会宣布Log4j 1.x已达到使用寿命。 建议用户使用Log4j 1升级到Apache Log4j 2。
Log4j2
Apache Log4j 2是对Log4j的升级,它比其前身Log4j 1.x提供了重大改进,并提供了Logback中可用的许多改进,同时修复了Logback架构中的一些固有问题。
与Logback一样,Log4j2提供对SLF4J的支持,自动重新加载日志配置,并支持高级过滤选项。 除了这些功能外,它还允许基于lambda表达式对日志语句进行延迟评估,为低延迟系统提供异步记录器,并提供无垃圾模式以避免由垃圾收集器操作引起的任何延迟。
所有这些功能使Log4j2成为这三个日志框架中最先进和最快的。
SLF4J
Simple Logging Facade for Java(SLF4J)用作各种日志框架(例如java.util.logging,logback,log4j)的简单外观或抽象,允许最终用户在部署时插入所需的日志框架。
要切换日志框架,只需替换类路径上的slf4j绑定。 例如,要从java.util.logging切换到log4j,只需将slf4j-jdk14-1.8.0-beta2.jar替换为slf4j-log4j12-1.8.0-beta2.jar
SLF4J不依赖于任何特殊的类装载机制。 实际上,每个SLF4J绑定在编译时都是硬连线的,以使用一个且只有一个特定的日志记录框架。 例如,slf4j-log4j12-1.8.0-beta2.jar绑定在编译时绑定以使用log4j。 在您的代码中,除了slf4j-api-1.8.0-beta2.jar之外,您只需将您选择的一个且只有一个绑定放到相应的类路径位置。 不要在类路径上放置多个绑定。
Logback
logback是由log4j创始人设计的又一个开源日志组件,作为流行的log4j项目的后续版本,从而替代log4j。
Logback的体系结构足够通用,以便在不同情况下应用。 目前,logback分为三个模块:logback-core,logback-classic和logback-access。
总结
我建议直接选择SLF4J而不是Log4j,commons logging,logback或java.util.logging
1、在开源库或内部库中使用SLF4J,将使其独立于任何特定的日志记录实现,这意味着无需为多个库管理多个日志记录配置,您的客户端将会很需要这一点。
2、SLF4J提供了基于占位符的日志记录,通过删除检查(isDebugEnabled(),isInfoEnabled()等)来提高代码的可读性。
3、另外,临时字符串数量越少意味着垃圾收集器的工作量就越少,这意味着应用程序的吞吐量和性能会更好。
4、强烈建议统一使用SLF4J日志框架
2.FeignClient 包的引用修改了
import org.springframework.cloud.netflix.feign.FeignClient;
改成
import org.springframework.cloud.openfeign.FeignClient;
3. DataSourceRegister 类引用的 import org.springframework.boot.bind.RelaxedPropertyResolver 废弃了;
Spring Boot 环境变量读取 和 属性对象的绑定 RelaxedPropertyResolver
springboot2.0后删除了RelaxedPropertyResolver。
4 spring boot 2 RedisCacheManager
com.jzy.hio.platform.login.util.RedisCacheConfig
org.springframework.boot
spring-boot-starter-data-redis
redis.clients
jedis
io.lettuce
lettuce-core
5. sys WebBindingInitializer类废弃
修改成:
@Override
public void initBinder(WebDataBinder webDataBinder) {
webDataBinder.setAutoGrowCollectionLimit(Integer.MAX_VALUE);
}
6、 platform 配置文件
原因是命名不规范,不要大写字母,使用小写字母,可加中划线-。
appVersion:修改为
#服务器端版本
app-version:
versionCode: 1.0.4
forceUpdate: 0 #是否强制升级 0:否,1:是
sys 配置文件
imAppMap:
考勤:
appId: 1
name: 考勤
修改为:
imAppMap:
kaoqin: #考勤
appId: 1
name: 考勤
还有其他类似的要修改为英文的,不需要添加中文,例子:英文.中文(正确)
中文.英文(错误)
oauth2
登录验证时报错,如下:
Caused by: java.lang.NoSuchMethodError: org.springframework.data.redis.connection.RedisConnection.set([B[B)V
解决方案:自己编写一个MyRedisTokenStore,复制RedisTokenStore类中代码,并将代码中conn.set(accessKey,
serializedAccessToken)修改为conn.stringCommands().set(accessKey,
serializedAccessToken); !
上下文
废弃了server.context-path 改成了
server:
port: 9090
servlet:
context-path: /sys
eureka:
client:
service-url:
defaultZone: http://localhost:1111/eureka/
instance:
prefer-ip-address: true #显示服务器IP
metadata-map:
cluster: MAIN
management.context-path: sys
health-check-url-path: ${server.servlet.context-path}/health
status-page-url-path: ${server.servlet.context-path}/info
home-page-url-path: ${server.servlet.context-path}/
如果有上下文了,那么访问监控端点需要添加上下文,
url:http://10.17.9.19:9091/sys/actuator/info
但是其他的端点信息怎样在springboot admin UI页面上显示的?
eureka:
client:
service-url:
defaultZone: http://localhost:1111/eureka/
instance:
prefer-ip-address: true #显示服务器IP
metadata-map:
cluster: MAIN
management.context-path: ${server.servlet.context-path}/actuator
health-check-url-path: ${server.servlet.context-path}/actuator/health
status-page-url-path: ${server.servlet.context-path}/actuator/info
home-page-url-path: ${server.servlet.context-path}/
springboot admin 监控端点401
解决方案:放开端点权限
config:
启动项指定:–spring.config.name=application-dev-file