首页
点滴
SpringBoot通过配置开关的方式灵活控制是否启动就加载自动配置
最近在我的开源权限管理系统中引入了redis和redisson,这样一来当别人拉去我的代码想要在自己的机器上跑这个系统的时候,就不得不启动redis服务了。 因为目前我系统里引入redis和redisson主要是用分布式锁的方式实现接口幂等性这个功能,跟系统主要功能暂时没多大关系。 那么如果只是想把系统跑起来,不想弄redis这块行不行呢? 可以,因为引入了redis依赖后,SpringBoot启动的时候会自动加载redis的配置类,如果没有启动redis服务,系统启动就会报错。所以我只需将自动加载配置类排除掉就行了。可以在配置文件里加个属性值弄成开关式的,想用redis服务的时候就打开,不想用就关闭,这样就非常灵活了。 #### 1、新建一个排除自动加载的配置类ExcludeAutoConfiguration.java ```java /** * 排除启动加载自动配置 * 如果配置项spring.redis.enabled的值为false时,则当前配置生效,即排除掉启动加载RedissonAutoConfiguration.class和RedisAutoConfiguration.class自动配置。 * @author Frank */ //@Profile("!prod") // 也可以指定激活哪个环境是当前配置生效 @Configuration @ConditionalOnProperty(value = "spring.redis.enabled", havingValue = "false") @EnableAutoConfiguration(exclude = {RedissonAutoConfiguration.class, RedisAutoConfiguration.class}) public class ExcludeAutoConfiguration { } ``` #### 2、配置类上加上相关注解 @Configuration 注解,表明这是一个配置类 @ConditionalOnProperty(value = "spring.redis.enabled", havingValue = "false") 表示当配置文件中的spring.redis.enabled值为false的时候这个配置类才生效 @EnableAutoConfiguration(exclude = {RedissonAutoConfiguration.class, RedisAutoConfiguration.class}) 表示排除RedissonAutoConfiguration.class,RedisAutoConfiguration.class 两个自动配置类启动时自动加载 #### 3、application.yml配置文件中要配置 ```yaml spring: redis: enabled: false ``` 这样开关式的配置就完成了。 spring.redis.enabled值为false时,与@ConditionalOnProperty注解中的havingValue值一致,然后ExcludeAutoConfiguration生效,@EnableAutoConfiguration(exclude = {RedissonAutoConfiguration.class, RedisAutoConfiguration.class})就会把自动配置类排除了。不启动redis服务启动项目也不会报错了。 当spring.redis.enabled值为true时,与@ConditionalOnProperty注解中的havingValue值不一致,就不会排除自动配置类,这个时候redis和redisson的功能就能正常使用了。
博客分类
源码解析 (1)
多线程 (5)
Java (10)
Linux (8)
Docker (9)
SpringBoot (14)
微服务 (1)
Redis (15)
MySQL (7)
VMware (3)
Nginx (15)
MyBatis (2)
RabbitMQ (1)
Git (7)
工具类 (12)
前端 (3)
友情链接
layui
© 2020-2025 www.chenhuazhan.com All Rights Reserved 备案号:
桂ICP备17004487号-1
粤公网安备44030002005146