您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Java应用程序构建失败,其中Mysql url指向Docker容器

Java应用程序构建失败,其中Mysql url指向Docker容器

我使用mvn clean install构建jar。它在@Test void contextLoads()上失败。如果我将其注释掉,则可以使用db url指向我的> docker容器来构建jar

testmaven阶段执行的单元测试框架中,MysqLindocker无法解析主机名:

jdbc:MysqL://MysqLindocker:3306/<dbname>

只有在相同docker网络中的容器才能解决该问题。 由于这些测试是在容器外部执行的(确切地说是在启动之前),因此它们无法访问该网络。

如何解决呢?

1)解决根本原因

实际上,在单元测试执行期间构建失败的根本原因是您没有根据目标范围定义jdbc url。 确实,在testMaven构建阶段,您通常希望测试使用内存数据库或特定的MysqL数据库。出于一致的原因(测试可重复性),您不想使用与用于主应用程序的相同。在这里一个好的做法是使用另一个数据库实例进行单元测试,并且应该可以从运行build(localhost)的主机访问该数据库。 您可以覆盖已spring.datasource.url执行测试的属性:通过在测试类中定义application- test.properties/yml文件src/test/resources或直接在测试类中覆盖属性@SpringBootTest(properties=...)

2)解决方法

请注意,如果将MysqL db容器端口发布在执行构建的主机上,则(临时)解决方法是将localhost保留在spring.datasource.url为构建定义的url中,并在运行时使用docker容器名称覆盖它。将JAR作为容器端点运行:

java -jar myApp.jar --spring.config.location=jdbc:MysqL://MysqLindocker:3306/dbname
MySQL 2022/1/1 18:17:51 有508人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