You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

关键说明

  1. JNDI名称的正确性
    你原来的非Spring代码中用的是env.lookup("jdbc.conPesos"),所以配置里直接写jdbc.conPesos即可,不需要添加java:/comp/env/前缀——除非你的WebLogic数据源明确绑定到了这个Java EE命名空间下,否则会导致查找失败。

  2. 上下文参数的作用
    spring.jndi.properties.*下的配置会被Spring自动注入到InitialContext的环境参数中,完全替代你之前在@Bean里手动构建Hashtable的逻辑。

  3. 依赖与其他配置

    • 确保项目中引入了WebLogic客户端依赖(比如wlfullclient),本地运行时设置为compile,部署到WebLogic时可以改为provided
    • 之前添加的@SpringBootApplication(exclude = JmxAutoConfiguration.class)建议保留,避免WebLogic的JMX组件和Spring Boot的自动配置产生冲突。

验证步骤

  1. 删除你自定义的@Bean DataSource方法
  2. 替换成上面的配置文件内容
  3. 启动项目,Spring会自动通过JNDI获取WebLogic的数据源,和你之前的代码效果完全一致

内容的提问来源于stack exchange,提问作者J. Abel

火山引擎 最新活动