Spring boot 我可以在JDBCURL模式下使用带有自定义Dockerfile的Testcontainers吗?
我正在测试一个Spring启动应用程序,并尝试使用Testcontainers在Docker容器中启动一个临时数据库,以进行JUnit 5测试。有:Spring boot 我可以在JDBCURL模式下使用带有自定义Dockerfile的Testcontainers吗?,spring-boot,docker,testcontainers,Spring Boot,Docker,Testcontainers,我正在测试一个Spring启动应用程序,并尝试使用Testcontainers在Docker容器中启动一个临时数据库,以进行JUnit 5测试。有: 通过在测试类中定义容器,添加至少两个注释,以及(在Spring引导测试中)用几行代码覆盖应用程序上下文,将其指向新数据库。对于每个测试类,这是相当多的额外代码行 通过将spring.datasource.url属性设置为经过特殊修改的url。最优雅的方法,尽管可以说是一个缺点,是这使得测试对正在发生的事情不那么明确 我想使用选项#2,但限制(我认为
spring.datasource.url
属性设置为经过特殊修改的url。最优雅的方法,尽管可以说是一个缺点,是这使得测试对正在发生的事情不那么明确作为参考,我的代码位于Github上,所涉及的Dockerfile位于“database”目录中。一个示例测试用例是,您可以看到,如果我使用JDBCURL方法,至少有15行代码可以消除。您的问题有不同的解决方案。我认为一个很好的解决方案是设置一个
application.properties
文件,如下所示:
spring.datasource.url = ${DB_HOST}:${DB_PORT}/"nameofDB"
spring.datasource.username = ${DB_USERNAME}
spring.datasource.password = ${DB_PASSWORD}
docker run \
-it my_project_name \
${granite_image_name}:${the_tag} \
--spring.datasource.url=$test_db_url
您现在应该能够简单地定义容器中的变量。e、 g
docker run \
-it my_project_name \
-e DB_HOST=myGraniteDB \
-e DB_PORT=5432 \
-e DB_USERNAME=${TEST_DB_USERNAME} \
-e DB_USERNAME=${TEST_DB_PASSWORD} \
${granite_image_name}:${the_tag}
在另一种情况下,您可以简单地启动docker容器,如下所示:
spring.datasource.url = ${DB_HOST}:${DB_PORT}/"nameofDB"
spring.datasource.username = ${DB_USERNAME}
spring.datasource.password = ${DB_PASSWORD}
docker run \
-it my_project_name \
${granite_image_name}:${the_tag} \
--spring.datasource.url=$test_db_url
甚至定义一组外部化配置:
您能否提供Dockerfile或告诉我们您使用的基本图像?您是否使用docker compose文件来执行此操作?@Stefano我在Github上添加了一些指向代码和Dockerfile的链接