使用spring boot yaml config,我有一个看起来像这样的数据源:
datasource:
url: jdbc:postgresql://somehost/somedb
username: username
password: password
hikari:
connection-timeout: 250
maximum-pool-size: 1
minimum-idle: 0
我可以基于配置文件成功指向不同的数据库,但是我想设置一个根本不使用该数据源的配置文件。但是,当我使用该配置文件时,会得到以下信息:
***************************
APPLICATION FAILED TO START
***************************
Description:
Failed to auto-configure a DataSource: 'spring.datasource.url' is not specified and no embedded datasource could be auto-configured.
Reason: Failed to determine a suitable driver class
如何在某些配置文件中使用此数据源,而在其他配置文件中则不使用?
答案 0 :(得分:1)
您可以使用`@Profile(“!dev”)批注来跳过特定配置文件的Bean
配置文件名称也可以使用NOT运算符作为前缀,例如“!dev”将其从个人资料中排除
来自文档here
如果给定的配置文件以NOT运算符(!)为前缀,则如果该配置文件无效,则将注册带注释的组件-例如,给定@Profile({“ p1”,“!p2”} ),如果配置文件“ p1”处于活动状态或配置文件“ p2”未处于活动状态,则会进行注册。
配置文件也可以用XML进行配置-标记具有“配置文件”属性,该属性采用适用配置文件的逗号分隔值:here
<beans profile="dev">
<bean id="devDatasourceConfig"
class="org.baeldung.profiles.DevDatasourceConfig" />
</beans>
答案 1 :(得分:-1)
更改为:
spring:
datasource:
url: jdbc:postgresql://somehost/somedb
username: username
password: password
hikari:
connection-timeout: 250
maximum-pool-size: 1
minimum-idle: 0
Springboot默认情况下与自动配置一起使用,但是您可以自定义排除某些自动配置类
编辑您的配置以跳过自动配置:
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
通过配置文件创建自己的数据源
@Bean
@Profile("dev")
DataSource dataSourceDevProfile(org.springframework.core.env.Environment environment) throws Exception {
return DataSourceBuilder.create().url("").driverClassName("").password("").username("").build();
}
@Bean
@Profile("!dev")
DataSource dataSourceNoDev(org.springframework.core.env.Environment environment) throws Exception {
return DataSourceBuilder.create().url(environment.getProperty("spring.datasource.url")).driverClassName("").password(environment.getProperty("spring.datasource.password")).username(environment.getProperty("spring.datasource.username")).build();
}
或完全以编程方式
@Bean
DataSource dataSource2(org.springframework.core.env.Environment environment) throws Exception {
if (environment.acceptsProfiles("dev")){
//return datasource dev
}else{
//return datasource prod
}