<!-- starter类的引用包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<!-- starter类的引用包-->
AutoConfigRedisProperties
package com.ewell.redis.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* @author huajiejun
* @date 2020/9/2 9:26 上午
*/
@ConfigurationProperties(value = "zkky.redis")
@Data
public class AutoConfigRedisProperties {
private String host;
private int port;
private String password;
private int maxIdle;
private int maxTotal;
private int maxWait;
private boolean testOnBorrow;
private boolean testOnReturn;
private long timeBetweenEvictionRunsMillis;
}
AutoConfigRedis
package com.ewell.redis.config;
import com.ewell.redis.pro.aspect.ListPageCacheAopAdvice;
import com.ewell.redis.pro.aspect.SimpleCacheAopAdvice;
import com.ewell.redis.redission.lock.aspect.RedissonLockAopAdvice;
import com.ewell.redis.subenv.RedisKeyUtil;
import com.ewell.redis.web.aop.PreventAspect;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.JedisPoolConfig;
/**
* @author huajiejun
* @date 2020/9/2 9:27 上午
*/
@Configuration
@EnableConfigurationProperties(AutoConfigRedisProperties.class)
@ConditionalOnClass(RedisTemplate.class)
public class AutoConfigRedis {
@Autowired
private AutoConfigRedisProperties autoConfigRedisProperties;
@Bean
@ConditionalOnMissingBean
public RedisKeyUtil redisKeyUtil() {
return new RedisKeyUtil();
}
@Bean
@ConditionalOnMissingBean
public PreventAspect preventAspect() {
return new PreventAspect();
}
@Bean(name="connectionFactory")
@Primary
@ConditionalOnMissingBean
public RedisConnectionFactory connectionFactory()
{
JedisConnectionFactory jedisConnectionFactory = redis(autoConfigRedisProperties.getHost(), autoConfigRedisProperties.getPort(), autoConfigRedisProperties.getPassword());
jedisConnectionFactory.setPoolConfig(poolConfig());
return jedisConnectionFactory;
}
@Bean(name = "redisTemplate")
@Primary
@ConditionalOnMissingBean
public RedisTemplate redisTemplate(@Qualifier("connectionFactory") RedisConnectionFactory connectionFactory) {
RedisTemplate template = template(connectionFactory);
return template;
}
@Bean
@ConditionalOnMissingBean
public ListPageCacheAopAdvice listPageCacheAopAdvice() {
return new ListPageCacheAopAdvice();
}
@Bean
@ConditionalOnMissingBean(SimpleCacheAopAdvice.class)
public SimpleCacheAopAdvice SimpleCacheAopAdvice() {
return new SimpleCacheAopAdvice();
}
private JedisConnectionFactory redis(String host,int port,String password){
JedisConnectionFactory jedisConnectionFactory=new JedisConnectionFactory();
jedisConnectionFactory.setHostName(host);
jedisConnectionFactory.setPort(port);
jedisConnectionFactory.setPassword(password);
return jedisConnectionFactory;
}
private JedisPoolConfig poolConfig(){
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(autoConfigRedisProperties.getMaxTotal());
config.setMaxWaitMillis(autoConfigRedisProperties.getMaxWait());
config.setTestOnBorrow(autoConfigRedisProperties.isTestOnBorrow());
config.setTestOnReturn(autoConfigRedisProperties.isTestOnReturn());
config.setTimeBetweenEvictionRunsMillis(autoConfigRedisProperties.getTimeBetweenEvictionRunsMillis());
return config;
}
private RedisTemplate template(RedisConnectionFactory connectionFactory){
RedisTemplate redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(connectionFactory);
RedisSerializer stringSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringSerializer);
redisTemplate.setValueSerializer(stringSerializer);
redisTemplate.setHashKeySerializer(stringSerializer);
redisTemplate.setHashValueSerializer(stringSerializer);
return redisTemplate;
}
}
org.springframework.boot.autoconfigure.EnableAutoConfiguration =\\
com.ewell.redis.config.AutoConfigRedis,\\
com.ewell.redis.config.RedissonAutoConfiguration
指定具体启动类