简介
说明
Spring Boot 提供了强大的自动配置功能。有了这些自动配置,我们可以:
- 只需在pom.xml中引入某个依赖即可使用该功能。
- 在application.yml中可以配置某个依赖的属性
需要排除自动配置的场景
有时候自动配置的功能与自己的需求不符,这时就要排除Spring Boot 某些类的自动配置,然后定义自己的配置。
需求
需求:自定义:数据源、邮件。
数据源、邮件都有自动配置,我们需要排除 Spring Boot 的自动化配置,并进行自定义。本文只介绍如何排除SpringBoot的自动配置。
方案1:@SpringBootApplication
使用@SpringBootApplication 时,有两种方法。
法1:通过 exclude 属性排除指定的类
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, MailSenderAutoConfiguration.class}) public class Application { // ... }
法2:使用 excludeName 属性排除指定的类名全路径
适合场景:自动配置类不在类路径下。
@SpringBootApplication(excludeName = {"org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration", "org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration"}) public class Application { // ... }
方案2:@EnableAutoConfiguration
法1:通过 exclude 属性排除指定的类
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, MailSenderAutoConfiguration.class}) public class Application { // ... }
法2:使用 excludeName 属性排除指定的类名全路径
适合场景:自动配置类不在类路径下。
@EnableAutoConfiguration(excludeName = {"org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration", "org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration"}) public class Application { // ... }
方案3:@SpringCloudApplication
Spring Cloud 是以建立在 Spring Boot 应用之上的。
法1:通过 exclude 属性排除指定的类
@... @EnableAutoConfiguration (exclude = {DataSourceAutoConfiguration.class, MailSenderAutoConfiguration.class}) @SpringCloudApplication public class Application { // ... }
法2:使用 excludeName 属性排除指定的类名全路径
@EnableAutoConfiguration(excludeName = {"org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration", "org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration"}) @SpringCloudApplication public class Application { // ... }
方案4:配置文件
application.yml写法
spring: autoconfigure: exclude: - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration - org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration
application.properties写法
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\ org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration
或者
spring.autoconfigure.exclude[0]=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration spring.autoconfigure.exclude[1]=org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration
排除bootstrap的配置
上边方法可以排除通过autoconfig导入的配置,例如:
- @Configuration标记的类
- META-INF下的:org.springframework.boot.autoconfigure.EnableAutoConfiguration=xx.xx.xx.AutoConfiguration
如果要排除bootstrap的自动配置,例如:
META-INF下的:org.springframework.cloud.bootstrap.BootstrapConfiguration=xx.xx.XxxBootstrapConfiguration
可以用这种方法:
@BootstrapConfiguration(exclude = {Xxx.class})
请先
!