SpringBoot下集成redis配置application.yml文件

    xiaoxiao2023-11-21  162

    前言

    最近用springboot做项目用到了redis,第一次使用了yml格式作为配置文件。在这里记录一下我的使用过程,以及出错情况。希望大家节约时间,少踩坑。

    正文

    第一步,maven导入依赖。

    <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency>

    第二步,配置application.yml文件的redis配置。

    spring: # redis redis: host: 127.0.0.1 port: 6379 timeout: 3 # password: pool: minIdle: 1 maxIdle: 10 maxWait: 3 maxActive: 8

    这里尤其要注意yml文件的书写格式。冒号 : 后面一定要接一个空格,才可以跟上值,否则就会格式错误的。还有就是尤其要注意缩进(用空格作缩进),yml所有的级别关系都是由缩进完成,这点是它和xml的不同之处。比如这里的redis是属于spring下的子集,而host、port、timeout、pool又是redis的子集,那么如果用.properties文件来写的话,这里的host就应该写成spring.redis.host。

    第三步,在springboot中添加读取redis配置类。 springboot自己有一种强大的读取配置的注解@ConfigurationProperties,只需要在相应的类上添加此注解,标明前缀,即可自动读取yml文件中此前缀的属性。 下面即是读取配置的类。Getter、Setter、NoArgsConstructor注解都是采用了lombok简化代码的结果,就是省略了手动生成getter、setter、构造方法的步骤。关于lombok,可以查看我的另一篇博客:lombok插件。

    /** * Created by makersy on 2019 */ @Component @ConfigurationProperties(prefix = "spring.redis") @Getter @Setter @NoArgsConstructor public class RedisConfig { private String host; private int port; private int timeout;//秒 private String password; private HashMap<String, String> pool = new HashMap<>(); }

    需要注意的是,pool之下还有子集,然而我们的前缀设定的是spring.redis,如果还要把pool之下的那些属性名都写上来,那么肯定是读取不到的(我一开始就是这么做的…)。这里采用的办法就是用一个HashMap来存储pool这个属性集合,要取对应的值就用Hashmap的get(属性名)方法即可。

    第四步,封装获取连接池类。这个类可以读取yml文件中的redis配置,并生成一个具有这些属性的JedisPool。可以将获取对应属性的代码和上面yml的属性设置联合起来看。

    /** * Created by makersy on 2019 */ @Service public class RedisPoolFactory { @Autowired RedisConfig redisConfig; @Bean public JedisPool JedisFactory() { JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxTotal(Integer.valueOf(redisConfig.getPool().get("maxActive"))); poolConfig.setMaxIdle(Integer.valueOf(redisConfig.getPool().get("maxIdle"))); poolConfig.setMaxWaitMillis(Integer.valueOf(redisConfig.getPool().get("maxWait")) * 1000); //注意单位是ms,要转换单位 poolConfig.setMinIdle(Integer.valueOf(redisConfig.getPool().get("minIdle"))); return new JedisPool(poolConfig, redisConfig.getHost(), redisConfig.getPort(), redisConfig.getTimeout()*1000, redisConfig.getPassword(), 0); } }

    结语

    到此为止,整合springboot与redis就完成了。

    最新回复(0)