Java WebLogic 实战指南:从 Domain、数据源到 WAR 部署和集群管理

简介

WebLogic 全名是 Oracle WebLogic Server

它是 Oracle 提供的企业级 Java 应用服务器,常见于银行、保险、电信、政务、传统大型企业系统。

Tomcat 更偏 Servlet 容器。

WebLogic 更像完整的企业级应用平台。

它除了能跑 Servlet、JSP、Spring MVC 这类 Web 应用,还提供:

text 复制代码
EJB
JMS
JTA 事务
JNDI
数据源连接池
集群
安全域
部署管理
监控诊断

一句话概括:

text 复制代码
WebLogic 是面向企业级 Java 应用的应用服务器,负责承载 Web 应用、企业组件、数据源、消息、事务、集群和安全管理。

WebLogic 解决什么问题

传统企业 Java 系统经常不只是一个 Web 接口。

它可能还需要:

text 复制代码
统一数据源
分布式事务
JMS 消息
EJB 组件
多节点集群
会话复制
统一安全认证
集中部署和运维

如果每个应用都自己处理这些能力,系统会很难管。

WebLogic 的思路是:

text 复制代码
应用只关注业务代码
容器负责连接池、事务、消息、安全、集群和部署

比如应用里只写:

java 复制代码
@Resource(lookup = "jdbc/orderDS")
private DataSource dataSource;

真正的数据库地址、账号、连接池大小、测试 SQL、部署目标,都在 WebLogic 控制台里配置。

这也是很多传统企业项目喜欢 WebLogic 的原因:应用配置和运行资源可以集中交给应用服务器管理。

WebLogic 和 Tomcat 的区别

对比项 Tomcat WebLogic
定位 Servlet 容器 企业级应用服务器
所属 Apache Oracle
Servlet / JSP 支持 支持
EJB 不支持 支持
JMS 不内置 内置
JTA 分布式事务 能力有限 内置支持
数据源 应用内或容器配置 容器级数据源和连接池
集群 需要额外方案 内置集群能力
管理控制台 较轻 功能完整
授权 开源 商业产品

简单理解:

text 复制代码
Tomcat:跑 Web 应用很常见,轻量直接。
WebLogic:跑企业级 Java EE / Jakarta EE 系统,管理能力更完整。

新微服务项目通常更常用 Spring Boot 内嵌 Tomcat、Jetty、Undertow。

传统企业系统、历史 Java EE 系统、依赖 EJB/JMS/JTA 的系统,则经常会遇到 WebLogic。

版本和规范关系

WebLogic 版本和 Java/Jakarta 规范关系很重要。

WebLogic 版本 规范支持 常见 JDK 包名特点
12.2.1.4 Java EE 7 JDK 8 javax.*
14.1.1 Java EE 8 JDK 8 / 11 javax.*
14.1.2 Jakarta EE 8 JDK 17 / 21 仍以 javax.* 为主
15.1.1 Jakarta EE 9.1 JDK 17 / 21 jakarta.*

几个关键点:

text 复制代码
Java EE 8 / Jakarta EE 8:API 包名还是 javax.*
Jakarta EE 9.1:API 包名切到 jakarta.*

所以迁移时不能只看"Jakarta"这个名字。

WebLogic 14.1.2 支持 Jakarta EE 8,但应用代码仍然常见 javax.servletjavax.jmsjavax.persistence

WebLogic 15.1.1 支持 Jakarta EE 9.1,应用代码要进入 jakarta.servletjakarta.jmsjakarta.persistence 这套包名体系。

WebLogic 核心架构

WebLogic 的管理单位叫 Domain。

一个典型结构如下:

text 复制代码
Domain
  |
  +--> Admin Server
  |
  +--> Managed Server 1
  |
  +--> Managed Server 2
  |
  +--> Cluster
        |
        +--> Managed Server 1
        +--> Managed Server 2

核心概念:

