Springboot 利用 Jedis代码动态配置Redis

原创 2018年04月17日 13:09:05

Springboot 利用 Jedis代码动态配置Redis

项目需求,甲方需求是处于安全的目的不想让properties里的部分配置信息体现在文件中,而且可能在之后需要通过页面修改对应的配置,所以出的解决方案就是部分配置信息存储在数据库里,然后利用@Bean注入的方式将其注入到springboot中,然后直接代码配置,例如:Redis。

环境

  • Java 1.8
  • Springboot 2.0
  • MySQL 5.7
  • Redis 3.0

pom

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.21</version>
</dependency>
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.1.1</version>
</dependency>
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
</dependency>
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
</dependency>

创建一个对象,用于保存Redis相关配置信息,这里简单设置了url和port

public class RedisConfig {
    private String url;
    private int port;
    //省略get set
}

从数据库获取对应的配置信息,因为数据库的设计有点问题,结构为id,keyName,value,所以暂时获取一个配置url

@Mapper
public interface ConfiguresMapper {
    @Select("SELECT * FROM configures WHERE keyName = #{key}")
    Configures getOneByKey(@Param("key") String key);
}

然后就是在入口文件进行@Bean的注入,这样就可以在全局使用@Autowired进行自动注入引入

@SpringBootApplication
public class DemoApplication {
    @Autowired
    private ConfiguresMapper configuresMapper;

    @Bean
    public RedisConfig configures() {
        //从数据库获取url,也就是host
        Configures configures = configuresMapper.getOneByKey("redisURL");
        RedisConfig redisConfig = new RedisConfig();
        //直接设置port,实际是从数据库获取,等待数据表结构重新设计后,进行更改
        redisConfig.setPort(6379);
        redisConfig.setUrl(configures.getValue());
        return redisConfig;
    }

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

至此注入的过程就完成,接下来就是引入使用。

使用Jedis进行操作Redis

import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

@Configuration
@EnableAutoConfiguration
public class RedisConfig {
    private static final Logger logger = LoggerFactory.getLogger(RedisConfig.class);
    //因为命名出现了重复,所以需要注入引入的路径
    @Autowired
    private com.example.demo.Entity.RedisConfig redisConfig;
    @Bean
    public JedisPoolConfig getRedisConfig() {
        JedisPoolConfig config = new JedisPoolConfig();
        return config;
    }

    @Bean
    public JedisPool getJedisPool() {
        JedisPoolConfig config = getRedisConfig();
        logger.info("---------"+redisConfig.getUrl());
        logger.info("---------"+redisConfig.getPort());
        JedisPool jp = new JedisPool(config, redisConfig.getUrl(), redisConfig.getPort());
        return jp;
    }
}

Jedis操作

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

@Service
public class RedisService {
    private static final Logger logger = LoggerFactory.getLogger(RedisService.class);
    @Autowired
    private JedisPool jedisPool;

    public String get(String key) {
        Jedis jedis = null;
        String result = null;
        try {
            jedis = jedisPool.getResource();
            String str = jedis.get(key);
            logger.info("Redis get success - " + key + ", value:" + str);
            result = str;
        } catch (Exception e) {
            logger.error(e.getMessage());
        }
        return result;
    }
}

这里一个问题是,没有释放jedis,所以需要添加释放的操作

写一个Controller进行测试

@RestController
@RequestMapping("/test")
public class TestController{
    @Autowired
    private RedisConfig redisConfig;
    @Autowired
    private RedisService redisService;

    @RequestMapping(value = {"/", ""})
    public String hellTask() {
        Configures configures = new Configures();
        int port = redisConfig.getPort();
        String url = redisConfig.getUrl();
        String value = redisService.get("ket");
        return "Port: " + port + "-----" + url + "---value---" + value;
    }
}

然后访问 localhost:8080/test/
这里写图片描述

至此整体需求满足,剩下的就是应用到实际的项目里进行测试。

版权声明: https://blog.csdn.net/xinxin6193/article/details/79972197

SpringBoot + Redis + MQ 高并发点赞项目实战

-
  • 1970年01月01日 08:00

在Springboot上使用jedis来操作缓存redis --jedis的配置

在Springboot下使用Jedis对redis的操作, java 客户端jedis的具体配置(shardedJedispool)。...
  • LOPYasd
  • LOPYasd
  • 2017-05-10 19:24:28
  • 4025

spring boot中使用redis -Jedis

1、加入jar包依赖 使用maven形式 org.springframework.boot spring-boot-starter-redis version>1.4.7.REL...
  • xiao______xin
  • xiao______xin
  • 2017-06-29 13:49:23
  • 1908

SpringBoot 集成Jedis操作Redis缓存

在使用SpringBoot构建SpringCloud微服务时,需要用到Redis做数据缓存,提高业务逻辑的处理。所以就不得不让SpringBoot集成Redis,但如果使用官方的Redis去操作的话,...
  • u011051912
  • u011051912
  • 2017-07-10 15:24:35
  • 4213

在Springboot下使用Jedis操作redis---jedis在代码中的使用

在Springboot下使用Jedis操作redis,jedis在代码中的使用
  • LOPYasd
  • LOPYasd
  • 2017-05-11 11:21:50
  • 1210

SpringBoot学习笔记(5) Spring Boot集成Redis实现自动配置

通过上面一些笔记的介绍, 我们可以自己动手去集成Redis, 没有什么难度的 还有Spring Boot官方提供了Spring-Data-Redis的Starter POM...
  • a67474506
  • a67474506
  • 2016-09-20 13:37:09
  • 45763

SpringBoot配置Redis连接池

spring boot 配置Redis 连接池
  • u010473656
  • u010473656
  • 2017-12-18 23:35:18
  • 651

5Spring Boot集成Redis实现自动配置

spring Boot官方提供了Spring-Data-Redis的Starter POM 有兴趣的可以查看下这篇资料 http://blog.didispace.com/spring...
  • xiaoliuliu2050
  • xiaoliuliu2050
  • 2016-12-29 18:13:07
  • 2403

spring boot 自学笔记(四) Redis集成—Jedis

Spring boot 集成Redis ,使用JedisPool连接池和Jedis客户端。
  • i_vic
  • i_vic
  • 2016-11-09 09:43:26
  • 10878

spring boot 切换redis数据库

查了很多资料都是配置文件的  公司需要随时切换数据库 所以搞了半天我的处理方式如下 package com.rayclear; import com.rayclear.common.RedisO...
  • qq_22978533
  • qq_22978533
  • 2017-08-04 16:33:13
  • 1321
收藏助手
不良信息举报
您举报文章:Springboot 利用 Jedis代码动态配置Redis
举报原因:
原因补充:

(最多只允许输入30个字)