SpringBoot封装JedisUtils工具类
SpringBoot已经实现了很多实用的缓存组件;但是由于工作中习惯了试用JedisUtils工具类来进行缓存操作, 这里记录一下SpringBoot中对于JedisUtils的封装
操作
新建一个SpringBoot项目
修改pom.xml
增加:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> <version>1.4.7.RELEASE</version> </dependency>
|
新建JedisConfiguration.java用于配置JedisPool Bean
import org.springframework.beans.factory.annotation.Value; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig;
@Configuration @EnableCaching public class JedisConfiguration {
@Value("${spring.redis.host}") private String host;
@Value("${spring.redis.port}") private int port;
@Value("${spring.redis.timeout}") private String timeouts;
@Value("${spring.redis.jedis.pool.min-idle}") private int maxIdle;
@Value("${spring.redis.jedis.pool.max-wait}") private String maxWaitMilliss;
@Value("${spring.redis.password}") private String password;
@Bean(name = "jedisPool") public JedisPool redisPoolFactory() { JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); jedisPoolConfig.setMaxIdle(maxIdle); long maxWaitMillis = Long.parseLong(maxWaitMilliss.replace("ms", "")); jedisPoolConfig.setMaxWaitMillis(maxWaitMillis); int timeout = Integer.parseInt(timeouts.replace("ms", "")); return new JedisPool(jedisPoolConfig, host, port, timeout); }
}
|
创建JedisUtils.java
import org.apache.log4j.Logger; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool;
import java.util.List; import java.util.Set;
public class JedisUtils implements ApplicationContextAware {
private static ApplicationContext applicationContext = null;
private static JedisPool jedisPool = null;
private static volatile Jedis jedis = null;
private static Logger logger = Logger.getLogger("JedisUtils");
public JedisUtils() { }
@Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { if (JedisUtils.applicationContext == null) { JedisUtils.applicationContext = applicationContext; } }
public static Jedis getJedis() { if (jedis == null) { synchronized (Jedis.class) { if (jedis == null) { jedis = getJedisPool().getResource(); } } } return jedis; }
public static JedisPool getJedisPool() { if (jedisPool == null) { synchronized (JedisPool.class) { if (jedisPool == null) { jedisPool = applicationContext.getBean("jedisPool", JedisPool.class); } } } return jedisPool; }
public static boolean hasKey(String key) { return getJedis().exists(key); }
public static boolean set(String key, String value) { boolean result = false; Jedis jedis = null; try { jedis = getJedis(); result = "OK".equals(jedis.set(key, value)); } catch (Exception e) { closeBrokenJedis(jedis); logger.error("JedisCache.set falid", e); } return result; }
public static boolean set(String key, String value, int timeOut) { boolean result = false; Jedis jedis = null; try { jedis = getJedis(); result = "OK".equals(jedis.setex(key, timeOut, value)); } catch (Exception e) { closeBrokenJedis(jedis); logger.error("JedisCache.set falid", e); } return result; }
public static String get(String key) { String result = null; Jedis jedis = null; try { jedis = getJedis(); result = jedis.get(key); closeJedis(jedis); } catch (Exception e) { closeBrokenJedis(jedis); logger.error("JedisCache.get falid", e); } return result; }
public static void del(String key) { getJedis().del(key); } }
|
其中的getJedisPool()
可以从bean获取JedisPool
对象, 用于后续的操作, 上面给出了部分代码, 完整版在这.
在springboot的主类上添加注解
@SpringBootApplication @EnableCaching @Import({JedisUtils.class, JedisPool.class}) public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
|