概念 说明
Domain 域,一个完整的 WebLogic 管理环境
Admin Server 管理服务器,提供控制台和配置管理
Managed Server 受管服务器,真正运行业务应用
Cluster 多个 Managed Server 组成的集群
Machine 物理机或虚拟机映射
Node Manager 远程启动、停止、监控 Managed Server
Data Source 数据源和连接池
JMS Server JMS 消息服务
Security Realm 用户、组、角色、安全认证

Admin Server 负责管理。

Managed Server 负责跑业务。

生产环境里,应用通常部署到 Managed Server 或 Cluster,而不是只部署到 Admin Server。

Domain 目录结构

一个 Domain 目录大概是这样:

text 复制代码
base_domain/
├── bin/
├── config/
├── lib/
├── logs/
├── security/
├── servers/
│   ├── AdminServer/
│   └── ManagedServer1/
└── startWebLogic.sh

常见目录:

目录 说明
bin 启动、停止脚本
config Domain 配置文件
lib Domain 级别公共 jar
logs 日志
security 安全相关文件
servers 各 Server 的运行目录

核心配置文件:

text 复制代码
config/config.xml

它保存 Domain 里的 Server、数据源、JMS、集群、部署等配置。

一般不手工改 config.xml,更常见的是通过控制台、WLST 或 REST 管理接口修改。

安装和创建 Domain

WebLogic 安装包通常从 Oracle 官网或 Oracle Software Delivery Cloud 获取。

安装后常见目录变量:

变量 说明
ORACLE_HOME Oracle Middleware 安装目录
DOMAIN_HOME 具体 Domain 目录
JAVA_HOME JDK 目录

创建 Domain 可以使用配置向导:

bash 复制代码
$ORACLE_HOME/oracle_common/common/bin/config.sh

Windows:

bash 复制代码
%ORACLE_HOME%\oracle_common\common\bin\config.cmd

创建时常见配置:

text 复制代码
Domain 名称
管理员账号和密码
Admin Server 端口,默认常见 7001
是否创建 Managed Server
是否创建 Cluster
是否配置 Node Manager

开发环境可以先创建一个单机 Domain。

生产环境通常会创建 Admin Server、多个 Managed Server、Machine、Node Manager 和 Cluster。

启动和关闭

进入 Domain 目录:

bash 复制代码
cd $DOMAIN_HOME

启动 Admin Server:

bash 复制代码
./startWebLogic.sh

Windows:

bash 复制代码
startWebLogic.cmd

控制台地址通常是:

text 复制代码
http://localhost:7001/console

启动 Managed Server:

bash 复制代码
cd $DOMAIN_HOME/bin
./startManagedWebLogic.sh ManagedServer1 http://localhost:7001

关闭脚本:

bash 复制代码
./stopWebLogic.sh
./stopManagedWebLogic.sh ManagedServer1

生产环境里更常用 Node Manager 来管理 Managed Server 生命周期。

第一个 Servlet WAR Demo

先写一个最小 Web 应用,打成 WAR 部署到 WebLogic。

项目结构:

text 复制代码
weblogic-servlet-demo/
├── pom.xml
└── src/
    └── main/
        ├── java/
        │   └── com/example/weblogic/HelloServlet.java
        └── webapp/
            ├── index.jsp
            └── WEB-INF/
                ├── web.xml
                └── weblogic.xml

pom.xml

如果目标是 WebLogic 14.1.x 或更早的 javax.* 体系,可以使用:

xml 复制代码
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                             https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>weblogic-servlet-demo</artifactId>
    <version>1.0.0</version>
    <packaging>war</packaging>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <finalName>weblogic-servlet-demo</finalName>
    </build>
</project>

scope=provided 表示 Servlet API 由 WebLogic 容器提供,不打进 WAR。

如果目标是 WebLogic 15.1.1,需要切换到 jakarta.servlet-api,代码包名也要改成 jakarta.servlet.*

HelloServlet

WebLogic 14.1.x 示例:

java 复制代码
package com.example.weblogic;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request,
                         HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");

        PrintWriter writer = response.getWriter();
        writer.println("<h2>Hello WebLogic</h2>");
        writer.println("<p>Server: " + System.getProperty("weblogic.Name") + "</p>");
        writer.println("<p>Java: " + System.getProperty("java.version") + "</p>");
    }
}

