Spring Boot如何在application.properties配置远程WebLogic JNDI上下文?
在Spring Boot中通过application.properties配置WebLogic JNDI数据源
你已经通过自定义@Configuration类解决了问题,但其实Spring Boot完全支持直接通过配置文件来配置WebLogic的JNDI数据源,不需要手写Bean。问题出在你之前的配置缺少了JNDI初始上下文的关键环境参数,导致Spring无法正确初始化连接WebLogic的上下文。
正确的application.properties配置
直接在配置文件中添加JNDI上下文的属性,Spring会自动用这些参数构建InitialContext:
# 数据源JNDI名称(和你非Spring代码里lookup的名称一致,不需要额外前缀) spring.datasource.jndi-name=jdbc.conPesos # WebLogic JNDI上下文配置 spring.jndi.properties.java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory spring.jndi.properties.java.naming.provider.url=t3://192.151.120.180:7003,192.151.121.180:7005 spring.jndi.properties.weblogic.jndi.WLContext.ENABLE_SERVER_AFFINITY=true
如果用application.yml格式更清晰:
spring: datasource: jndi-name: jdbc.conPesos jndi: properties: java.naming.factory.initial: weblogic.jndi.WLInitialContextFactory java.naming.provider.url: t3://192.151.120.180:7003,192.151.121.180:7005 weblogic.jndi.WLContext.ENABLE_SERVER_AFFINITY: true
关键说明
JNDI名称的正确性:
你原来的非Spring代码中用的是env.lookup("jdbc.conPesos"),所以配置里直接写jdbc.conPesos即可,不需要添加java:/comp/env/前缀——除非你的WebLogic数据源明确绑定到了这个Java EE命名空间下,否则会导致查找失败。上下文参数的作用:
spring.jndi.properties.*下的配置会被Spring自动注入到InitialContext的环境参数中,完全替代你之前在@Bean里手动构建Hashtable的逻辑。依赖与其他配置:
- 确保项目中引入了WebLogic客户端依赖(比如
wlfullclient),本地运行时设置为compile,部署到WebLogic时可以改为provided。 - 之前添加的
@SpringBootApplication(exclude = JmxAutoConfiguration.class)建议保留,避免WebLogic的JMX组件和Spring Boot的自动配置产生冲突。
- 确保项目中引入了WebLogic客户端依赖(比如
验证步骤
- 删除你自定义的
@Bean DataSource方法 - 替换成上面的配置文件内容
- 启动项目,Spring会自动通过JNDI获取WebLogic的数据源,和你之前的代码效果完全一致
内容的提问来源于stack exchange,提问作者J. Abel




