2017-04-03 72 views
1

这是我创建H2数据源的代码。它只有在'dev'配置文件处于活动状态时才可用。为什么Spring引导自动配置功能覆盖配置文件机制?

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

但是,当我启动应用程序没有任何配置文件集,春天开机初始化H2忽略了轮廓注解。这里是春天启动的输出消息在启动时:

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

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

+0

活动配置文件应得到尊重。你能分享一个[最小的,完整的,可验证的例子](/ help/mcve)你的问题吗? –

+0

H2被初始化,因为它在类路径上。不是因为你的bean定义。 –

回答

1

配置文件不被忽略,它不是唯一的正在创建您的DataSource豆。这是Spring Boot的DataSource bean,它由DataSourceAutoConfiguration配置。它正在运行,因为H2在班级路径上。

如果你不想做DataSource是自动配置(这样你只能得到一个当dev轮廓被激活),那么你就应该排除DataSourceAutoConfiguration

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

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

} 
+0

Andy,我的要求是为应用程序提供2个数据源,H2和HSQL。我的解决方案来控制启动时将加载哪些文件是配置文件机制。所以,我将H2设置为dev配置文件,并将HSQL设置为舞台配置文件。根据您的回答,如果H2位于类路径中,则无论是否将配置文件设置为每个数据源Bean都无关紧要,因为DataSourceAutoConfiguration始终会加载它在classpath中找到的第一个数据源。这就是为什么我问到自动配置和配置文件机制之间的关系。我只是更新了github演示,以通过endpoint/dataSource来说明这一点。 –