web.xml

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                             http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <display-name>weblogic-servlet-demo</display-name>

    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

weblogic.xml

weblogic.xml 是 WebLogic 专用部署描述符,放在 WEB-INF 下。

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app">
    <context-root>/demo</context-root>

    <container-descriptor>
        <prefer-web-inf-classes>false</prefer-web-inf-classes>
    </container-descriptor>
</weblogic-web-app>

context-root 决定访问根路径。

打包:

bash 复制代码
mvn clean package

生成:

text 复制代码
target/weblogic-servlet-demo.war

部署后访问:

text 复制代码
http://localhost:7001/demo/hello

控制台部署 WAR

常见步骤:

text 复制代码
登录控制台
  |
  v
Deployments
  |
  v
Install
  |
  v
选择 WAR / EAR
  |
  v
选择部署目标 Server 或 Cluster
  |
  v
Finish
  |
  v
Start servicing all requests

开发环境可以部署到 Admin Server。

生产环境通常部署到 Cluster 或 Managed Server。

命令行部署

WebLogic 提供 weblogic.Deployer

部署:

bash 复制代码
java weblogic.Deployer \
  -adminurl t3://localhost:7001 \
  -username weblogic \
  -password welcome1 \
  -deploy \
  -name weblogic-servlet-demo \
  -source target/weblogic-servlet-demo.war \
  -targets AdminServer

停止:

bash 复制代码
java weblogic.Deployer \
  -adminurl t3://localhost:7001 \
  -username weblogic \
  -password welcome1 \
  -stop \
  -name weblogic-servlet-demo

卸载:

bash 复制代码
java weblogic.Deployer \
  -adminurl t3://localhost:7001 \
  -username weblogic \
  -password welcome1 \
  -undeploy \
  -name weblogic-servlet-demo

命令行部署适合自动化脚本和 CI/CD。

账号密码不适合写死在脚本里,生产环境一般通过凭据文件、环境变量或部署平台注入。

配置 JDBC 数据源

WebLogic 数据源通常在控制台里创建。

常见步骤:

text 复制代码
Services
  |
  v
Data Sources
  |
  v
New Generic Data Source
  |
  v
填写名称和 JNDI
  |
  v
选择数据库类型和驱动
  |
  v
填写 URL、用户名、密码
  |
  v
测试连接
  |
  v
选择部署目标

示例配置:

配置项 示例
Name OrderDataSource
JNDI Name jdbc/orderDS
Driver MySQL / Oracle JDBC Driver
URL jdbc:mysql://localhost:3306/order_db
Target OrderCluster

应用代码通过 JNDI 获取数据源。

JNDI 数据源 Demo

Servlet 示例:

java 复制代码
package com.example.weblogic;

import javax.annotation.Resource;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

@WebServlet("/orders/count")
public class OrderCountServlet extends HttpServlet {

    @Resource(lookup = "jdbc/orderDS")
    private DataSource dataSource;

    @Override
    protected void doGet(HttpServletRequest request,
                         HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/plain;charset=UTF-8");

        try (Connection connection = dataSource.getConnection();
             PreparedStatement statement = connection.prepareStatement("select count(*) from orders");
             ResultSet resultSet = statement.executeQuery()) {

            resultSet.next();
            response.getWriter().write("订单数量:" + resultSet.getInt(1));
        } catch (Exception e) {
            throw new ServletException(e);
        }
    }
}

也可以手动查找:

java 复制代码
Context context = new InitialContext();
DataSource dataSource = (DataSource) context.lookup("jdbc/orderDS");

容器数据源的好处是:

text 复制代码
连接池参数集中管理
数据库账号不写在应用包里
应用和数据库配置解耦
生产运维可以统一调整连接池

Spring Boot WAR 部署到 WebLogic

Spring Boot 默认打可执行 jar,内嵌 Tomcat。

部署到 WebLogic 时,通常要改成 WAR,让 WebLogic 作为外部 Servlet 容器。

pom.xml

xml 复制代码
<packaging>war</packaging>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
</dependencies>

