- redis.properties
- redis.ip=redis.test.yiyaowang.com
- redis.port=6379
- redis.timeout=8000
- redis.maxTotal=100
- redis.maxIdle=200
- redis.maxWaitMillis=8000
- redis.testOnBorrow=true
- spring-redis.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
- <bean id="dbkeypropertyConfigurer"
- class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
- <property name="locations">
- <list>
- <!-- 密钥存放位置, 由运维告知 -->
- <value>file:/etc/dbprivatekey.properties</value>
- <value>classpath*:config/*.properties</value>
- </list>
- </property>
- </bean>
- <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
- <property name="testOnBorrow" value="true"/>
- <property name="maxIdle" value="200"/>
- <property name="maxWaitMillis" value="8000"/>
- </bean>
- <bean id="jedisPool" class="redis.clients.jedis.JedisPool" destroy-method="destroy">
- <constructor-arg index="0">
- <ref bean="jedisPoolConfig"/>
- </constructor-arg>
- <constructor-arg index="1" value="${redis.ip}" type="String"/>
- <constructor-arg index="2" value="${redis.port}" type="int"/>
- <constructor-arg index="3" value="${redis.timeout}" type="int"/>
- <constructor-arg index="4" value="${redis.common.key}" type="String"/> <!--redis.common.key 定义在 /etc/dbprivatekey.properties 中 -->
- </bean>
- </beans>
- JedisUtil.java
- package com.yyw.scs.util;
- import com.yyw.scs.framework.kit.CustomizedPropertyConfigurer;
- import org.apache.commons.lang3.StringUtils;
- import org.aspectj.lang.reflect.MethodSignature;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.stereotype.Service;
- import redis.clients.jedis.Jedis;
- import redis.clients.jedis.JedisPool;
- import redis.clients.jedis.JedisPoolConfig;
- import java.util.LinkedHashSet;
- import java.util.Set;
- @Service
- public class JedisUtil {
- private static Logger logger = LoggerFactory.getLogger(JedisUtil.class);
- public static String DEFAULT_PREF = "scs_delay_rate_";
- /**
- * 默认过期时间 10 分钟
- */
- public static int DEFAULT_EXP_TIME = 10 * 60;
- public static String DATE_TIME = "初始化";
- private JedisPool jedisPool;
- /**
- * 释放 jedis 资源
- *
- * @param jedis
- */
- public void returnResource(final Jedis jedis) {
- if (jedis != null && jedisPool != null) {
- jedisPool.returnResource(jedis);
- }
- }
- public String get(String key) {
- Jedis jedis = null;
- try {
- jedis = getJedis();
- return jedis.get(key);
- } catch (Exception e) {
- e.printStackTrace();
- logger.error("Get key erroe :" + e);
- if (jedisPool != null && jedis != null) {
- jedisPool.returnBrokenResource(jedis);
- }
- return null;
- } finally {
- returnResource(jedis);
- }
- }
- public byte[] bget(String key){
- Jedis jedis = null;
- try {
- jedis=getJedis();
- return jedis.get(key.getBytes());
- } catch (Exception e) {
- e.printStackTrace();
- logger.error("Get key erroe :"+e);
- if(jedisPool != null && jedis != null){
- jedisPool.returnBrokenResource(jedis);
- }
- return null;
- }finally{
- returnResource(jedis);
- }
- }
- public String getStr(String key) {
- Jedis jedis = null;
- try {
- jedis = getJedis();
- return jedis.get(key);
- } catch (Exception e) {
- e.printStackTrace();
- logger.error("Get key erroe :" + e);
- if (jedisPool != null && jedis != null) {
- jedisPool.returnBrokenResource(jedis);
- }
- return null;
- } finally {
- returnResource(jedis);
- }
- }
- public void set(String key, String value, int seconds) {
- Jedis jedis = null;
- try {
- jedis = getJedis();
- jedis.set(key, value);
- jedis.expire(key, seconds);
- } catch (Exception e) {
- e.printStackTrace();
- logger.error("Set keyex error :" + e);
- if (jedisPool != null && jedis != null) {
- jedisPool.returnBrokenResource(jedis);
- }
- } finally {
- returnResource(jedis);
- }
- }
- public void bset(String key, byte[] value, int seconds){
- Jedis jedis = null;
- try {
- jedis=getJedis();
- jedis.set(key.getBytes(), value);
- jedis.expire(key.getBytes(), seconds);
- } catch (Exception e) {
- e.printStackTrace();
- logger.error("Set keyex error :"+e);
- if(jedisPool != null && jedis != null){
- jedisPool.returnBrokenResource(jedis);
- }
- } finally{
- returnResource(jedis);
- }
- }
- public void del(String key) {
- Jedis jedis = null;
- try {
- jedis = getJedis();
- jedis.del(key);
- } catch (Exception e) {
- e.printStackTrace();
- logger.error("Del key error :" + e);
- if (jedisPool != null && jedis != null) {
- jedisPool.returnBrokenResource(jedis);
- }
- } finally {
- returnResource(jedis);
- }
- }
- public void set(String key, String value) {
- Jedis jedis = null;
- try {
- jedis = getJedis();
- jedis.set(key, value);
- } catch (Exception e) {
- e.printStackTrace();
- logger.error("Set key error :" + e);
- if (jedisPool != null && jedis != null) {
- jedisPool.returnBrokenResource(jedis);
- }
- } finally {
- returnResource(jedis);
- }
- }
- // 获取所有的 keys
- public Set<String> keys(final String pattern) {
- Set<String> keys = new LinkedHashSet<String>();
- Jedis jedis = null;
- try {
- jedis = getJedis();
- keys = jedis.keys(pattern);
- } catch (Exception e) {
- e.printStackTrace();
- logger.error("Set key error :" + e);
- if (jedisPool != null && jedis != null) {
- jedisPool.returnBrokenResource(jedis);
- }
- } finally {
- if (jedisPool != null && jedis != null) {
- jedisPool.returnResource(jedis);
- }
- }
- return keys;
- }
- /**
- * 同步获取 Jedis 实例
- *
- * @return Jedis
- */
- public synchronized Jedis getJedis() {
- if (jedisPool == null) {
- jedisPool = getJedisPool();
- }
- Jedis jedis = null;
- try {
- if (jedisPool != null) {
- jedis = jedisPool.getResource();
- }
- } catch (Exception e) {
- e.printStackTrace();
- logger.error("Get jedis error :" + e);
- }
- return jedis;
- }
- public JedisPool getJedisPool() {
- if (jedisPool == null) {
- try {
- String ip = CustomizedPropertyConfigurer.getProperty("redis.ip");
- String port = CustomizedPropertyConfigurer.getProperty("redis.port");
- String timeout = CustomizedPropertyConfigurer.getProperty("redis.timeout");
- String maxTotal = CustomizedPropertyConfigurer.getProperty("redis.maxTotal");
- String maxIdle = CustomizedPropertyConfigurer.getProperty("redis.maxIdle");
- String maxWaitMillis = CustomizedPropertyConfigurer.getProperty("redis.maxWaitMillis");
- String testOnBorrow = CustomizedPropertyConfigurer.getProperty("redis.testOnBorrow");
- String key = CustomizedPropertyConfigurer.getProperty("redis.common.key");
- JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
- jedisPoolConfig.setMaxTotal(Integer.valueOf(maxTotal));
- jedisPoolConfig.setMaxIdle(Integer.valueOf(maxIdle));
- jedisPoolConfig.setMaxWaitMillis(Long.valueOf(maxWaitMillis));
- jedisPoolConfig.setTestOnBorrow(Boolean.valueOf(testOnBorrow));
- if (StringUtils.isNotEmpty(key))
- jedisPool = new JedisPool(jedisPoolConfig, ip, Integer.valueOf(port), Integer.valueOf(timeout), key);
- else {
- jedisPool = new JedisPool(jedisPoolConfig, ip, Integer.valueOf(port), Integer.valueOf(timeout));
- }
- } catch (Exception e) {
- logger.error("JedisUtil init Error", e);
- }
- }
- return jedisPool;
- }
- public String generateRedisKey(MethodSignature signature, Object[] args){
- StringBuilder keyBuilder =new StringBuilder(DEFAULT_PREF);
- String methodName =signature.getName();
- keyBuilder.append(methodName);
- if(args!=null && args.length>0){
- int i=0;
- for(Object arg:args){
- keyBuilder.append("_arg").append(i++).append("_").append(String.valueOf(arg));
- }
- }
- return keyBuilder.toString();
- }
- }
- DelayRateServiceAspect.java
- package com.yyw.scs.wms.service.impl;
- import com.alibaba.fastjson.JSON;
- import com.yyw.scs.util.DateUtils;
- import com.yyw.scs.util.JedisUtil;
- import org.aspectj.lang.ProceedingJoinPoint;
- import org.aspectj.lang.annotation.Around;
- import org.aspectj.lang.annotation.Aspect;
- import org.aspectj.lang.reflect.MethodSignature;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.core.Ordered;
- import org.springframework.stereotype.Component;
- import java.io.*;
- import java.util.Date;
- @Aspect
- @Component
- public class DelayRateServiceAspect implements Ordered {
- @Autowired
- private JedisUtil jedisUtil;
- private static Logger LOGGER = LoggerFactory.getLogger(DelayRateServiceAspect.class);
- @Around("execution(* com.yyw.scs.wms.service.impl.DelayRateServiceImpl.find*(..))")
- public Object timeAround(ProceedingJoinPoint joinPoint) {
- // 定义返回对象, 得到方法需要的参数
- Object obj = null;
- try {
- Object[] args = joinPoint.getArgs();
- MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
- String redisKey = generateRedisKey(methodSignature, args);
- byte[] res = jedisUtil.bget(redisKey);
- if (res != null) {
- obj = objectDeserialization(res);
- } else {
- obj = joinPoint.proceed(args);
- if (obj != null) {
- jedisUtil.bset(redisKey, objectSerialiable(obj), JedisUtil.DEFAULT_EXP_TIME);
- JedisUtil.DATE_TIME = DateUtils.dateFormatToDatestr(new Date(), "MM-dd HH:mm");
- }
- }
- } catch (Throwable throwable) {
- throwable.printStackTrace();
- LOGGER.error("DelayRateServiceAspect 报错", throwable);
- }
- return obj;
- }
- // 字符串反序列化为对象
- public Object objectDeserialization(byte[] value) {
- Object newObj = null;
- try {
- ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(value);
- ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
- newObj = objectInputStream.readObject();
- objectInputStream.close();
- byteArrayInputStream.close();
- } catch (UnsupportedEncodingException e) {
- LOGGER.warn("IOException", e);
- } catch (ClassNotFoundException e) {
- LOGGER.warn("ClassNotFoundException", e);
- } catch (IOException e) {
- LOGGER.warn("IOException", e);
- }
- return newObj;
- }
- // 对象序列化为字符串
- public byte[] objectSerialiable(Object obj) {
- Byte[] serStr = null;
- try {
- ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
- ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
- objectOutputStream.writeObject(obj);
- byte[] byteArray = byteArrayOutputStream.toByteArray();
- objectOutputStream.close();
- byteArrayOutputStream.close();
- return byteArray;
- } catch (UnsupportedEncodingException e) {
- LOGGER.warn("UnsupportedEncodingException data:" + JSON.toJSONString(obj), e);
- } catch (IOException e) {
- LOGGER.warn("IOException data:" + JSON.toJSONString(obj), e);
- }
- System.out.println(serStr);
- return null;
- }
- public String generateRedisKey(MethodSignature signature, Object[] args) {
- StringBuilder keyBuilder = new StringBuilder(JedisUtil.DEFAULT_PREF);
- String methodName = signature.getName();
- keyBuilder.append(methodName);
- if (args != null && args.length> 0) {
- int i = 0;
- for (Object arg : args) {
- keyBuilder.append("_arg").append(i++).append("_").append(String.valueOf(arg));
- }
- }
- return keyBuilder.toString();
- }
- @Override
- public int getOrder() {
- return 1;
- }
- }
来源: http://www.bubuko.com/infodetail-2654874.html