2

用例 我试图在我的应用程序中有 2 个数据源。一个用于只读连接,另一个用于读写连接。

配置 我已将我的 JPA 存储库配置为使用不同的连接。在我的 IT 案例中,我有以下配置application.yaml

spring:
  datasource:
    url: jdbc:postgresql://127.0.0.1:5432/app
    username: postgres
    password:
  jpa:
    show-sql: false
    properties:
      hibernate:
        dialect: org.hibernate.dialect.PostgreSQL95Dialect
        jdbc:
          lob:
            non_contextual_creation: true

本地构建中的问题

当我在本地运行测试时,尝试创建readOnlyDataSource错误时测试失败

Caused by: org.postgresql.util.PSQLException: FATAL: database "app" does not exist

当我将 DB url 更改为 时jdbc:postgresql://127.0.0.1:5432/postgres,本地测试通过。bean 正在正确创建。

CI 构建中的问题

但是,在 CI 构建中,无论数据库名称为app还是postgres,测试都会失败

Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'readOnlyDataSource' threw exception; nested exception is org.postgresql.util.PSQLException: Connection to 127.0.0.1:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.

我定义了 flyway 迁移,我可以在日志中看到迁移成功运行一次,主要读写数据源。创建只读连接后,看到日志migrations are up to date,所以我认为它没有尝试使用 RO 连接再次运行。

我还使用@Primary了我的读写配置,因此 flyway 知道使用该数据源进行迁移,而不是只读连接。

@Bean(name = ["primaryDataSource"])
    @Primary
    @ConfigurationProperties("spring.datasource.configuration")
    fun primaryDataSource(dataSourceProperties: DataSourceProperties): HikariDataSource {
        return dataSourceProperties.initializeDataSourceBuilder()
            .type(HikariDataSource::class.java)
            .build()
    }

与嵌入式 postgres 进行只读连接是否有任何限制?

4

0 回答 0