启动类继承 SpringBootServletInitializer

java 复制代码
package com.example.boot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication
public class WebLogicBootApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(WebLogicBootApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(WebLogicBootApplication.class, args);
    }
}

Controller:

java 复制代码
package com.example.boot;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HealthController {

    @GetMapping("/health")
    public String health() {
        return "UP";
    }
}

src/main/webapp/WEB-INF/weblogic.xml

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app">
    <context-root>/boot-demo</context-root>

    <container-descriptor>
        <prefer-application-packages>
            <package-name>org.springframework.*</package-name>
            <package-name>org.slf4j.*</package-name>
            <package-name>ch.qos.logback.*</package-name>
            <package-name>com.fasterxml.jackson.*</package-name>
        </prefer-application-packages>
    </container-descriptor>
</weblogic-web-app>

打包:

bash 复制代码
mvn clean package

部署后访问:

text 复制代码
http://localhost:7001/boot-demo/health

版本注意:

text 复制代码
Spring Boot 2.x:javax.* 体系,适合 WebLogic 14.1.x 及更早版本
Spring Boot 3.x:jakarta.* 体系,更适合 WebLogic 15.1.1 这类 Jakarta EE 9.1 版本

如果 Spring Boot 3 应用部署到只支持 javax.* 的 WebLogic 版本,通常会出现类找不到、Servlet API 不匹配等问题。

Spring 使用 WebLogic 数据源

Spring Boot 可以直接使用 JNDI 数据源。

application.yml

yaml 复制代码
spring:
  datasource:
    jndi-name: jdbc/orderDS

这样 Spring Boot 会从 WebLogic 容器查找 jdbc/orderDS

如果用 Java 配置:

java 复制代码
package com.example.boot.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jndi.JndiObjectFactoryBean;

import javax.sql.DataSource;

@Configuration
public class DataSourceConfig {

    @Bean
    public JndiObjectFactoryBean orderDataSource() {
        JndiObjectFactoryBean bean = new JndiObjectFactoryBean();
        bean.setJndiName("jdbc/orderDS");
        bean.setProxyInterface(DataSource.class);
        return bean;
    }
}

使用容器数据源后,应用包里不需要放数据库连接 URL 和密码。

JMS 资源和代码示例

WebLogic 内置 JMS 能力。

常见配置顺序:

text 复制代码
创建 JMS Server
创建 JMS Module
创建 Connection Factory
创建 Queue 或 Topic
绑定 JNDI 名称
部署到 Server 或 Cluster

假设配置:

资源 JNDI
Connection Factory jms/orderConnectionFactory
Queue jms/orderQueue

发送消息:

java 复制代码
package com.example.weblogic.jms;

import javax.annotation.Resource;
import javax.jms.ConnectionFactory;
import javax.jms.JMSContext;
import javax.jms.Queue;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/jms/send")
public class OrderMessageServlet extends HttpServlet {

    @Resource(lookup = "jms/orderConnectionFactory")
    private ConnectionFactory connectionFactory;

    @Resource(lookup = "jms/orderQueue")
    private Queue orderQueue;

    @Override
    protected void doPost(HttpServletRequest request,
                          HttpServletResponse response) throws IOException {
        try (JMSContext context = connectionFactory.createContext()) {
            context.createProducer().send(orderQueue, "order-created-10001");
        }

        response.getWriter().write("sent");
    }
}

如果目标是 WebLogic 15.1.1,需要把 javax.jms 换成 jakarta.jmsjavax.annotation 换成 jakarta.annotation

EAR 包是什么

WebLogic 里除了 WAR,还经常能看到 EAR。

包类型 说明
WAR Web 应用包,通常包含 Servlet、JSP、Spring MVC
JAR 普通 Java 库或 EJB Jar
EAR 企业应用包,可以包含多个 WAR、EJB Jar、公共 lib

EAR 结构示例:

text 复制代码
order-system.ear
├── META-INF/
│   └── application.xml
├── order-web.war
├── order-ejb.jar
└── lib/
    └── common-utils.jar

老式 Java EE 大系统常用 EAR,把多个模块作为一个企业应用一起部署。

