SpringBoot中application.yml配置文件中的redis属性是如何读入到程序中的?

RedisProperties类

a、application.properties配置参数示例

spring.redis.database=0

spring.redis.host=127.0.0.1

spring.redis.password=123

spring.redis.port=6379

spring.redis.pool.max-idle=8

spring.redis.pool.min-idle=0  

spring.redis.pool.max-active=8  

spring.redis.pool.max-wait=-1

b、application.yml配置参数示例

    spring:

      redis :

        host : localhost 

        port : 6379 

        password : 123

        database : 1

        pool.max-idle : 8 

        pool.min-idle : 1

        pool.max-active : 8  

        pool.max-wait : -1  

c、RedisProperties 源码

SpringBoot中application.yml配置文件中的redis属性是如何读入到程序中的?

 源码分析

此类被@ConfigurationProperties注解,表示从外部文件注入属性值,外部文件中的参数会自动封装到RedisProperties中

RedisAutoConfiguration类源码

SpringBoot中application.yml配置文件中的redis属性是如何读入到程序中的?

源码分析

此类被@EnableConfigurationProperties注解,所以SpringBoot会触发对RedisProperties执行自动绑定属性值。

此类会自动创建bean对象: redis连接池JedisConnectionFactory和redis模板类(RedisTemplate和StringRedisTemplate)。直接在应用中通过@Autowire就可以注入以上对象。

 项目启动类启动时如何关联到配置类RedisAutoConfiguration

SpringBoot中application.yml配置文件中的redis属性是如何读入到程序中的?

查看源码@SpringBootApplication被@EnableAutoConfiguration注解

SpringBoot中application.yml配置文件中的redis属性是如何读入到程序中的?

被@EnableAutoConfiguration注解时,SpringBoot启动时会扫描对应jar包中的META-INF/spring-autoconfigure-metadata.properties文件,并初始化里面的配置的类。查看spring-autoconfigure-metadata.properties,里面配置了上文的RedisAutoConfiguration类,所以我们可以直接在类中注入RedisTemplate

项目启动时,主启动类被@EnableAutoConfiguration注解,会扫描其引入的jar包中的spring.factories文件。

 

小结:

1)项目主启动类上被@SpringBootApplication注解,@SpringBootApplication又被@EnableAutoConfiguration注解。@EnableAutoConfiguration会触发扫描项目引入的jar包中的spring.factories文件。主启动类再加上注解@EnableCaching后,这样就会触发初始化类org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration。

2)RedisAutoConfiguration被@EnableConfigurationProperties注解,会触发对RedisProperties执行自动绑定属性值。

3)RedisProperties类被@ConfigurationProperties注解,表示从外部文件(如application.properties)注入属性值。application.properties中的参数会被自动封装到RedisProperties中。

 

 

 

 

 

 

 

 

 

 

 

 

SpringBoot中application.yml配置文件中的redis属性是如何读入到程序中的?

上一篇:call和apply的区别及用法


下一篇:Asynchronous Disk I/O Appears as Synchronous on Windows