1. 引入自动配置包
<!-- 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类的引用包-->
  1. 编写配置类

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;

}
  1. 配置自动配置类

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;

    }
}
  1. META-INF下新建spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration =\\
com.ewell.redis.config.AutoConfigRedis,\\
com.ewell.redis.config.RedissonAutoConfiguration

指定具体启动类