• SpringBoot集成Redis后配置如何查找


    当使用SpringBoot自动化集成各个组件时,各个组件的配置应该如何方便查找呢,下面以redis为例说明:

    首先到spring-boot-autoconfigure-2.1.1.RELEASE.jar的META-INF下找到spring.factories文件,文件内容如下,是SpringBoot自动集成各个组件的配置类:

    org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration,\
    org.springframework.boot.autoconfigure.data.mongo.MongoReactiveDataAutoConfiguration,\
    org.springframework.boot.autoconfigure.data.mongo.MongoReactiveRepositoriesAutoConfiguration,\
    org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration,\
    org.springframework.boot.autoconfigure.data.neo4j.Neo4jDataAutoConfiguration,\
    org.springframework.boot.autoconfigure.data.neo4j.Neo4jRepositoriesAutoConfiguration,\
    org.springframework.boot.autoconfigure.data.solr.SolrRepositoriesAutoConfiguration,\
    org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,\
    org.springframework.boot.autoconfigure.data.redis.RedisReactiveAutoConfiguration,\
    org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration,\
    org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration,\
    org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration,\
    org.springframework.boot.autoconfigure.elasticsearch.jest.JestAutoConfiguration,\
    org.springframework.boot.autoconfigure.elasticsearch.rest.RestClientAutoConfiguration,\

    比如以RedisAutoConfiguration为例:

    package org.springframework.boot.autoconfigure.data.redis;
    
    import java.net.UnknownHostException;
    
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    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.Import;
    import org.springframework.data.redis.connection.RedisConnectionFactory;
    import org.springframework.data.redis.core.RedisOperations;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.core.StringRedisTemplate;
    
    @Configuration
    @ConditionalOnClass(RedisOperations.class)
    @EnableConfigurationProperties(RedisProperties.class)
    @Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
    public class RedisAutoConfiguration {
    
        @Bean
        @ConditionalOnMissingBean(name = "redisTemplate")
        public RedisTemplate<Object, Object> redisTemplate(
                RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
            RedisTemplate<Object, Object> template = new RedisTemplate<>();
            template.setConnectionFactory(redisConnectionFactory);
            return template;
        }
    
        @Bean
        @ConditionalOnMissingBean
        public StringRedisTemplate stringRedisTemplate(
                RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
            StringRedisTemplate template = new StringRedisTemplate();
            template.setConnectionFactory(redisConnectionFactory);
            return template;
        }
    
    }

    注意其中的@EnableConfigurationProperties(RedisProperties.class):

    package org.springframework.boot.autoconfigure.data.redis;
    
    import java.time.Duration;
    import java.util.List;
    
    import org.springframework.boot.context.properties.ConfigurationProperties;
    
    
    @ConfigurationProperties(prefix = "spring.redis")
    public class RedisProperties {
    
        /**
         * Database index used by the connection factory.
         */
        private int database = 0;
    
        /**
         * Connection URL. Overrides host, port, and password. User is ignored. Example:
         * redis://user:password@example.com:6379
         */
        private String url;
    
        /**
         * Redis server host.
         */
        private String host = "localhost";
    
        /**
         * Login password of the redis server.
         */
        private String password;
    
        /**
         * Redis server port.
         */
        private int port = 6379;
    
        /**
         * Whether to enable SSL support.
         */
        private boolean ssl;
    
        /**
         * Connection timeout.
         */
        private Duration timeout;
    
        private Sentinel sentinel;
    
        private Cluster cluster;
    
        private final Jedis jedis = new Jedis();
    
        private final Lettuce lettuce = new Lettuce();
    
        
    
    }

    上边的RedisProperties就是集成redis之后的配置类。@ConfigurationProperties(prefix = "spring.redis")表示在properties或yml中配置redis的前缀,类中属性就是具体各个配置项,具体配置文件如下:

    # Spring配置
    spring:
      redis:
        # 地址
        host: localhost
        # 端口,默认为6379
        port: 6379
        # 密码
        password: 

    可以看出配置文件与RedisProperties类的属性一一对应。

    集成的其他组件的配置也是采用相同的实现思路,可以按规则找到配置文件,以明确有哪些配置项,以及配置项的默认值。

    比如:ServerProperties(servlet的配置)、DataSourceProperties(数据源的配置)。

  • 相关阅读:
    Java流程
    Java对于byte/short/char三种类型的注意事项
    JShell
    Java方法
    ubuntu14.04开启crontab日志
    ubuntu14.04开启crontab日志
    hive数据文件简单合并
    hive数据文件简单合并
    Sqoop增量从MySQL中向hive导入数据
    Sqoop增量从MySQL中向hive导入数据
  • 原文地址:https://www.cnblogs.com/silenceshining/p/15906539.html
Copyright © 2020-2023  润新知