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

Spring Boot外置Tomcat7配置JNDI连接Oracle报错:JNDI名称与上下文无关联

修复步骤

1. 清理冲突的JNDI配置

你现在同时配置了多份JNDI规则,优先留一套即可,不要混配:

  • 删掉Tomcat全局web.xml里添加的resource-ref配置,该配置仅需要放在应用自身的WEB-INF/web.xml中
  • 若使用应用内部/src/main/webapp/META-INF/context.xml配置数据源,就删除server.xml里的Resource配置、Tomcat全局context.xml里的ResourceLink配置,同时删除应用context.xml里多余的ResourceLink标签(你已经在同一个文件里定义了Resource,不需要再配链接)
  • 若使用Tomcat全局配置,就删除应用META-INF/context.xml文件,避免优先级冲突

2. 修复代码逻辑错误

  • 你在ControlerConnection中直接new TDFAdminDBConnection(),没有将该类交给Spring容器托管,所以类中定义的LogService log_dbg根本不会被注入,调用log_dbg.debug()时直接触发空指针,就是你控制台看到的堆栈异常来源。要么给TDFAdminDBConnection加@Component注解,在ControlerConnection中用@Autowired注入实例,要么先注释掉所有log_dbg.debug相关代码先排查JNDI问题
  • JNDI查找可以直接写全路径测试,修改查找代码为:
Context initCtx = new InitialContext();
this.ds = (DataSource) initCtx.lookup("java:comp/env/rnz_fta/jdbc/Datasource");

3. 修正Spring Boot配置

你已经引入了spring-boot-starter-jdbc,完全不需要自己手写JNDI查找逻辑:

  • 在application.properties中配置完整的JNDI路径:
spring.datasource.jndi-name=java:comp/env/rnz_fta/jdbc/Datasource
  • 直接在需要使用数据库连接的位置用@Autowired注入Spring自动生成的DataSource实例即可

4. 修正依赖冲突

你已经把ojdbc6.jar放到了Tomcat的lib目录,需要修改Maven中ojdbc6的依赖范围,避免包冲突:

<dependency>
    <groupId>oracle</groupId>
    <artifactId>ojdbc6</artifactId>
    <version>11.2.0.3</version>
    <scope>provided</scope>
</dependency>

备用快速方案

如果JNDI配置始终有问题,可以直接放弃容器数据源配置,用Spring Boot自带的JDBC自动配置,在application.properties中添加以下配置即可直接使用:

spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@xxx:1509:xxx
spring.datasource.username=xxx
spring.datasource.password=xxx
spring.datasource.max-active=20
spring.datasource.max-idle=10
spring.datasource.max-wait=5000

内容的提问来源于stack exchange,提问作者Manel BEN AMARA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 21:18:03