首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在数据库失败时运行spring引导应用程序

如何在数据库失败时运行spring引导应用程序
EN

Stack Overflow用户
提问于 2022-07-06 16:27:09
回答 1查看 69关注 0票数 1

我有一个弹簧引导应用程序,它有多个数据库。无论数据库的状态如何,我都想运行这个应用程序。下面是我的应用程序yaml的样子

代码语言:javascript
复制
logging:
  level:
    org:
      hibernate:
        SQL: DEBUG
        type:
          descriptor:
            sql:
              BasicBinder: TRACE

spring:
  sql:
    init:
      continue-on-error: true # <-- didn't work
  jpa:
    properties:
      hibernate:
        format_sql: 'true'
    show-sql: 'true'
  datasource:
    azure-read-only:
      url: <azure_db1_url>
      username: '<username>'
      password: '<password>'
      driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
      continue-on-error: true
      hikari: # <--- add this to bypass boot failure but it didn't work either
        minimum-idle: 0
        maximum-pool-size: 15
        connection-timeout: 10000 #10s
        idle-timeout: 300000 #5m
        max-lifetime: 600000 #10m
        initialization-fail-timeout: -1
        validation-timeout: 1000 #1s
    azure-read-write:
      url: <azure_db2_url>
      username: '<username>'
      password: '<password>'
      driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
      continue-on-error: true
      hikari:
        minimum-idle: 0
        maximum-pool-size: 15
        connection-timeout: 10000 #10s
        idle-timeout: 300000 #5m
        max-lifetime: 600000 #10m
        initialization-fail-timeout: -1
        validation-timeout: 1000 #1s
    db2-testdb1:
      url: <another_db_not_hosted_on_azure>
      username: '<username>'
      password: '<passwor'
      driver-class-name: com.ibm.db2.jcc.DB2Driver
      continue-on-error: true
      hikari:
        minimum-idle: 0
        maximum-pool-size: 15
        connection-timeout: 10000 #10s
        idle-timeout: 300000 #5m
        max-lifetime: 600000 #10m
        initialization-fail-timeout: -1
        validation-timeout: 1000 #1s

对于数据源,我有一个数据源,即Primary bean,而其他数据源是非主数据源。我怎样才能运行spring引导应用程序,即使它无法连接到所有dbs。

EN

回答 1

Stack Overflow用户

发布于 2022-07-06 19:21:23

您可以“手动”实例化数据源,然后将其提供给Spring。例如:

代码语言:javascript
复制
@Configuration
public class MyConfigBean {

  @Lazy
  @Autowired
  private DataSource dataSource;
  
  @Bean
  public DataSource getDataSource() {
    log.debug(">>> Building the DATA-SOURCE");
    DataSourceBuilder<?> dataSourceBuilder = DataSourceBuilder.create();
    dataSourceBuilder.driverClassName(JDBC_DRIVER_CLASS_NAME);
    dataSourceBuilder.url(props.getJDBCUrl());
    dataSourceBuilder.username(props.getJDBCUsername());
    dataSourceBuilder.password(props.getJDBCPassword());
    return dataSourceBuilder.build();
  }
  
}

@Lazy注释将对getDataSource()方法的调用保留到最后。通过这种方式,您可以在更早的时候检索/填充URL和凭据,因此它们在需要的时候已经准备好了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72886981

复制
相关文章

相似问题

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