Mel*_*ssa 8 postgresql maven spring-boot testcontainers
是否可以通过配置为postgresql testcontainer提供自定义的postgresql.conf文件?
我已经包括了Maven依赖
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>postgresql</artifactId>
<version>1.10.6</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
并使用“通过JDBC URL方案启动的数据库容器”作为数据库URL,因此在Spring Boot应用程序中的设置如下:
datasource:
url: jdbc:tc:postgresql:10-alpine:///databasename
driver-class-name: org.testcontainers.jdbc.ContainerDatabaseDriver
Run Code Online (Sandbox Code Playgroud)
我需要在postgresql.conf中有一个自定义设置。有没有一种方法可以将postgresql.conf推送到由testcontainers启动的docker容器中?
编辑1
感谢@vilkg我确实知道TC_INITSCRIPT脚本选项和SET函数:
SET my.key = 'new value 8'; -- sets for current session
ALTER DATABASE test SET my.key = 'new value 8'; -- sets for subsequent sessions
select current_setting('my.key');
Run Code Online (Sandbox Code Playgroud)
问题是
url: jdbc:tc:postgresql:10-alpine:///databasename?TC_INITSCRIPT=init_pg.sql
但是, 当我在应用程序代码中使用“ current_setting('my.key')”时,它将失败
如果要继续使用JDBC URL方案启动Postgres容器,则测试容器可以为您执行初始化脚本。该脚本必须位于类路径上,其引用如下:
jdbc:tc:postgis:9.6://hostname/databasename?TC_INITSCRIPT=somepath/init.sql
Run Code Online (Sandbox Code Playgroud)
ALTER SYSTEM SET命令是在postgres 9.4中引入的,因此您可以在init脚本中使用它。
另一个选择是使用数据库容器对象启动postgres容器,并使用withCopyFileToContainer()方法。例:
JdbcDatabaseContainer<?> postgisContainer = new PostgisContainerProvider()
.newInstance()
.withDatabaseName( POSTGRES_DATABASE_NAME )
.withUsername( POSTGRES_CREDENTIALS )
.withPassword( POSTGRES_CREDENTIALS )
.withCopyFileToContainer(MountableFile.forClasspathResource("postgresql.conf"), "/var/lib/postgresql/data"));
Run Code Online (Sandbox Code Playgroud)
编辑:
如果以上方法均无效,则可以重新配置Postgres命令并传递自定义配置密钥。您所需要做的就是扩展PostgreSQLContainer并覆盖configure()方法。
@Override
protected void configure()
{
setCommand( "postgres -c $your_config_key=$your_config_value" );
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
479 次 |
| 最近记录: |