【问题标题】:Why does Spring boot autoconfigure's feature overriding the profile mechanism?为什么Spring boot autoconfigure的特性会覆盖profile机制?
【发布时间】:2017-04-03 02:22:31
【问题描述】:

这是我创建 H2 数据源的代码。它应该仅在“开发”配置文件处于活动状态时可用。

@Bean
@Profile("dev")
public DataSource h2() {
    return new EmbeddedDatabaseBuilder().setType(H2).build();
}

但是当我在没有设置任何配置文件的情况下启动应用程序时,spring boot 会忽略配置文件注释来初始化 H2。这是spring boot在启动时的输出信息:

No active profile set, falling back to default profiles: default

Starting embedded database: url='jdbc:h2:mem:testdb ...

【问题讨论】:

标签: spring-boot


【解决方案1】:

配置文件没有被忽略,并且创建的不是您的DataSource bean。这是由DataSourceAutoConfiguration 配置的Spring Boot 的DataSource bean。它正在运行,因为 H2 在类路径上。

如果您不希望自动配置 DataSource(这样您只能在 dev 配置文件处于活动状态时获得一个),那么您应该排除 DataSourceAutoConfiguration

@SpringBootApplication(exclude=DataSourceAutoConfiguration.class)
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

【讨论】:

  • Andy,我的要求是为应用程序提供 2 个数据源,H2 和 HSQL。我控制哪些将在启动时加载的解决方案是配置文件机制。因此,我将 H2 设置为开发配置文件,将 HSQL 设置为阶段配置文件。根据您的回答,如果 H2 在类路径上,那么我是否为每个数据源 bean 设置配置文件都没关系,因为 DataSourceAutoConfiguration 总是会加载它在类路径中找到的第一个数据源。这就是为什么我询问自动配置和配置文件机制之间的关系。我只是更新了 github 演示以使用端点 /dataSource 来举例说明。
猜你喜欢
  • 2019-03-02
  • 2014-04-07
  • 2019-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多