6.1 微调自动配置
在我们深入研究配置属性之前,有必要确定在 Spring 中有两种不同(但相关)的配置:
- Bean wiring —— 它声明应用程序组件将在 Spring 应用程序上下文中作为 bean 创建,以及它们应该如何相互注入。
- Property injection —— 在 Spring 应用程序上下文中设置 bean 的值。
在 Spring 的 XML 和基于 Java 的配置中,这两种类型的配置通常在同一个地方显式地声明。在 Java 配置中,@Bean
注解的方法可能实例化一个 bean,然后设置其属性的值。例如,考虑下面的 @Bean
方法,它为嵌入式 H2 数据库声明了一个数据源:
@Bean
public DataSource dataSource() {
return new EmbeddedDatabaseBuilder()
.setType(H2)
.addScript("taco_schema.sql")
.addScripts("user_data.sql", "ingredient_data.sql")
.build();
}
这里的 addScript()
和 addScripts()
方法设置了一些带有 SQL 脚本名称的字符串属性,这些 SQL 脚本应该在数据源准备好后应用到数据库中。如果不使用 Spring Boot,那么这就是配置 DataSource bean 的方式,而自动配置使此方法完全没有必要。
如果 H2 依赖项在运行时类路径中可用,那么 Spring Boot 将在 Spring 应用程序上下文中自动创建适当的数据源 bean。bean 应用于 schema.sql 和 data.sql 脚本的读取。
但是,如果希望将 SQL 脚本命名为其他名称呢?或者,如果需要指定两个以上的 SQL 脚本怎么办?这就是配置属性的用武之地。但是在开始使用配置属性之前,需要了解这些属性的来源。