一、配置类(Configuration Classes)
Spring Boot 支持基于 xml 的配置,但更偏向于使用基于 Java 的配置,通常建议使用定义有 main 方法的主 @Configuration 类(主配置类)。
小提示:对于基于 xml 的 spring 配置,建议尽可能使用对等的基于 java 的配置进行替换,使用 Enable* 注解会是一种比较好的切入方式。
1、导入其他的 Configuration Classes
@Configuration 并不需要都放置再同一个类中,可以考虑分散在多个类,并且通过 @Import 注解导入。另一种方式则是通过使用 @ComponentScan 自动扫描 spring 配置,其中就包含了 @Configuration classes 。
2、导入 xml 配置
确实还是需要使用 xml 配置的,建议还是从 @Configuration 类开始,通过 @ImportResource 注解来加载 xml 配置文件。
二、自动配置(Auto-configuration)
Spring Boot 的 auto-configuration(自动配置)会基于工程应用中添加的 jar 依赖进行自动配置。例如,如果 classpath 中有 HSQLDB,并且应用中没有手动配置数据库连接的 bean,Spring Boot 会自动配置一个默认的内存数据库。
要开启使用 auto-configuration ,我们只需添加 @EnableAutoConfiguration注解 或者 @SpringBootApplication 注解中的一个到某一个 @Configuration 类中就可以。
小提示:@EnableAutoConfiguration注解 或者 @SpringBootApplication 注解,必须二选一,而且通常建议配置在主 @Configuration 类中。
1、逐步替换自动配置
Auto-configuration 是非侵入式的,任何时候都可以使用自定义配置来替换默认的自动配置,比如自定义 DataSource。可以通过 --debug 参数开启 debug 级别日志信息的记录,来查看具体加载了哪些自动配置项和相关的加载状态。
2、如何关闭特定的 Auto-configuration Classes
如果发现有不需要的自动配置项,可以通过使用 @EnableAutoConfiguration 的 exclude 属性来关闭指定的自动配置,例如这里关闭 DataSource 配置:
import org.springframework.boot.autoconfigure.*; import org.springframework.boot.autoconfigure.jdbc.*; import org.springframework.context.annotation.*; @Configuration @EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class}) public class MyConfiguration { }
如果指定的类没有在 classpath 里,还可以使用注解的 excludeName 属性并指定全限定名。最后,还可以通过使用 spring.autoconfigure.exclude 来排除限定的自动配置列表类。
小提示:通过注解级别和使用属性级别都可以排除特定的自动配置项。
参考:spring-boot-reference.pdf 2.1.5.RELEASE 的 《15. Configuration Classes》和《16. Auto-configuration》。