欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

springboot 2.1.5的一些坑

程序员文章站 2022-05-03 11:01:38
...

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的截图:

springboot 2.1.5的一些坑

springboot 2.1.5的一些坑

 

 

下图是使用jedis 的配置截图:

springboot 2.1.5的一些坑

springboot 2.1.5的一些坑

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的冲突问题。