新一些的 Spring Boot 应用更多是单 WAR 或可执行 jar。

WLST 自动化管理

WLST 全称是 WebLogic Scripting Tool

它是 WebLogic 的脚本工具,语法基于 Jython。

连接:

python 复制代码
connect('weblogic', 'welcome1', 't3://localhost:7001')

部署应用:

python 复制代码
connect('weblogic', 'welcome1', 't3://localhost:7001')

deploy(
    'weblogic-servlet-demo',
    '/opt/apps/weblogic-servlet-demo.war',
    targets='AdminServer'
)

disconnect()
exit()

启动 Managed Server:

python 复制代码
connect('weblogic', 'welcome1', 't3://localhost:7001')
start('ManagedServer1')
disconnect()
exit()

执行:

bash 复制代码
$ORACLE_HOME/oracle_common/common/bin/wlst.sh deploy.py

WLST 适合:

text 复制代码
自动部署
批量创建资源
环境初始化
CI/CD
配置巡检

生产脚本里同样不适合明文写密码。

集群和高可用

生产环境常见结构:

text 复制代码
Nginx / Apache / F5
  |
  v
WebLogic Cluster
  |
  +--> ManagedServer1
  +--> ManagedServer2
  +--> ManagedServer3

WebLogic 集群能提供:

  • 应用部署到多个节点
  • 会话复制
  • 故障转移
  • 负载分摊
  • 集群级 JMS / 数据源目标

常见配置步骤:

text 复制代码
创建 Machine
配置 Node Manager
创建 Managed Server
创建 Cluster
把 Managed Server 加入 Cluster
配置数据源和 JMS 目标
把应用部署到 Cluster
前端负载均衡转发流量

集群不是只创建多个 Server。

还要考虑会话、JMS、事务日志、数据源目标、健康检查、负载均衡和故障恢复。

日志和排查

常见日志位置:

text 复制代码
$DOMAIN_HOME/servers/AdminServer/logs/
$DOMAIN_HOME/servers/ManagedServer1/logs/

常见日志:

日志 说明
AdminServer.log 管理服务器日志
ManagedServer1.log 受管服务器日志
access.log HTTP 访问日志
domain.log Domain 级别日志
应用日志 应用自己输出的日志

排查部署失败时,通常先看:

text 复制代码
Managed Server 日志
应用启动异常堆栈
类冲突信息
数据源测试结果
JNDI 查找异常

类加载和依赖冲突

WebLogic 自带很多 Java EE / Jakarta EE 相关库。

应用自己也可能带类似库。

这就容易出现类冲突。

常见现象:

text 复制代码
ClassNotFoundException
NoSuchMethodError
ClassCastException
Servlet API 包名不匹配
Jackson / SLF4J / Spring 版本冲突

weblogic.xml 可以控制部分类加载行为:

xml 复制代码
<container-descriptor>
    <prefer-application-packages>
        <package-name>org.springframework.*</package-name>
        <package-name>org.slf4j.*</package-name>
        <package-name>com.fasterxml.jackson.*</package-name>
    </prefer-application-packages>
</container-descriptor>

但这不是万能解法。

更好的方式是先确认:

text 复制代码
WebLogic 版本
JDK 版本
Java EE / Jakarta EE 版本
Spring / Hibernate 版本
应用依赖里是否打入了容器已提供的 API

Servlet、JSP、JMS、JPA 这类容器 API 通常使用 provided,避免重复打入 WAR。

容器化和 Kubernetes

WebLogic 也可以运行在容器和 Kubernetes 里。

Oracle 提供了 WebLogic Kubernetes Operator、WebLogic Deploy Tooling、WebLogic Image Tool 等工具。

常见思路:

text 复制代码
用镜像承载 WebLogic 运行时
用模型文件描述 Domain 配置
用 Operator 管理 Domain 生命周期
用 Kubernetes 管理 Pod、Service、存储和滚动更新

这类部署更偏运维和平台工程。

传统脚本部署项目可以先掌握 Domain、Managed Server、数据源、部署和 WLST。

