Проблема со встроенной БД postgres, доступной только для чтения, с использованием весенней загрузки и миграций пролетного пути
Пример использования Я пытаюсь использовать в своем приложении 2 источника данных. Один для подключения только для чтения, а другой для подключения для чтения и записи.
Конфигурация Я настроил свои репозитории JPA для использования разных подключений. В моем случае с ИТ у меня есть следующая конфигурация в моем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
Где, когда я меняю URL-адрес БД на jdbc:postgresql://127.0.0.1:5432/postgres
, местный тест пройден. Бобы создаются правильно.
Проблема в сборке 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.
У меня есть определенные миграции на пролетных путях, и я вижу в журналах, что миграции успешно выполнялись один раз с основным источником данных для чтения и записи. После создания соединения только для чтения, просмотрев журналmigrations are up to date
, поэтому я думаю, что он не пытался запустить снова, используя соединение RO.
Также я использовал @Primary
в моей конфигурации чтения-записи, так что пролетный путь знает, что использовать этот источник данных для своих миграций, а не соединение только для чтения.
@Bean(name = ["primaryDataSource"])
@Primary
@ConfigurationProperties("spring.datasource.configuration")
fun primaryDataSource(dataSourceProperties: DataSourceProperties): HikariDataSource {
return dataSourceProperties.initializeDataSourceBuilder()
.type(HikariDataSource::class.java)
.build()
}
Есть ли какие-либо ограничения на подключение только для чтения к встроенным postgres?