You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级至Jakarta后Java/JSP数据库连接失败排查求助

排查方向整理
  • 首要问题:启用并修正数据源配置
    你的context.xml里核心的<Resource>数据源配置是被注释掉的,而且类型还是旧的javax.sql.DataSource,必须做两个修改:

    1. 取消<Resource>块的注释(删掉前后的<!--和-->)
    2. 将type="javax.sql.DataSource"改为type="jakarta.sql.DataSource",适配Jakarta EE的包名变更
      修正后的配置示例:
    <Resource name="jdbc/mysql-prod" auth="Container" type="jakarta.sql.DataSource"
            maxActive="100" maxIdle="30" maxWait="10000"
            username="fakename" password="fakepassword" driverClassName="com.mysql.cj.jdbc.Driver"
            url="jdbc:mysql://localhost:3306/mysql-prod?useSSL=false&amp;serverTimezone=UTC" />
    
  • 确认JDBC驱动存在且版本匹配

    • 你用的com.mysql.cj.jdbc.Driver是MySQL Connector/J 8.x的驱动类,必须确保:
      1. 项目的WEB-INF/lib或Tomcat的全局lib目录下有8.x版本的mysql-connector-java.jar包
      2. 不要同时存在5.x版本的驱动(类名是com.mysql.jdbc.Driver),避免冲突
    • 若用Maven管理依赖,需添加正确的依赖配置:
      <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>8.0.33</version>
          <scope>provided</scope> <!-- 驱动放Tomcat全局lib时用此范围,否则去掉 -->
      </dependency>
      
  • 修正web.xml中的资源引用
    检查项目的web.xml或tomcat-web.xml,确保资源引用的类型也同步改为Jakarta版本:

    <resource-ref>
        <description>MySQL Production Database</description>
        <res-ref-name>jdbc/mysql-prod</res-ref-name>
        <res-type>jakarta.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>
    
  • 验证Tomcat版本兼容性
    Jakarta EE要求使用Tomcat 10及以上版本(Tomcat 9及以下仍基于Java EE,使用javax.*包),确认新服务器的Tomcat版本符合要求,否则会出现类加载或JNDI lookup失败的问题。

  • 核对JNDI名称与参数正确性

    1. 代码中lookup("java:comp/env/jdbc/mysql-prod")的名称,必须与context.xml的name、web.xml的res-ref-name完全一致(大小写敏感)
    2. 手动验证数据库连接参数:用MySQL客户端测试url、用户名、密码是否能正常连接到目标数据库,确保账号有权限访问指定库

内容的提问来源于stack exchange,提问作者ferzle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 02:13:23