ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

WebLogic从零到一:JDK环境、安装部署与生产级配置实战

WebLogic从零到一:JDK环境、安装部署与生产级配置实战 1. 项目概述为什么是WebLogic在Java企业级应用服务器的世界里WebLogic一直是一个绕不开的名字。尽管现在Spring Boot内置的Tomcat和各类云原生容器大行其道但在很多传统金融、电信、政府以及大型企业内部WebLogic依然是核心业务系统的基石。它提供的不仅仅是Servlet容器更是一整套成熟、稳定、功能强大的Java EE现Jakarta EE应用服务器环境包括EJB、JMS、JTA等企业级特性以及集群、高可用、安全管理等生产级运维能力。我接触WebLogic超过十年从最初的安装配置、域管理到后来的性能调优、故障排查踩过的坑不计其数。很多新手朋友一听到WebLogic就觉得头大觉得它庞大、复杂、配置繁琐。确实相比轻量级的TomcatWebLogic的学习曲线更陡峭但一旦你掌握了它的核心脉络就会发现它其实是一套逻辑非常清晰、设计非常严谨的体系。这篇内容我就想从一个老运维的角度把WebLogic从零开始到项目上线的完整路径掰开揉碎了讲清楚。这不仅仅是一个“安装教程”更是一份融合了原理理解、最佳实践和避坑指南的实战手册。无论你是需要接手一个遗留的WebLogic系统还是在新项目中评估使用它亦或是单纯想扩展自己的技术栈这篇内容都能给你提供一条清晰的路径。我们会从最基础的JDK环境搭建开始一步步完成WebLogic的安装、域的创建与配置最终将一个Java Web项目成功部署并运行起来。更重要的是我会把过程中最容易出问题的地方以及我这些年总结的排查技巧毫无保留地分享出来。2. 环境准备JDK的选型与“干净”安装万事开头难而WebLogic的开头难就难在JDK上。WebLogic对JDK的版本、来源甚至一些小细节都有严格的要求这一步没做对后面全是坑。2.1 JDK版本选择不是越新越好首先必须明确一点WebLogic的版本与JDK版本是强绑定的。你不能随意拿一个最新版的JDK去搭配一个老版本的WebLogic。通常Oracle官方发布的WebLogic安装包会自带一个匹配的JDK位于WL_HOME/jdk目录下这是最省心、最兼容的方案。但很多时候我们需要在服务器上统一管理JDK或者有特定的JDK供应商要求比如使用OpenJDK这就需要我们自行安装。以目前仍广泛使用的WebLogic 12c (12.2.x) 为例它官方支持的是JDK 8。如果你想用JDK 11或17必须使用WebLogic 14c (14.1.x) 及以后的版本并且要仔细查阅官方支持矩阵。一个核心原则优先使用WebLogic安装包自带的JDK其次使用Oracle官方文档明确列出的兼容JDK版本和发行版。注意网络上有很多关于“jdk降级到17”的搜索这很可能是因为用户想在老版本WebLogic上使用新JDK遇到了问题。我的建议是除非有不可抗拒的原因否则不要尝试这种不兼容的搭配。升级WebLogic版本往往是更稳妥的选择。2.2 JDK安装与“无污染”环境变量配置假设我们决定使用Oracle JDK 8u361一个长期支持版本来搭配WebLogic 12.2.1.4。安装过程本身很简单下载tar.gz或exe安装包解压或安装到指定目录例如/opt/java/jdk1.8.0_361。真正的关键在于环境变量的配置目标是“精准”和“隔离”。很多教程会教你修改全局的/etc/profile或~/.bashrc将JAVA_HOME和PATH设置成这个JDK。但这会污染服务器的全局环境如果这台服务器上还有其他需要不同版本JDK的应用就会产生冲突。WebLogic的最佳实践是在WebLogic专用的启动脚本中局部设置JDK环境。不过为了方便管理我们可以在用户级别进行配置。假设我们为WebLogic创建一个专用用户weblogic创建用户并登录sudo useradd -m -s /bin/bash weblogic sudo passwd weblogic su - weblogic编辑该用户的~/.bash_profile文件vi ~/.bash_profile在文件末尾添加以下内容# 设置WebLogic专用的JDK环境 export JAVA_HOME/opt/java/jdk1.8.0_361 export PATH$JAVA_HOME/bin:$PATH # 可选设置WebLogic安装目录方便后续使用 export WL_HOME/opt/oracle/middleware/wlserver这里的关键是PATH的设置$JAVA_HOME/bin:$PATH。这确保了当我们以weblogic用户登录时使用的java、javac命令一定来自我们指定的JDK优先级高于系统其他地方的JDK。使配置生效并验证source ~/.bash_profile java -version输出应明确显示为Oracle JDK 1.8.0_361。这一步验证至关重要它能避免后续安装过程中出现“Unsupported major.minor version”等经典错误。实操心得绝对不要使用root用户安装和运行WebLogic。这既是安全规范也能避免很多文件权限带来的诡异问题。如果服务器上已有其他JDK在安装WebLogic前务必用which java和java -version命令确认当前环境下的JDK是否是你准备的那个。我见过太多案例安装脚本报错最后发现是PATH里藏了一个不兼容的OpenJDK。对于Linux环境如果从“jdk镜像网站”下载请务必验证文件的SHA256校验和确保文件完整无误。3. WebLogic安装图形化与静默化WebLogic提供了图形化GUI和静默Silent两种安装模式。图形化适合初学者和单机环境静默化则是生产环境自动化部署的标准姿势。3.1 图形化安装按部就班的可视化向导获取安装包从Oracle官网下载适用于你操作系统如Linux x64的WebLogic安装包通常是一个fmw_12.2.1.4.0_wls_lite_generic.jar这样的jar文件。启动安装向导在图形化界面下切换到weblogic用户运行java -jar fmw_12.2.1.4.0_wls_lite_generic.jar如果是在无图形界面的服务器上可以通过SSH X11转发来显示界面但更推荐使用静默安装。跟随向导安装类型选择“独立WebLogic Server安装”即可这包含了管理服务器和被管服务器所需的所有组件。安装目录这就是ORACLE_HOME例如/opt/oracle/middleware。记住这个路径。JDK选择如果之前配置了正确的JAVA_HOME这里会自动检测到。务必确认这里选择的JDK是你计划使用的版本。安装摘要确认信息无误后开始安装。安装过程就是文件解压和配置通常不会有什么问题。安装完成后WL_HOME如/opt/oracle/middleware/wlserver就是WebLogic的主目录。3.2 静默安装生产环境的必修课静默安装依靠一个oraInst.loc文件和一个response_file响应文件。创建oraInst.loc这个文件指定了产品清单目录。# 创建目录 sudo mkdir -p /opt/oracle/oraInventory sudo chown -R weblogic:weblogic /opt/oracle/oraInventory # 创建并编辑文件 vi /tmp/oraInst.loc # 内容如下 inventory_loc/opt/oracle/oraInventory inst_groupweblogic创建响应文件wls_install.rsp你可以从安装包中解压出模板或参考以下关键内容创建vi /tmp/wls_install.rsp[ENGINE] Response File Version1.0.0.0.0 [GENERIC] DECLINE_AUTO_UPDATEStrue ORACLE_HOME/opt/oracle/middleware INSTALL_TYPEWebLogic Server MYORACLESUPPORT_USERNAME MYORACLESUPPORT_PASSWORD SECURITY_UPDATES_VIA_MYORACLESUPPORTfalse DECLINE_SECURITY_UPDATEStrue PROXY_HOST PROXY_PORT PROXY_USER PROXY_PWD COLLECTOR_SUPPORTHUB_URL其中ORACLE_HOME和INSTALL_TYPE是关键。执行静默安装命令java -jar fmw_12.2.1.4.0_wls_lite_generic.jar -silent \ -responseFile /tmp/wls_install.rsp \ -invPtrLoc /tmp/oraInst.loc-silent参数启动静默模式-responseFile和-invPtrLoc指定刚才创建的文件。安装完成后同样需要验证WL_HOME目录下的文件是否完整。注意事项静默安装时控制台不会有进度条只能通过查看生成的日志文件通常在/tmp/OraInstall时间戳来监控安装状态。看到The installation of Oracle Fusion Middleware 12c WebLogic Server completed successfully.才算成功。无论是哪种安装方式安装完成后不要急于创建域。先确保基础环境无误。4. 域Domain的创建与核心配置域Domain是WebLogic管理的基本单元。你可以把它理解为一个独立的、自包含的WebLogic服务器实例或集群的管理边界。一个域包含一个管理服务器AdminServer和零个或多个被管服务器Managed Server。4.1 使用配置向导Configuration Wizard创建域WebLogic提供了$WL_HOME/common/bin/config.shLinux或config.cmdWindows这个图形化配置向导工具。对于新手我强烈建议第一次使用图形化向导它能帮你建立起域的物理结构和逻辑关系的直观认识。启动向导以weblogic用户运行config.sh。选择模板选择“创建新域”模板就用默认的“WebLogic Server”即可它包含了基础服务。配置管理员账户这是最重要的一步。设置管理服务器的用户名和密码例如用户weblogic密码Welcome1。请务必使用强密码并牢记此密码这是你进入WebLogic控制台的钥匙。生产环境密码必须复杂。选择域模式与JDK域模式选择“生产模式”。开发模式会启用自动部署和一些宽松的安全设置而生产模式性能更好、安全性更高且启动时不要求输入用户名密码可通过boot.properties文件解决。JDK确保这里选中了你之前安装的JDK。配置数据库可选如果你的应用需要使用WebLogic内置的JDBC数据源可以在这里配置但更常见的做法是域创建完成后在控制台里配置。创建域指定域的位置如/opt/oracle/user_projects/domains/base_domain和域名如base_domain然后完成创建。创建完成后你的域目录结构就清晰了base_domain/ ├── bin/ # 启动停止脚本 ├── config/ # 核心配置目录 │ └── config.xml # 域的“大脑”所有配置的持久化文件 ├── lib/ # 域级别的库文件 ├── servers/ # 各服务器的运行时数据、日志 │ ├── AdminServer/ │ │ ├── logs/ # AdminServer日志 │ │ └── data/ │ └── ManagedServer1/ # 后续创建的被管服务器 └── security/ # 安全相关文件4.2 深入理解config.xml与启动机制域创建的核心产出物是config/config.xml文件。这个XML文件定义了域内所有的服务器、集群、服务如JDBC、JMS、安全配置等。任何通过WebLogic控制台或WLSTWebLogic Scripting Tool所做的配置更改最终都会同步到这个文件。启动管理服务器就是启动这个域的“大脑”。进入域目录下的bin文件夹执行./startWebLogic.sh第一次在生产模式下启动时它会要求你输入刚才创建的管理员用户名和密码。这显然不适合自动化运维。解决“weblogic 在linux 启动的时候 不想输入用户名和密码” 这就是boot.properties文件的用武之地。在管理服务器实例的security目录下例如base_domain/servers/AdminServer/security/创建一个名为boot.properties的文件usernameweblogic passwordWelcome1注意文件内容中的密码是明文的。当你第一次启动服务器后WebLogic会加密这个文件将其内容替换为加密后的密文。从此以后启动脚本就会自动读取这个加密文件完成认证无需手动输入。务必确保该文件的权限仅为weblogic用户可读chmod 600 boot.properties这是关键的安全措施。4.3 使用WLST进行静默建域对于需要自动化、重复创建域的环境如CI/CD流水线WLST是唯一选择。WLST是基于Jython的脚本工具可以编程式地操作WebLogic。下面是一个简单的WLST脚本示例create_domain.py用于静默创建域# 创建域 readTemplate(/opt/oracle/middleware/wlserver/common/templates/wls/wls.jar) # 设置管理员密码 cd(/Security/base_domain/User/weblogic) cmo.setPassword(Welcome1) # 设置域模式和生产模式下的JDK cd(/) set(ProductionModeEnabled, true) set(JavaHome, /opt/java/jdk1.8.0_361) # 写入域目录 writeDomain(/opt/oracle/user_projects/domains/auto_domain) # 关闭模板 closeTemplate() # 退出 exit()然后使用WLST执行这个脚本$WL_HOME/common/bin/wlst.sh create_domain.py这种方式干净、可重复、可版本化管理是高级运维的必备技能。5. 项目部署从WAR包到生产就绪域启动成功后通过http://localhost:7001/console即可访问WebLogic控制台。部署项目主要就在这里进行。5.1 控制台部署最直观的方式准备部署物将你的Java Web应用打包成标准的WAR文件例如myapp.war。确保它在其他Servlet容器如Tomcat上测试通过。上传与安装在控制台左侧“域结构”中点击“部署”。点击“安装”上传你的WAR文件。选择“将此部署安装为应用程序”。配置部署目标选择将应用部署到哪个或哪些服务器上AdminServer或具体的Managed Server。配置部署设置关键步骤部署计划通常不需要除非有特殊的数据源、JMS等资源需要绑定。部署后状态选择“活动状态”这样部署完成后应用立即启动。也可以先选“准备状态”稍后手动启动。服务器启动顺序可以设置一个顺序对于有依赖关系的应用有用。完成并启动检查摘要后完成。在部署列表中选中你的应用点击“启动”-“为所有请求提供服务”。此时你的应用应该可以通过http://localhost:7001/myapp访问了。5.2 自动部署与autodeploy目录对于开发环境WebLogic提供了更快捷的方式——autodeploy目录。只需将WAR文件复制到域目录下的autodeploy文件夹例如base_domain/autodeploy/管理服务器会自动检测、部署并启动该应用。同样删除文件会自动卸载更新文件会自动重新部署。但请注意autodeploy特性仅建议用于单服务器的开发环境绝对不要在生产环境中使用因为它缺乏版本控制、回滚机制和严格的流程管控。5.3 生产环境部署最佳实践版本化与回滚部署的WAR文件名应包含版本号如myapp-1.0.0.war。在控制台部署时可以先部署新版本到“准备状态”测试无误后再切换到“活动状态”。如果新版本有问题可以快速切回旧版本。分离部署目标永远不要将业务应用部署到管理服务器AdminServer上。AdminServer只用于管理域业务应用应部署到被管服务器Managed Server上。这有利于职责分离、性能隔离和安全。集群部署如果应用部署到集群WebLogic支持会话复制、负载均衡和高可用。在部署时选择集群作为目标即可。资源引用如果你的应用需要通过JNDI查找数据源、JMS连接工厂等资源务必在应用的web.xml或weblogic.xml中正确定义资源引用resource-ref并在WebLogic控制台中完成资源与JNDI名的全局绑定。6. 常见问题与排查技巧实录即使按照步骤操作也难免会遇到问题。下面是我总结的一些高频问题及排查思路。6.1 启动类问题问题现象可能原因排查步骤与解决方案java.lang.UnsupportedClassVersionErrorJDK版本不兼容。应用是用更高版本JDK编译的。1. 检查应用编译版本javap -verbose MyClass.class | grep major。2. 确认WebLogic使用的JDK版本setDomainEnv.sh中的JAVA_HOME是否支持该class版本。Error: Could not create the Java Virtual Machine.内存参数设置不当或JAVA_HOME指向错误。1. 检查setDomainEnv.sh或startWebLogic.sh中的JAVA_OPTIONS特别是-Xmx,-Xms。2. 确认JAVA_HOME环境变量指向有效的JDK目录。管理服务器启动后无法访问控制台端口无响应防火墙阻止或其他进程占用端口默认7001。1.netstat -tlnp | grep 7001查看端口占用。2.iptables -L或firewall-cmd --list-all查看防火墙规则。3. 检查服务器日志AdminServer.log是否有绑定端口失败的异常。启动时要求输入用户名密码但boot.properties已配置1. 文件路径错误。2. 文件权限过大。3. 密码加密失败。1. 确认boot.properties在servers/AdminServer/security/下。2. 检查文件权限是否为600。3. 检查文件内容首次启动后是否已被加密内容变为乱码。如果还是明文删除它启动时输入一次密码让WebLogic自动生成加密版。6.2 部署与运行时问题问题现象可能原因排查步骤与解决方案应用部署失败报ClassNotFoundException或NoClassDefFoundError应用依赖的库缺失。1. 检查WAR包内的WEB-INF/lib目录是否包含所有依赖jar。2. 检查是否将某些jar包放到了域级的lib目录DOMAIN_HOME/lib需要重启服务器才能生效。3. 检查WebLogic自身的模块依赖如某些老版本需要特定的javax包。应用能部署但访问时报404上下文根Context Root配置错误。1. 在控制台“部署”页面检查该应用的“上下文根”设置。2. 检查应用内weblogic.xml中的context-root配置。3. 默认情况下上下文根就是WAR文件名不含后缀。访问URL应为http://host:port/上下文根。数据源连接失败数据库驱动未安装、数据源配置参数错误、网络不通。1. 确认JDBC驱动jar如ojdbc8.jar已放入DOMAIN_HOME/lib目录并重启。2. 在控制台检查数据源的连接池配置URL、用户名、密码。3. 使用数据源配置页面的“测试”功能。4. 从WebLogic服务器尝试tnsping或sqlplus连接数据库。应用运行缓慢内存溢出应用存在内存泄漏或JVM堆内存设置过小。1. 监控JVM堆使用情况控制台-监视-性能。2. 分析GC日志需在JAVA_OPTIONS中开启-XX:PrintGCDetails -Xloggc:。3. 适当调大-Xmx参数但不要超过物理内存的70%。4. 使用jmap,jstack等工具分析内存快照和线程栈。6.3 日志你的第一道防线WebLogic的日志系统非常完善遇到问题一定要学会看日志。域日志(DOMAIN_HOME/servers/AdminServer/logs/AdminServer.log)记录管理服务器的生命周期事件和全局性信息。服务器日志(DOMAIN_HOME/servers/ServerName/logs/ServerName.log)每个服务器实例有自己的日志记录该服务器上应用部署、运行的具体信息。应用日志推荐使用Log4j2或SLF4J等框架将应用日志输出到独立的文件不要和WebLogic服务器日志混在一起。可以在weblogic.xml中配置container-descriptor来优先使用应用自带的日志框架。访问日志WebLogic可以配置记录HTTP访问日志对于分析请求流量和问题很有帮助。排查心法当出现问题时首先根据错误时间点去对应的服务器日志文件中搜索ERROR或Exception关键词。WebLogic的异常栈通常非常详细能直接定位到出错的类、方法和行数如果部署时包含了调试信息。结合应用的业务日志就能快速缩小排查范围。7. 进阶配置与性能调优浅谈当应用稳定运行后我们可能会考虑一些进阶配置来提升可靠性或性能。7.1 创建被管服务器Managed Server与集群单点的管理服务器不适合承载生产流量。我们需要创建被管服务器。在控制台创建“环境” - “服务器” - “新建”。指定服务器名、监听地址和端口如8001。配置Node Manager推荐Node Manager是一个守护进程可以远程启动、停止和监控被管服务器是实现高可用的基础。配置稍复杂需要在管理服务器和托管被管服务器的机器上分别配置。创建集群将多个被管服务器加入一个集群WebLogic会自动提供负载均衡和会话复制功能。在“环境” - “集群”中创建然后将服务器分配到集群。7.2 关键性能参数调优JVM堆内存在setDomainEnv.sh中修改USER_MEM_ARGS。生产环境建议-Xms和-Xmx设置相同避免运行时动态调整带来的性能波动。例如export USER_MEM_ARGS-Xms4096m -Xmx4096m -XX:UseG1GC。线程数WebLogic使用工作线程处理请求。在服务器配置的“调优”页签调整“最大线程数”。默认值25对于高并发应用可能不够。一个经验公式是线程数 (CPU核心数 * (1 平均等待时间/平均服务时间))。可以从100开始通过压测调整。连接池数据源连接池的“初始容量”、“最大容量”和“语句缓存大小”对数据库性能影响巨大。需要根据数据库能力和应用压力进行设置和监控。7.3 安全加固修改默认端口将管理控制台的默认7001端口和被管服务器的端口改为非标准端口。使用SSL为管理通道和生产通道启用SSL/TLS加密。定期更换密码定期更换weblogic用户和其他管理用户的密码。限制控制台访问通过防火墙策略只允许特定管理IP访问管理控制台端口。WebLogic的世界很深从安装部署到深度调优每一个环节都有大量的细节和最佳实践。这篇内容希望能为你打开一扇门理清从零到一的主干道。记住遇到问题多查官方文档Oracle Docs多分析日志在测试环境中大胆尝试你的经验值就会在这个过程中快速增长。
返回列表