现代化迁移项目再进一步关注 Kubernetes 工具链。

常见问题

Spring Boot jar 能不能直接部署到 WebLogic

通常不直接部署可执行 jar。

WebLogic 是应用服务器,常规部署对象是 WAR 或 EAR。

Spring Boot 应用部署到 WebLogic 时,一般改成 WAR,并继承 SpringBootServletInitializer

javax 和 jakarta 怎么选

看 WebLogic 和应用框架版本。

场景 包名
WebLogic 14.1.x、Spring Boot 2 javax.*
WebLogic 15.1.1、Spring Boot 3 jakarta.*

两套包名不能随意混用。

数据源 JNDI 找不到

常见原因:

原因 处理方式
JNDI 名称写错 对照控制台配置
数据源没有 Target 到当前 Server 把数据源部署到应用所在 Server 或 Cluster
数据源测试失败 检查驱动、URL、账号、网络
应用里 res-ref 配置不一致 检查 web.xmlweblogic.xml

部署后访问 404

常见原因:

原因 处理方式
context-root 和访问路径不一致 检查 weblogic.xml
应用没有启动 查看 Deployments 状态
部署目标不对 确认部署到当前访问的 Server
Controller / Servlet 映射不对 检查应用路由

本地能跑,WebLogic 部署失败

常见方向:

text 复制代码
JDK 版本不一致
Servlet API 包名不一致
容器自带依赖和应用依赖冲突
Spring Boot jar 没改 WAR
数据库驱动没有放好
数据源没有 Target
weblogic.xml 配置不匹配

实践建议

场景 建议
新建 WebLogic 项目 先确认 WebLogic、JDK、Java/Jakarta 规范版本
Web 应用部署 打 WAR,容器 API 使用 provided
Spring Boot 部署 改 WAR,继承 SpringBootServletInitializer
数据库连接 优先使用 WebLogic 数据源和 JNDI
部署自动化 使用 weblogic.Deployer 或 WLST
生产部署 应用部署到 Managed Server 或 Cluster
类冲突 优先理清依赖范围,再考虑 prefer-application-packages
密码管理 使用凭据文件、密钥系统或部署平台注入
容器化 关注 WebLogic Kubernetes Operator 和 WDT

小结

WebLogic 的核心价值在企业级运行时能力。

它不只是一个 Servlet 容器,还提供 Domain 管理、Admin Server、Managed Server、集群、数据源、JMS、JTA、安全域、部署和监控能力。

日常开发和部署里,最需要先掌握几件事:版本和包名关系、Domain 架构、WAR/EAR 部署、JNDI 数据源、JMS 资源、Spring Boot WAR 改造、WLST 自动化和类加载冲突处理。

如果项目仍然运行在传统企业 Java 技术栈上,WebLogic 依然是很重要的一类应用服务器。

相关推荐
2501_937860942 小时前
Java 集合底层深度剖析:Map 与 Set、二叉搜索树、哈希表全解
java·数据结构·散列表
cyforkk2 小时前
并发控制与状态安全:Single-Flight 与幂等性的本质区别
java·安全·spring
豆角焖肉2 小时前
MyBatis延迟加载、缓存机制与注解开发
java·spring·mybatis
所愿ღ2 小时前
SSM框架-Spring3
java·开发语言·笔记·spring
java1234_小锋2 小时前
【免费】基于Spark实时交通流量分析与拥堵预测系统(Java版本+可视化大屏+Kafka+SpringBoot+Vue3) 锋哥原创出品,必属精品
java·大数据·spark·kafka·实时交通流量分析与拥堵预测
组合缺一2 小时前
Solon 的 10 种 HTTP 服务器:改一行依赖,换一个引擎
java·服务器·网络协议·http·solon
LSL666_3 小时前
SpringBoot静态资源映射
java·spring boot·spring
520拼好饭被践踏3 小时前
JAVA+Agent学习day26
java·开发语言·数据结构·学习·agent
郝学胜-神的一滴4 小时前
力扣 692:巧用小顶堆高效求解前K个高频单词
java·数据结构·python·程序人生·算法·leetcode·职场和发展