【问题标题】:500 HTTP status code tomcat container JDBC connection to MySQL container500 HTTP 状态代码 tomcat 容器 JDBC 连接到 MySQL 容器
【发布时间】: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


【解决方案1】:

我通过添加 500 错误代码抱怨的依赖项来修复它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 2020-01-20
    • 1970-01-01
    • 2020-01-29
    相关资源
    最近更新 更多