使用spring boot yaml配置,我有一个如下所示的数据源:
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如何在一些配置文件中使用此数据源,而不是在其他配置文件中?
发布于 2018-10-04 07:48:23
您可以使用`@Profile("!dev")注释跳过特定配置文件的bean
配置文件名称也可以使用NOT运算符作为前缀,例如“!dev”,以便从配置文件中排除它们
来自docs here
如果给定的配置文件以NOT运算符(!)为前缀,则在配置文件未处于活动状态时将注册带注释的组件-例如,给定@ profile ({"p1","!p2"}),如果配置文件'p1‘处于活动状态或配置文件'p2’未处于活动状态,则会进行注册。
配置文件也可以在XML中配置-标记具有“
”属性,该属性采用适用配置文件的逗号分隔值:here
<beans profile="dev">
<bean id="devDatasourceConfig"
class="org.baeldung.profiles.DevDatasourceConfig" />
</beans>发布于 2018-10-04 07:29:39
更改为:
spring:
datasource:
url: jdbc:postgresql://somehost/somedb
username: username
password: password
hikari:
connection-timeout: 250
maximum-pool-size: 1
minimum-idle: 0默认情况下,Springboot使用自动配置,但您可以自定义,不包括某些Autoconfiguration类
编辑您的配置以跳过AutoConfiguration:
@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
}https://stackoverflow.com/questions/52634919
复制相似问题