【发布时间】:2023-02-14 12:11:02
【问题描述】:
我有一个运行 web 应用程序的自定义 Tomcat 容器 (8080) 和一个 MySql 容器 (3306),该 web 应用程序应该使用 JDBC 连接到该容器。两个容器都在同一个用户定义的桥接网络上。我通过相互 ping 确认它们有连接。
tomcat/conf/context.xml 中的 Tomcat DataSource JNDI 配置:
<Resource name="jdbc/dbname" auth="Container" type="javax.sql.DataSource"
maxActive="200" maxIdle="20" maxWait="100000"
validationQuery="SELECT 1" validationInterval="30000" removeAbandoned="true"
removeAbandonedTimeout="60" logAbandoned="true" testWhileIdle="true"
timeBetweenEvictionRunsMillis="120000" driverClassName="com.mysql.jdbc.Driver"
username="username" password="password" url="jdbc:mysql://mysql-container:3306/dbname" />
我尝试过的事情:
- 将 mysql-connector-j-8.0.31.jar(JDBC 驱动程序)放入 tomcat/lib
- 正在安装 mysql-connector-j-8.0.31-1.el7.noarch.rpm(Tomcat 容器操作系统为 Amazon Linux 2)
前端可访问:http://localhost:8080/app。但是当我尝试访问后端时,我在开发人员控制台中收到 500 HTTP 状态错误代码。
我究竟做错了什么?
【问题讨论】:
-
Tomcat端会有错误日志。可能在
tomcat/logs/catalina.out。看看那里以确定潜在的问题。 -
我能够使用 telnet 和 netcat 连接到数据库。我检查了 Catalina 日志中的错误,错误如下:'com.mysql.cj.jdbc.exceptions.CommunicationsException:通信链接失败加载类'com.mysql.jdbc.Driver'。这已被弃用。新的驱动程序类是“com.mysql.cj.jdbc.Driver”。驱动程序通过 SPI 自动注册,通常不需要手动加载驱动程序类。 Caused by: java.sql.SQLException: Cannot create PoolableConnectionFactory (通信链接失败'
-
我使用完全相同的 context.xml 配置将 Tomcat 应用程序从我的主机连接到 MySql 容器,它运行得非常好。我认为这可能是 Tomcat 的容器问题
-
Communications link failure听起来你的 Docker compose 没有正确的网络。你可以edit你的问题并添加吗?
标签: mysql docker tomcat jdbc jndi