栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

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

jdbc:mysql://mysqlindocker:3306/<dbname>

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

如何解决呢?

1)解决根本原因

实际上,在单元测试执行期间构建失败的根本原因是您没有根据目标范围定义jdbc url。
确实,在

test
Maven构建阶段,您通常希望测试使用内存数据库或特定的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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/373561.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号