首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按配置文件禁用/删除spring boot数据源

按配置文件禁用/删除spring boot数据源
EN

Stack Overflow用户
提问于 2018-10-04 04:07:55
回答 2查看 4.9K关注 0票数 2

使用spring boot yaml配置,我有一个如下所示的数据源:

代码语言:javascript
复制
datasource:
  url: jdbc:postgresql://somehost/somedb
  username: username
  password: password
  hikari:
    connection-timeout: 250
    maximum-pool-size: 1
    minimum-idle: 0

我可以根据配置文件成功地指向不同的数据库,但我想设置一个根本不使用此数据源的配置文件。然而,当我使用这个配置文件时,我得到了这样的结果:

代码语言:javascript
复制
***************************
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

如何在一些配置文件中使用此数据源,而不是在其他配置文件中?

EN

回答 2

Stack Overflow用户

发布于 2018-10-04 07:48:23

您可以使用`@Profile("!dev")注释跳过特定配置文件的bean

配置文件名称也可以使用NOT运算符作为前缀,例如“!dev”,以便从配置文件中排除它们

来自docs here

如果给定的配置文件以NOT运算符(!)为前缀,则在配置文件未处于活动状态时将注册带注释的组件-例如,给定@ profile ({"p1","!p2"}),如果配置文件'p1‘处于活动状态或配置文件'p2’未处于活动状态,则会进行注册。

配置文件也可以在XML中配置-标记具有“

”属性,该属性采用适用配置文件的逗号分隔值:here

代码语言:javascript
复制
 <beans profile="dev">
  <bean id="devDatasourceConfig"
  class="org.baeldung.profiles.DevDatasourceConfig" />
</beans>
票数 3
EN

Stack Overflow用户

发布于 2018-10-04 07:29:39

更改为:

代码语言:javascript
复制
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:

代码语言:javascript
复制
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})

按配置文件创建自己的数据源

代码语言:javascript
复制
@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();
}

或者完全以编程方式

代码语言:javascript
复制
@Bean
DataSource dataSource2(org.springframework.core.env.Environment environment) throws Exception {
    if (environment.acceptsProfiles("dev")){
        //return datasource dev
    }else{
        //return datasource prod
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52634919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档