Spring Boot+Oracle+WebLogic遇javax.naming.NoInitialContextException如何解决?
解决JNDI配置引发的NoInitialContextException问题
1. 检查WebLogic客户端依赖是否存在
项目必须包含WebLogic的JNDI客户端相关jar包,否则weblogic.jndi.WLInitialContextFactory类无法被加载,直接触发该异常。
如果是Maven项目,可添加以下依赖(注意WebLogic依赖需从Oracle仓库或本地WebLogic目录获取):
<dependency> <groupId>com.oracle.weblogic</groupId> <artifactId>wlfullclient</artifactId> <version>12.2.1.4.0</version> <scope>provided</scope> <!-- 部署到WebLogic服务器时可设为provided --> </dependency>
2. 调整Spring配置写法
你当前的配置同时使用spring.datasource.jndi-name和spring.jndi.properties,可尝试修改配置格式,确保Spring正确读取JNDI上下文参数:
删除spring.datasource.driver-class-name(使用JNDI时无需指定驱动类,WebLogic数据源已配置完成),调整后的application.properties如下:
spring.datasource.jndi-name=java:/comp/env/jdbc/myDemoDs spring.jndi.java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory spring.jndi.java.naming.provider.url=t3://localhost:7001
或者通过自定义配置类手动构建数据源,确保上下文参数生效:
@Configuration public class DataSourceConfig { @Bean public DataSource dataSource() { JndiDataSourceLookup lookup = new JndiDataSourceLookup(); lookup.setResourceRef(true); Properties jndiProps = new Properties(); jndiProps.put("java.naming.factory.initial", "weblogic.jndi.WLInitialContextFactory"); jndiProps.put("java.naming.provider.url", "t3://localhost:7001"); lookup.setJndiEnvironment(jndiProps); return lookup.getDataSource("java:/comp/env/jdbc/myDemoDs"); } }
3. 验证WebLogic数据源配置
确保WebLogic服务器中已正确创建jdbc/myDemoDs数据源,且JNDI名称与配置中的java:/comp/env/jdbc/myDemoDs完全匹配,同时WebLogic服务处于运行状态,t3://localhost:7001地址可正常访问。
4. 通过系统参数指定上下文配置
若上述配置仍无效,可在应用启动时通过JVM系统参数直接指定初始上下文参数:
-Djava.naming.factory.initial=weblogic.jndi.WLInitialContextFactory -Djava.naming.provider.url=t3://localhost:7001
内容的提问来源于stack exchange,提问作者Mansi Adroja
相关产品推荐
相关产品推荐

