springboot 2.1.5的一些坑
1,springboot 2.1.5 Redis配置的坑
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
默认使用的连接是LettuceConnectionFactory,不是JedisConnectionFactory,
Lettuce 和 Jedis 的定位都是Redis的client,所以他们当然可以直接连接redis server。
Jedis在实现上是直接连接的redis server,如果在多线程环境下是非线程安全的,
这个时候只有使用连接池,为每个Jedis实例增加物理连接
Lettuce的连接是基于Netty的,连接实例(StatefulRedisConnection)
可以在多个线程间并发访问,应为StatefulRedisConnection是线程安全的,
所以一个连接实例(StatefulRedisConnection)就可以满足多线程环境下的并发访问,
当然这个也是可伸缩的设计,一个连接实例不够的情况也可以按需增加连接实例
链接:https://www.zhihu.com/question/53124685/answer/354431529
在定义RedisTemplate 模板类时,添加的的RedisConnectionFactory默认是LettuceConnectionFactory。
这个就要在application.yml中使用lettuce作为redis pool
redis:
database: 1
#host: 196.289.12.212
#port: 6380
sentinel:
master: mymaster
nodes: 196.289.12.212:5000
password:
timeout: 1000
lettuce:
pool:
max-active: 1000 ## 连接池最大连接数(使用负值表示没有限制)
max-wait: 10000 ### # 连接池最大阻塞等待时间(使用负值表示没有限制))
max-idle: 200 ### 连接池中的最大空闲连接
min-idle: 50 ### 连接池中的最小空闲连接
time-between-eviction-runs: 100000 #每ms运行一次空闲连接回收器(独立线程)
如果使用jedis,则或初始化redisPool为空值。
springboot对连接池的使用非常智能,配置文件中添加lettuce.pool相关配置,则会使用到lettuce连接池,并将相关配置设置为连接池相关参数,否则不使用,通过断点调试查看
如过使用redis连接池(无论lettuce还是jedis客户端,都需要),则需要导入如下依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
下图是使用lettuce的redisFactory的截图:
下图是使用jedis 的配置截图:
2,springboot2.1.5使用logback的坑
网上一片说
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
starter中已经有Logging 依赖进来,不需要手动再添加Logging依赖jstater,在我的项目中,如果不手动添加
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
则出现打好的jar项目启动的时候,日志配置是失效的,当然在添加Logging的时候,也要排除掉slf4j-lo4j2的冲突问题。