1. 项目概述:为什么我们还在用Weblogic?
如果你在Java企业级应用开发领域摸爬滚打超过五年,Weblogic这个名字对你来说,可能既熟悉又陌生。熟悉是因为它曾是J2EE时代的“王者”,是无数银行、电信、政府大型项目的标准配置;陌生则是因为在云原生和微服务浪潮下,Spring Boot、Kubernetes等轻量级方案似乎占据了所有头条。但现实是,大量的存量核心业务系统,尤其是金融、能源等对稳定性、事务一致性要求极高的领域,Weblogic依然是不可动摇的基石。接手一个老项目维护,或者为特定客户部署一套符合其技术栈要求的系统,掌握Weblogic的完整部署流程,依然是一项硬核且实用的技能。
今天,我就以一个老运维的视角,带你走一遍Weblogic从下载、安装、配置到项目部署的全流程。这不是一个简单的“下一步、下一步”的安装向导,我会穿插这些年踩过的坑、总结的最佳实践,以及面对那些让人头疼的乱码、启动失败问题时,我的排查思路。无论你是需要快速搭建一个测试环境的新手,还是临危受命要去维护一套生产系统的“救火队员”,这篇内容都能给你提供一份可落地的“作战地图”。
2. 核心准备:获取安装包与理解版本选择
2.1 官方渠道与版本策略
Weblogic是Oracle公司的商业产品,其正版授权需要从Oracle官网获取。对于学习和测试,Oracle提供了功能完整的免费版本,但需要注意许可协议。直接搜索“Oracle Weblogic Download”找到官方下载页面是关键。这里你会面临第一个选择:版本。
目前主流的有两个大版本:12c(12.2.x)和 14c(14.1.x,后统一归入Oracle Fusion Middleware版本线)。对于大多数传统项目,12.2.1.4.0是一个经过长期验证、极其稳定的版本,社区资料和兼容性解决方案也最丰富。而14c或更新版本则包含了对最新JDK和Java EE规范的支持。我的建议是:除非新项目有明确要求,否则优先选择12.2.1.4.0。它的稳定性经过了无数生产环境的锤炼,你遇到的大多数问题,几乎都能在搜索引擎里找到答案。
下载时,你会看到一个巨大的安装包(通常是一个.jar文件,如fmw_12.2.1.4.0_wls_lite_generic.jar)。这个“Lite”版本是基础服务器包,对于绝大多数场景已经足够。记住,Weblogic的安装包是平台通用的(Generic),这意味着它在Windows、Linux、Unix上的安装过程几乎一致。
注意:从非官方渠道下载所谓的“绿色版”、“破解版”安装包是极度危险的行为。这些包可能被植入恶意代码,或存在文件缺失,会导致部署后出现各种灵异问题,在安全审计严格的企业环境中是绝对的红线。
2.2 环境预检:JDK与系统资源
Weblogic是纯Java应用服务器,所以它的运行完全依赖于JDK。这里有一个至关重要的版本匹配关系:
- Weblogic 12c (12.2.1.3/12.2.1.4):官方支持 JDK 8 和 JDK 11(特定版本)。实测中,JDK 8u202或u211等长期支持(LTS)版本兼容性最佳。强烈不建议使用最新的JDK 8小版本或JDK 17+,可能会遇到不兼容的类或启动参数问题。
- Weblogic 14c:支持 JDK 11 及更高版本。
你需要预先在服务器上安装好匹配的JDK,并正确配置JAVA_HOME环境变量。检查方法是在命令行执行java -version。除了JDK,还需要关注:
- 磁盘空间:安装目录建议预留至少5GB空间,这包括了产品二进制文件、域(Domain)目录以及后续的日志和部署文件。
- 内存:即使是单机测试,也建议系统有至少4GB可用物理内存。Weblogic自身进程(Admin Server和Managed Server)在启动时就会占用数百MB到上GB的内存。
- 临时空间:安装程序在解压和配置时需要临时空间,确保
/tmp(Linux)或%TEMP%(Windows)有足够空间。
3. 安装流程详解:图形化与静默安装
3.1 图形化界面安装(推荐新手)
对于初学者或在有图形界面的测试机上,图形化安装是最直观的方式。过程并不复杂,但有几个关键点决定后续使用的便利性。
启动安装程序:打开终端或命令提示符,导航到安装包所在目录,执行:
java -jar fmw_12.2.1.4.0_wls_lite_generic.jar这会启动Oracle Universal Installer (OUI)。如果长时间没有界面弹出,检查
DISPLAY环境变量(Linux)或Java图形库是否正常。跳过更新:安装向导会提示注册Oracle支持并检查更新。为了加快安装速度,通常选择“跳过自动更新”。我们可以在安装完成后手动打补丁。
选择安装类型:这里提供“典型”和“自定义”。我强烈建议选择**“自定义”**。在典型安装中,OUI会默认创建一个Weblogic域(Domain),但我习惯于将“产品安装”和“域创建”这两个步骤分开。分开的好处是,一个干净的产品安装目录可以用于创建多个不同用途的域(如开发域、测试域),互不干扰。
指定安装位置:这是最重要的步骤之一。不要使用带有空格或中文字符的路径。在Linux下,类似
/opt/oracle/middleware这样的路径是标准做法;在Windows下,C:\Oracle\Middleware也可以。这个路径我们称之为MW_HOME(Middleware Home)。记住这个路径,后续所有配置都会引用它。选择安装组件:在自定义安装中,确保“WebLogic Server”被选中。其他如Coherence(缓存网格)、示例代码等,除非特定需要,否则可以不选,以保持环境简洁。
JDK选择:安装程序会自动检测系统的
JAVA_HOME。请确认它指向了你预先安装好的、版本匹配的JDK目录。不要使用安装程序自带的JDK,因为自带的JDK版本可能较旧或难以统一管理。完成安装:后续步骤一路“下一步”即可。安装完成后,不要勾选“快速启动配置向导”。我们将在下一步手动创建域,以获得更精细的控制。
3.2 静默安装(适用于自动化与生产环境)
在生产环境或需要通过脚本批量部署时,静默安装是唯一选择。它依赖于一个响应文件(response file)。你可以先通过图形化安装生成一个模板。
生成响应文件模板:在首次图形化安装时,安装向导的最后一个界面有一个“保存响应文件”的选项。将它保存为
weblogic_install.rsp。编辑响应文件:用文本编辑器打开这个
.rsp文件。你需要关注并修改以下几个关键参数:[ENGINE] Response File Version=1.0.0.0.0 [GENERIC] DECLINE_AUTO_UPDATES=true # 拒绝自动更新 ORACLE_HOME=/opt/oracle/middleware # 指定MW_HOME INSTALL_TYPE=Custom # 安装类型 MYORACLESUPPORT_USERNAME= # 留空 MYORACLESUPPORT_PASSWORD= # 留空 ...(中间省略)... SELECTED_DISTRIBUTION=WebLogic Server~12.2.1.4.0 # 确保选中WebLogic Server你可以删除不必要的组件行,并确保路径符合你的规划。
执行静默安装:使用以下命令,安装过程将无界面进行,所有日志输出到指定文件。
java -jar fmw_12.2.1.4.0_wls_lite_generic.jar -silent -responseFile /path/to/weblogic_install.rsp -invPtrLoc /path/to/oraInst.loc这里的
oraInst.loc文件是指向oraInventory目录位置的文件,内容通常为inventory_loc=/path/to/oraInventory。静默安装成功后,在命令行会看到The installation was successful.的提示。
实操心得:无论用哪种方式,安装完成后,务必检查
MW_HOME目录下的wlserver文件夹是否存在。可以尝试运行MW_HOME/wlserver/server/bin/setWLSEnv.sh(Linux)或setWLSEnv.cmd(Windows)来验证环境脚本是否正常。这个脚本用于设置运行Weblogic所需的所有环境变量。
4. 创建与管理域(Domain):应用服务器的独立王国
产品安装只是搭好了舞台,域(Domain)才是你真正运行应用的“独立王国”。一个域包含一个管理服务器(AdminServer)、零个或多个受管服务器(Managed Server)、集群配置、部署的应用、安全策略等。
4.1 使用配置向导(Configuration Wizard)创建域
进入MW_HOME/wlserver/common/bin目录,执行config.sh(Linux)或config.cmd(Windows)启动配置向导。
选择创建新域:模板选择“基本WebLogic Server域”,这包含了最核心的功能。
配置管理员账户:这里设置的是Weblogic控制台(Console)的管理员用户名和密码。请务必使用强密码并牢记。生产环境中,这个账户的安全至关重要。我习惯将用户名设为
weblogic,但密码一定是复杂且唯一的。选择域模式与JDK:
- 开发模式:启动速度快,支持自动部署(Auto-Deploy)和热替换,但安全性较低。仅用于本地开发。
- 生产模式:启动时会进行更严格的安全检查和优化,性能更好,是生产环境的唯一选择。 JDK选择系统已安装的、匹配的JDK。
配置数据库(可选):如果你的应用需要使用Weblogic内置的JDBC数据源,并且希望将域配置(如数据源定义)保存到数据库中(称为“数据库存储”),可以在这里配置。对于大多数入门和测试场景,选择默认的“基于文件的存储”即可。
配置服务器:默认会创建一个名为
AdminServer的管理服务器,监听端口7001。你可以在这里修改端口,但如果7001未被占用,建议保留,因为几乎所有文档和示例都基于此端口。 你可以选择同时创建受管服务器(如ManagedServer_1)和集群,但对于初次创建,可以先只保留AdminServer,后续再通过控制台添加。指定域位置与名称:为你的域指定一个独立的目录,如
/opt/oracle/user_projects/domains/my_domain。域目录绝对不能放在MW_HOME内部,这是为了隔离,方便升级和维护。域名可以取一个有意义的名字,如dev_domain。
创建完成后,域目录下会生成startWebLogic.sh(或.cmd)、stopWebLogic.sh等启动停止脚本。
4.2 域的启动、停止与状态检查
启动域:进入域目录
bin文件夹,执行./startWebLogic.sh。你会看到大量的日志输出到控制台。当看到类似<Server started in RUNNING mode>的信息时,表示启动成功。首次启动生产模式域,可能会提示你输入之前创建的管理员用户名和密码。访问控制台:启动成功后,打开浏览器,访问
http://服务器IP:7001/console。使用创建域时设置的管理员账号登录。Weblogic控制台是管理所有资源的核心。停止域:在启动域的控制台,按下
Ctrl+C可以正常关闭。更规范的做法是在另一个终端,进入域目录bin文件夹,执行./stopWebLogic.sh,然后根据提示输入管理员账号密码。后台运行与日志:生产环境通常需要后台运行。可以使用
nohup命令:nohup ./startWebLogic.sh > /path/to/domain.log 2>&1 &所有日志将输出到
domain.log文件。域的日志文件位于domains/your_domain/servers/AdminServer/logs目录下,AdminServer.log是主日志,遇到问题首先查看这里。
注意事项:启动时如果报错“Address already in use”,说明端口被占用。使用
netstat -tlnp | grep 7001(Linux)或netstat -ano | findstr :7001(Windows)查找并终止占用进程,或修改域的端口号(通过控制台或修改config/config.xml)。
5. 项目部署与核心配置实战
5.1 应用部署:WAR包与EAR包
部署是企业级应用的核心。Weblogic支持直接部署WAR(Web Application Archive)和EAR(Enterprise Application Archive)包。
通过控制台部署:
- 登录控制台,在左侧域结构中找到“部署”。
- 点击“安装”,上传或指定你的应用包(WAR/EAR)在服务器上的路径。
- 选择“将此部署安装为应用程序”,下一步。
- 在“目标选择”中,选择要将应用部署到哪个或哪些服务器上(例如
AdminServer)。 - 完成安装后,在部署列表中,选中刚安装的应用,点击“启动”->“为所有请求提供服务”。
这是最直观的方式,适合手动部署测试。
自动部署(仅开发模式):在开发模式下,你可以将WAR包直接复制到域目录下的
autodeploy文件夹中(例如domains/my_domain/autodeploy/)。Weblogic会监控此目录并自动部署、重部署。生产环境严禁使用此方式,因为缺乏版本控制和回滚机制。命令行部署(weblogic.Deployer):这是自动化脚本和CI/CD流水线的标准方式。命令示例如下:
java weblogic.Deployer -adminurl t3://localhost:7001 -username weblogic -password your_password -deploy -name MyApp -source /path/to/myapp.war -targets AdminServer这个命令通过
t3协议连接管理服务器进行部署,非常适合集成到脚本中。
5.2 核心配置:数据源与JNDI
对于需要数据库访问的应用,配置数据源是必须的。
- 创建数据源:在控制台,“服务”->“数据源”->“新建”->“一般数据源”。
- 设置属性:给数据源起名(如
MyDS),JNDI名通常为jdbc/MyDS(这是应用代码中查找的名称)。选择数据库驱动,如Oracle的*Oracle‘s Driver (Thin) for Instance connections; Versions:Any。 - 连接参数:填写数据库URL、用户名、密码。URL格式例如:
jdbc:oracle:thin:@//host:port/service_name。 - 测试配置:在最后一步,一定要点击“测试配置”,确保能连上数据库。
- 目标选择:选择将此数据源部署到哪些服务器上。
配置完成后,在你的应用代码(如web.xml或Spring配置)中,就可以通过java:comp/env/jdbc/MyDS或直接jdbc/MyDS来获取数据源连接了。
5.3 性能调优入门:内存与线程池
对于生产环境,默认配置通常需要调整。
JVM内存参数:修改域目录下
bin/setDomainEnv.sh(或.cmd)文件,找到USER_MEM_ARGS设置。例如:export USER_MEM_ARGS="-Xms4096m -Xmx4096m -XX:MaxPermSize=512m"-Xms和-Xmx设置堆内存初始和最大值,根据服务器物理内存设置,通常设为相同值以避免运行时调整开销。-XX:MaxPermSize(JDK 8)或-XX:MaxMetaspaceSize(JDK 8+)设置元空间大小。线程池:在控制台,“环境”->“服务器”->点击具体服务器(如
AdminServer)->“配置”->“调优”。可以调整“执行线程数”,默认25。对于并发量高的应用,可以适当增加(如50-100),但不要超过操作系统线程数上限。监控线程空闲率,如果持续很低,说明需要增加。
6. 故障排查与经典问题实录
6.1 启动日志乱码问题
这是最常见的问题之一,尤其是在Windows服务器或某些Linux终端环境下。症状是启动脚本输出的日志中,中文或特殊符号显示为“???”或乱码方块。
根本原因:操作系统、终端、Weblogic JVM三者之间的字符编码不一致。Weblogic默认使用操作系统的默认编码。
解决方案:
永久解决(修改启动参数):编辑域目录下的
bin/startWebLogic.sh(Linux)或startWebLogic.cmd(Windows)。 在设置JAVA_OPTIONS的地方,添加-Dfile.encoding=UTF-8参数。例如:JAVA_OPTIONS="${JAVA_OPTIONS} -Dfile.encoding=UTF-8" export JAVA_OPTIONS(Windows
.cmd文件中是set JAVA_OPTIONS=%JAVA_OPTIONS% -Dfile.encoding=UTF-8) 这个参数强制JVM使用UTF-8编码处理所有I/O。检查终端编码:确保你的SSH客户端或终端模拟器(如Xshell, SecureCRT)的字符编码也设置为UTF-8。
检查系统Locale:在Linux上,运行
locale命令,确保LANG或LC_ALL环境变量包含UTF-8,如LANG=en_US.UTF-8。可以通过export LANG=en_US.UTF-8临时设置,或修改/etc/locale.conf文件永久设置。
6.2 应用部署失败常见原因
| 问题现象 | 可能原因 | 排查步骤 |
|---|---|---|
| 部署时提示“无法访问归档文件” | WAR/EAR包路径错误、权限不足、包已损坏。 | 1. 检查文件路径是否正确。2. 用ls -l检查文件权限,确保Weblogic进程用户有读权限。3. 尝试用jar -tf your.war命令解压测试,看包是否完整。 |
应用启动后报ClassNotFoundException或NoClassDefFoundError | 应用依赖的库未找到。Weblogic和应用的类加载器冲突。 | 1. 检查WAR包的WEB-INF/lib下是否有相关jar。2. 检查是否将jar包放错了位置(如直接放在域lib下)。3. 对于Weblogic已提供的库(如Servlet API),在weblogic.xml中配置<prefer-application-packages>优先使用应用自带的。 |
| 控制台显示应用状态为“部署失败” | 应用初始化过程中出错(如Spring Context初始化失败)。 | 1.首要查看:domains/your_domain/servers/AdminServer/logs/MyApp.log(应用独立日志)。2. 查看AdminServer.log尾部,寻找ERROR或Exception堆栈信息。堆栈信息是定位问题的关键。 |
6.3 内存溢出(OOM)问题排查
生产环境长时间运行后,可能会遇到java.lang.OutOfMemoryError。
立即行动:在启动参数中添加HeapDump参数,以便下次OOM时自动生成dump文件分析。
JAVA_OPTIONS="${JAVA_OPTIONS} -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dump_dir"监控分析:启用Weblogic自带的SNMP或JMX监控,或使用
jstat、jmap、jvisualvm等JDK工具监控堆内存使用情况、GC频率和耗时。常见原因:
- 内存泄漏:通常是应用代码中未关闭的连接、集合类对象无限增长等。分析HeapDump文件,使用Eclipse MAT或JProfiler工具,查看占用内存最大的对象和引用链。
- 堆内存设置过小:根据服务器物理内存和应用压力,适当增加
-Xmx值。 - PermGen/Metaspace溢出:应用部署、重部署次数过多,或使用了大量动态类生成技术(如CGLib)。增加
-XX:MaxPermSize或-XX:MaxMetaspaceSize,并考虑减少不必要的重部署。
6.4 连接数耗尽与线程阻塞
应用变慢,甚至无响应,可能是数据库连接池或执行线程耗尽。
诊断:在Weblogic控制台,“监视”->“服务器”->点击具体服务器->“监视”->“性能”,查看“执行线程空闲计数”和“待处理请求”。如果空闲计数持续为0,且待处理请求堆积,说明线程池已满。 在数据源监控页面,查看“活动连接数”是否接近“最大容量”。
解决:
- 线程池:适当增加“执行线程数”,但更要排查应用是否有同步阻塞操作(如长时间等待外部服务、数据库慢查询),这些操作会占住线程不放。
- 数据源:适当增加“最大容量”,但同样要排查应用是否有连接泄漏(获取连接后未关闭)。可以开启“连接保留测试”或“泄漏检测”功能辅助排查。
踩过这些坑之后,我的体会是,Weblogic的稳定性是建立在正确配置和良好监控之上的。它像一台精密的机床,默认设置能跑起来,但要根据你加工的“工件”(应用)特性,去调整不同的“参数”。把日志级别调到DEBUG或TRACE能帮你看到更多细节,但生产环境记得调回INFO或WARNING。对于任何配置的修改,在测试环境验证后再上生产,这是铁律。最后,备份你的域目录,尤其是config文件夹,在出问题时,它能给你一次宝贵的“重来”机会。