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

如何在WebLogic容器中自动创建数据源?

解决方案:在Docker中自动创建WebLogic数据源

你遇到的问题很典型——在Dockerfile构建阶段执行WLST脚本时,WebLogic实例还没启动,所以connect()命令必然失败。下面提供两种可靠的实现方式:

方式一:调整WLST脚本执行时机(推荐用于动态配置)

不要在Dockerfile的RUN指令中执行WLST脚本,而是把它放到WebLogic启动后的初始化钩子里,确保AdminServer完全就绪后再执行配置:

  1. 修改Dockerfile,将配置文件和脚本复制到镜像中,然后自定义entrypoint脚本:

    # 复制配置文件和脚本到指定目录
    COPY shaolin-datasource.properties /u01/oracle/user_projects/domains/base_domain/properties/
    COPY create-datasource.py /u01/oracle/
    COPY start-domain-with-ds.sh /u01/oracle/
    
    # 设置entrypoint
    ENTRYPOINT ["/u01/oracle/start-domain-with-ds.sh"]
    
  2. 编写start-domain-with-ds.sh脚本,先启动WebLogic,等待AdminServer就绪后执行WLST:

    #!/bin/bash
    set -e
    
    # 启动WebLogic AdminServer
    nohup /u01/oracle/user_projects/domains/base_domain/startWebLogic.sh &
    
    # 等待AdminServer就绪(可根据实际情况调整等待逻辑,比如检查端口或控制台状态)
    echo "Waiting for AdminServer to start..."
    while ! nc -z localhost 7001; do
      sleep 5
    done
    
    # 执行WLST脚本创建数据源
    /u01/oracle/wlst /u01/oracle/create-datasource.py
    
    # 保持容器运行(若WebLogic前台启动可去掉此命令,按需调整)
    tail -f /u01/oracle/user_projects/domains/base_domain/servers/AdminServer/logs/AdminServer.log
    
  3. 优化WLST脚本:建议在connect()前添加重试逻辑,避免因AdminServer启动延迟导致的连接失败,比如用循环尝试连接直到成功。

方式二:预配置数据源XML文件(适合静态配置)

WebLogic支持直接读取domain目录下的配置文件自动加载数据源,你可以提前生成JDBC系统资源的XML文件,在构建镜像时放到指定目录,WebLogic启动时会自动识别加载:

  1. 手动创建(或通过WLST离线模式生成)数据源的XML配置文件,比如shaolin-ds.xml,示例内容:

    <?xml version='1.0' encoding='UTF-8'?>
    <jdbc-system-resource xmlns="http://xmlns.oracle.com/weblogic/jdbc-system-resource">
      <name>shaolin-ds</name>
      <jdbc-resource>
        <name>shaolin-ds</name>
        <jdbc-data-source-params>
          <jndi-names>
            <element>jdbc/shaolin-ds</element>
          </jndi-names>
          <global-transactions-protocol>OnePhaseCommit</global-transactions-protocol>
        </jdbc-data-source-params>
        <jdbc-driver-params>
          <url>jdbc:mysql://db-host:3306/shaolin_db</url>
          <driver-name>com.mysql.cj.jdbc.Driver</driver-name>
          <password-encrypted>{AES}...</password-encrypted>
          <properties>
            <property>
              <name>user</name>
              <value>db_user</value>
            </property>
            <property>
              <name>databaseName</name>
              <value>shaolin_db</value>
            </property>
          </properties>
        </jdbc-driver-params>
        <jdbc-connection-pool-params>
          <test-table-name>SELECT 1 FROM DUAL</test-table-name>
        </jdbc-connection-pool-params>
      </jdbc-resource>
    </jdbc-system-resource>
    
  2. 在Dockerfile中把这个XML文件复制到domain的config/jdbc目录下:

    COPY shaolin-ds.xml /u01/oracle/user_projects/domains/base_domain/config/jdbc/
    
  3. 确保domain的config/config.xml中包含对该数据源的引用(可通过WLST离线模式修改,或提前在domain模板中添加):

    <domain>
      <!-- 其他原有配置 -->
      <system-resource>
        <name>shaolin-ds</name>
        <target>AdminServer</target>
        <descriptor-file-name>jdbc/shaolin-ds.xml</descriptor-file-name>
      </system-resource>
    </domain>
    

这种方式无需启动后执行WLST脚本,WebLogic启动时会自动加载配置,适合固定的数据源配置场景。

额外提示

  • 若使用Oracle官方WebLogic Docker镜像,可参考其createDomain.sh脚本,通过添加自定义配置步骤集成数据源创建逻辑。
  • 密码建议提前用WebLogic的encrypt.sh工具加密,避免明文存储在配置文件中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:59:12