当前位置: 首页 > 面试题库 >

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

施誉
2023-03-14
问题内容

我有一个Java应用程序,需要连接到MySQL。

提供后,url: jdbc:mysql://localhost:3306/<dbname>我便可以构建Jar。但是,我想在网络中的Docker容器上运行它,我也有一个mysqlindocker运行名称的MySQL容器。为了构建Jar,我输入了URL
jdbc:mysql://mysqlindocker:3306/<dbname>,希望可以在容器内运行。但是我做不到,因为html" target="_blank">构建失败。我的猜测是,在我的本地计算机上,Spring无法指向该数据库URL。

如何使用URL as构建一个jar jdbc:mysql://mysqlindocker:3306/<dbname>

PS我不希望指向在本地主机上运行的MySQL。


问题答案:

我使用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


 类似资料:
  • 问题内容: 我要做的是为我的Java应用程序构建一个docker映像,但是以下注意事项对于大多数编译语言都应适用。 在构建服务器上,我想为应用程序生成一个docker映像作为可交付成果。为此,我必须使用一些构建工具(通常是Gradle,Maven或Ant)来编译应用程序,然后将创建的JAR文件添加到docker映像中。因为我希望Docker映像仅执行JAR文件,所以我当然将从已安装Java的基本映

  • 但我的Dockerfile不再是独立的。它的工作取决于Docker外部发生的步骤。在我的Dockerfile中,我将有一个或语句,用于将JAR文件复制到映像中。如果事先没有创建jar,则此语句将失败。所以仅仅执行Dockerfile可能无法工作。如果您想要与仅使用当前Dockerfile构建的服务集成,比如DockerHub上的自动构建特性,那么这就会成为一个问题。 在这种情况下,创建映像的所有必

  • 问题内容: 将我的应用程序从Windows 2000迁移到Windows 2008 R2 Server之后,我一直在努力运行我的应用程序近一周。 步骤: 已安装Java JDK 1.7.0_25 将系统环境变量设置为 使用以下命令将证书导入到cacerts中 确保证书存在于中。 我尝试重复执行 步骤3 ,以确保我没有弄乱任何东西。 上面的方法不能解决我的问题,所以我尝试以编程方式做到这一点: 仍然

  • 在将我的应用程序从Windows 2000移动到Windows 2008 R2服务器之后,我一直在努力让我的应用程序运行近一周。 程序如下: 已安装Java JDK 1.7.0_25 我试图用重复步骤3,以确保我没有搞砸任何事情。 上述方法并没有解决我的问题,所以我尝试以编程方式进行: 仍然没有任何运气。我被困住了,不太确定从这里往哪个方向走。 堆栈跟踪: 更新: 都是

  • 失败:生成失败,出现异常。 出了什么问题:任务'执行失败:app: check DebugAarMetadata'。 发生多个任务操作失败:执行com时发生故障。Android建筑格雷德尔。内部的任务。CheckAarMetadataWorkAction > 尝试:使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获得更多日志输出。运行--扫描以获得完整

  • 这是我第一次使用circleCi(和Yii2),我面临一个与composer相关的问题:在这里您可以看到构建 正如您所看到的,composer找不到php的包 cebe/降价1.0。1需要php 我在这里能做什么?我在网上搜索没有成功。 谢谢和问候