Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot Spring引导验证数据源连接_Spring Boot_Datasource_Flyway - Fatal编程技术网

Spring boot Spring引导验证数据源连接

Spring boot Spring引导验证数据源连接,spring-boot,datasource,flyway,Spring Boot,Datasource,Flyway,在Spring Boot中,是否有方法验证DataSourceAutoConfiguration创建的数据源是否有效以及是否可以创建连接 我们正在使用Spring Boot 2.1.2以及Hikari 3.2.0和Flyway 5.2.4 我遇到的问题是,当无法访问我们的数据源时,我想发出警报。这可能是由于数据库命名不正确,或者应用程序仍在初始化时RDS服务器已关闭 我对启动顺序的理解是: Spring Boot初始化数据源 Flyway运行迁移 数据库连接池已初始化 休眠初始化 我想做的是在F

在Spring Boot中,是否有方法验证DataSourceAutoConfiguration创建的数据源是否有效以及是否可以创建连接

我们正在使用Spring Boot 2.1.2以及Hikari 3.2.0和Flyway 5.2.4

我遇到的问题是,当无法访问我们的数据源时,我想发出警报。这可能是由于数据库命名不正确,或者应用程序仍在初始化时RDS服务器已关闭

我对启动顺序的理解是:

  • Spring Boot初始化数据源
  • Flyway运行迁移
  • 数据库连接池已初始化
  • 休眠初始化

  • 我想做的是在Flyway运行之前验证在步骤1中创建的数据源。Flyway确实有一个回调系统,但它只在运行迁移时起作用,而不能从db获得连接时起作用。我知道SpringBoot提供的DataSourceHealthIndicator,但据我所知,它只有在调用执行器端点时才会运行。在Flyway自动配置之前,是否有方法验证数据源(创建新连接)或强制调用DataSourceHealthIndicator

    也许您可以配置连接测试

    c3p0
    可以配置为以各种方式测试其池中的连接
    idleConnectionTestPeriod
    testConnectionOnCheckout
    testConnectionOnCheckin
    控制何时测试连接<代码>自动测试表、
    连接测试类名
    首选测试查询
    控制如何测试它们。以下是有关详细信息的链接:

    另一种可能(尽管容易出错)是对使用JdbcTemplate的组件进行注释:

    @DependsOn({"flyway", "flywayInitializer"})
    

    这将在Flyway和您的配置类之间建立依赖关系。

    在通过添加自定义DB HealthCheck初始化Flyay之前,我能够成功地测试数据源。当bean初始化时,我立即检查数据库的运行状况。如果数据库检查失败,我的实现将向外部源发出警报

    @配置
    公共类NotifiingDataSourceHealthCheckConfig扩展了DataSourceHealthIndicatorAutoConfiguration{
    @值(${aws.accessKeyId}”)
    私有字符串awsAccessKeyId;
    @值(${aws.secretKey}”)
    私有字符串awsSecret;
    @值(${aws.alertQueueName}”)
    私有字符串名称;
    @值(${aws.region}”)
    私有字符串区域;
    公共通知数据源HealthCheckConfig(ObjectProvider数据源、ObjectProvider metadataProviders){
    超级(数据源、元数据提供者);
    }
    @Bean(name=“dbhealthdindicator”)
    公共健康指标dbHealthIndicator(){
    BasicAWSCredentials=新的BasicAWSCredentials(awsAccessKeyId,awsSecret);
    AmazonSQSAsync amazonSQS=AmazonSQSAsyncClientBuilder.standard()。带有凭据(新的AWSStaticCredentialsProvider(凭据))。带有区域(awsRegion).build();
    HealthIndicator HealthIndicator=新的NotifiyingHealthIndicatorRapper(super.dbHealthIndicator(),amazonSQS,alertQueueName,“飞行常客api”,“db”);
    healthIndicator.health();
    回归健康指标;
    }
    }
    
    Hikari连接池为测试连接提供了相同的支持。棒极了!很高兴你弄明白了。