用例 我试图在我的应用程序中有 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 进行只读连接是否有任何限制?