SpringBoot--自动配置的替换和关闭
SpringBoot启用自动配置需要使用@EnableAutoConfiguration注解,整个应用只需一个该注解,因此,只要将该注解加到主配置类即可。
由于 @SpringBootApplication是由@EnableAutoConfiguration、@ComponentScan、@Configuration这三个组合的,因此,只要项目中使用了@SpringBootApplication,也自然使用了@EnableAutoConfiguration,从而启用了自动配置。
自动配置的替换
SpringBoot自动配置通常有一个原则:当容器中不存在特定类型的Bean时,SpringBoot才会配置该类型的bean。例如引入spring-boot-starter-jdbc依赖,SpringBoot会尝试在容器中自动配置一个DataSource bean,但如果显示的在容器中配置了一个DataSource bean,那么SpringBoot就不会去自动配置了。
SpringBoot提供一个@ConditionalOnMissingBean注解,该注解通常和@Bean同时使用,这表示只有当某个bean不存在时,才会创建@Bean修饰的Bean,
比如以下代码:
// 如果容器中没有DataSource类型的Bean,则创建一个DriverDataSource作为默认数据源
@ConditionalOnMissingBean({DataSource.class})
@Bean
public DataSource dataSource(){
return new DriverDataSource();
}
// 如果容器中不存在名为dataSource的Bean,则创建一个DriverDataSource作为默认数据源
@ConditionalOnMissingBean(name = "dataSource")
@Bean
public DataSource dataSource(){
return new DriverDataSource();
}
禁用特定的自动配置
要禁用特定的自动配置类,可通过@EnableAutoConfiguration注解的如下属性来指定:
- exclude:值可以是一个Class数组,用于禁用一个或多个自动配置类
- excludeName:指定一个或多个自动配置类的完整类名的字符串
实际使用中,@SpringBootApplication已包含了@EnableAutoConfiguration,@SpringBootApplication注解的exclude、excludeName两个属性就是@EnableAutoConfiguration注解的这两个属性的别名。
比如禁用DataSourceAutoConfiguration的自动配置类
// 禁用Spring Boot的自动数据源配置
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class App
{
public static void main(String[] args)
{
// 创建Spring容器、运行Spring Boot应用
SpringApplication.run(App.class, args);
}
}
在application.properties中通过spring.autoconfigure.exclude来指定要禁用的配置类,比如禁用DataSourceAutoConfiguration和ActiveMQAutoConfiguration:
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration
SpringBoot--自动配置的替换和关闭的更多相关文章
- SpringBoot自动配置(装配)流程
源码分析 SpringBoot自动配置流程 首先,我们要了解在@SpringBootApplication注解的内部,还具有@EnableAutoConfiguration,@SpringBo ...
- 浅谈springboot自动配置原理
前言 springboot自动配置关键在于@SpringBootApplication注解,启动类之所以作为项目启动的入口,也是因为该注解,下面浅谈下这个注解的作用和实现原理 @SpringBootA ...
- SpringBoot自动配置源码调试
之前对SpringBoot的自动配置原理进行了较为详细的介绍(https://www.cnblogs.com/stm32stm32/p/10560933.html),接下来就对自动配置进行源码调试,探 ...
- SpringBoot实战之SpringBoot自动配置原理
SpringBoot 自动配置主要通过 @EnableAutoConfiguration, @Conditional, @EnableConfigurationProperties 或者 @Confi ...
- springboot自动配置源码解析
springboot版本:2.1.6.RELEASE SpringBoot 自动配置主要通过 @EnableAutoConfiguration, @Conditional, @EnableConfig ...
- 源码学习系列之SpringBoot自动配置(篇一)
源码学习系列之SpringBoot自动配置源码学习(篇一) ok,本博客尝试跟一下Springboot的自动配置源码,做一下笔记记录,自动配置是Springboot的一个很关键的特性,也容易被忽略的属 ...
- 源码学习系列之SpringBoot自动配置(篇二)
源码学习系列之SpringBoot自动配置(篇二)之HttpEncodingAutoConfiguration 源码分析 继上一篇博客源码学习系列之SpringBoot自动配置(篇一)之后,本博客继续 ...
- Springboot 自动配置浅析
Introduction 我们知道,SpringBoot之所以强大,就是因为他提供了各种默认的配置,可以让我们在集成各个组件的时候从各种各样的配置文件中解放出来. 拿一个最普通的 web 项目举例.我 ...
- SpringBoot自动配置原理学习
介绍 构建Springboot项目时我们会创建一个启动类 @SpringBootApplication public class DemoApplication { public static voi ...
- springboot自动配置国际化失效分析
最近在整理springBoot国际化时,发现国际化没有生效,通过报错提示在 MessageTag -> doEndTag处打断点 最后发现messageSource并不是ResourceBund ...
随机推荐
- .net6 Api添加跨域
参照:(7条消息) .net6使用最小api(8)- 开启跨域模式,通过扩展服务实现_hailang2ll的博客-CSDN博客 步骤: 一.在appsetting.json里添加配置文件 //配置文件 ...
- Web前端入门第 44 问:CSS 循环动画 animation 效果演示
相关属性 @keyframes 定义动画的关键帧序列 animation-name 指定 @keyframes 动画的名称 animation-duration 动画单次循环的持续时间(必需属性,否则 ...
- 【SQL周周练】给你无酸纸、变色油墨,你能伪造多少美金?
大家好,我是"蒋点数分",多年以来一直从事数据分析工作.从今天开始,与大家持续分享关于数据分析的学习内容. 本文是第 2 篇,也是[SQL 周周练]系列的第 2 篇.该系列是挑选或 ...
- 【记录】JS和C++的Base64编码解码(支持中文)
JS 解决方法来源于知乎新码笔记的文章 function b64Encode(str) { return btoa(unescape(encodeURIComponent(str))); } func ...
- Axure RP大数据可视化大屏原型组件源文件
Axure RP大数据可视化大屏原型模板 大数据BI分析上大屏,在很多大企业和政府单位客户都需要,高新区市场监控等,那使用Axure RP做交互原型是必不可少的,有了大屏原型模板可做出不同风格和行业的 ...
- Flutter集成微信小程序技术教程
.markdown-body { color: rgba(89, 89, 89, 1); font-size: 15px; font-family: -apple-system, system-ui, ...
- codeup之输出梯形
Description 输入一个高度h,输出一个高为h,上底边为h的梯形. Input 一个整数h(1<=h<=1000). Output h所对应的梯形. Sample Input Co ...
- WPF应用启动时,检测触摸失效的几种方式
在开发OPS项目,发现插拔式的OPS在切换系统.开关机.重启,会时不时出现部分WPF开机自启的 应用触摸失效的问题.而且出现问题的应用都是全屏窗口应用.用snoop 附加上去,没有Touch 和Sty ...
- python时间戳转时间格式
一.两种时间戳转换为时间格式:13位和10位,将时间戳转成时间格式 import time #13位时间戳转时间 tre_timeArray = time.localtime(164601220668 ...
- Java 判断两个文件是否相同
使用Java 如何判断两个文件是否相同呢?我的做法是 (1)先比较两个文件内容的长度: (2)在长度相同的情况下,再比较两个文件的MD5值. 需要引入的Jar 包: <dependency> ...