当前位置: 首页 > news >正文

从安装到跑通第一个Demo:我的WebLogic 12c/14c避坑实录(Windows环境)

从安装到跑通第一个Demo:我的WebLogic 12c/14c避坑实录(Windows环境)

第一次在企业级项目中接触WebLogic时,那种既兴奋又忐忑的心情至今记忆犹新。作为Oracle旗下的重量级Java EE应用服务器,WebLogic在金融、电信等行业占据着不可替代的地位,但它的安装配置过程却远没有Spring Boot那样的"开箱即用"体验。本文将分享我在Windows环境下从零开始部署WebLogic 12c/14c的全过程,重点解析那些官方文档没有明确提示、却能让新手开发者抓狂的典型问题。

1. 环境准备:那些容易被忽视的前置条件

1.1 JDK版本的选择陷阱

WebLogic对JDK版本的兼容性要求严格到近乎苛刻。我最初随手安装了最新的JDK 17,结果在安装向导刚开始就遭遇了不支持的JDK版本错误。经过查阅文档才发现:

  • WebLogic 12c (12.1.3) 最高支持JDK 8
  • WebLogic 14c (14.1.1) 支持JDK 8和JDK 11

推荐组合方案

WebLogic版本推荐JDK版本下载来源
12.1.3JDK 8u281Oracle官网或OpenJDK发行版
14.1.1JDK 11.0.12AdoptOpenJDK或Amazon Corretto

提示:安装前务必执行java -version确认当前JDK版本,避免因系统存在多个JDK导致的环境混乱。

1.2 安装包的获取与验证

官方下载需要Oracle账户,且流程复杂。我推荐以下两种更便捷的方式:

  1. 通过Oracle eDelivery

    • 访问edelivery.oracle.com
    • 搜索"WebLogic Server"选择对应版本
    • 下载包含fmw_12.1.3.0.0_wls.jarfmw_14.1.1.0.0_wls.jar的安装包
  2. 使用Docker先行体验

    docker pull store/oracle/weblogic:12.2.1.3 docker run -d -p 7001:7001 --name wls12c store/oracle/weblogic:12.2.1.3

安装包下载完成后,务必校验SHA256值,避免因网络传输导致的文件损坏。

2. 安装过程中的"死亡陷阱"

2.1 路径中的隐藏杀手

执行安装命令时:

java -jar fmw_12.1.3.0.0_wls.jar

我遇到了第一个坑——安装路径包含中文。错误提示晦涩难懂:

The installer cannot proceed because the selected Oracle Home contains non-ASCII characters.

解决方案:

  • 使用全英文路径,如C:\Oracle\Middleware
  • 路径中不要有空格(避免使用Program Files
  • 最好不超过3层目录深度

2.2 安装类型的选择策略

在安装类型选择界面,新手常会困惑于三个选项:

  1. 典型安装:包含管理服务器、示例等,适合学习
  2. 定制安装:可选择性安装组件,推荐生产环境
  3. 精简安装:仅核心功能,适合资源受限环境

我的建议:

  • 开发环境选择典型安装,确保所有组件完整
  • 生产环境务必选择定制安装,移除不需要的示例应用

3. 配置向导中的关键决策点

3.1 节点管理器配置的玄机

配置向导中的节点管理器选项让许多新手困惑。简单来说:

  • 节点管理器相当于WebLogic实例的"看门狗"
  • 开发环境可以跳过(选择"无")
  • 生产环境建议配置,可实现:
    • 自动重启崩溃的服务
    • 远程管理多个服务器实例

配置示例:

节点管理器类型:Per Domain 监听地址:localhost 监听端口:5556

3.2 域创建的最佳实践

创建域时,以下几个设置需要特别注意:

  • 域位置:建议与Oracle Home分离,便于后续升级
  • 管理员账户:避免使用默认的weblogic/welcome1
  • 域模式
    • 开发模式:自动部署、快速启动
    • 生产模式:严格安全检查

推荐的安全配置:

# 在domain.properties中设置 admin.username=myadmin admin.password=ComplexPwd@123 start.mode=dev

4. 验证与第一个Demo部署

4.1 服务启动的排错指南

启动管理服务器时常见的两个问题:

问题1:端口冲突

Error: Port 7001 is already in use

解决方案:

netstat -ano | findstr 7001 taskkill /PID [占用进程ID] /F

问题2:内存不足

java.lang.OutOfMemoryError: PermGen space

修改startWebLogic.cmd

set MEM_ARGS=-Xms1024m -Xmx2048m -XX:MaxPermSize=512m

4.2 部署第一个War包的实战

以简单的HelloWorld应用为例:

  1. 打包应用:

    jar -cvf hello.war index.jsp WEB-INF/
  2. 通过控制台部署:

    • 访问http://localhost:7001/console
    • 导航至部署安装
    • 选择war文件,选择"作为应用程序安装"
  3. 验证访问:

    curl http://localhost:7001/hello/

遇到部署失败时,检查DOMAIN_HOME/servers/AdminServer/logs/AdminServer.log中的错误信息。

5. 性能调优与日常维护

5.1 JVM参数优化配置

生产环境推荐配置(修改setDomainEnv.cmd):

set MEM_ARGS=-Xms4g -Xmx4g -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1g set JAVA_OPTIONS=%JAVA_OPTIONS% -XX:+UseG1GC -XX:MaxGCPauseMillis=200

5.2 日志管理技巧

关键日志文件位置:

  • 域日志:DOMAIN_HOME/servers/AdminServer/logs/AdminServer.log
  • 访问日志:DOMAIN_HOME/servers/AdminServer/logs/access.log
  • 节点管理器日志:DOMAIN_HOME/nodemanager/nodemanager.log

推荐日志轮转配置:

<log-file> <file-name>logs/AdminServer.log</file-name> <rotation-type>byTime</rotation-type> <file-time-span>24</file-time-span> <number-of-files-limited>true</number-of-files-limited> <file-count>10</file-count> </log-file>

6. 开发环境高效工作流

6.1 热部署技巧

传统部署方式需要重启服务,开发效率低下。推荐以下替代方案:

  1. 自动部署目录

    mkdir DOMAIN_HOME/autodeploy cp hello.war DOMAIN_HOME/autodeploy/
  2. 使用weblogic.Deployer工具

    java weblogic.Deployer -adminurl t3://localhost:7001 -username myadmin -password ComplexPwd@123 -name hello -source hello.war -redeploy

6.2 IDE集成指南

在Eclipse中配置WebLogic服务器:

  1. 安装Oracle Enterprise Pack for Eclipse
  2. 新建服务器适配器:选择Oracle→WebLogic 12c
  3. 配置域目录:指向你的域位置
  4. 设置调试端口(默认8453)

IntelliJ IDEA配置更简单:

  • 在Run/Debug Configurations中添加WebLogic Server
  • 指定域路径和启动脚本位置
  • 启用"Update classes and resources on frame deactivation"

7. 生产环境注意事项

7.1 安全加固清单

必须修改的默认配置:

  • 修改控制台端口(非7001)
  • 禁用T3协议匿名访问
  • 启用管理通道(Administration Port)
  • 配置SSL证书

关键安全配置示例:

<security-configuration> <enforce-valid-basic-auth-credentials>true</enforce-valid-basic-auth-credentials> <allow-unencrypted-null-cipher>false</allow-unencrypted-null-cipher> </security-configuration>

7.2 高可用配置要点

典型集群配置步骤:

  1. 创建集群:环境→集群→新建
  2. 添加托管服务器:至少两个实例
  3. 配置会话复制:
    <cluster> <multicast-address>239.192.0.1</multicast-address> <multicast-port>7001</multicast-port> <replication-type>async</replication-type> </cluster>
  4. 配置负载均衡器(如Apache HTTPD)

8. 监控与性能分析

8.1 关键指标监控

使用WLST脚本获取性能数据:

connect('myadmin','ComplexPwd@123','t3://localhost:7001') serverRuntime() cd('JVMRuntime/AdminServer') heap = cmo.getHeapSizeCurrent() print 'Current heap: '+str(heap/1024/1024)+'MB'

推荐监控指标:

  • JVM堆内存使用率
  • 活动会话数
  • JDBC连接池等待数
  • 执行队列待处理请求

8.2 线程转储分析

获取线程转储:

jps -l # 获取WebLogic进程ID jstack -l <pid> > thread_dump.txt

分析工具推荐:

  • TDA(Thread Dump Analyzer)
  • VisualVM(带线程分析插件)
  • Eclipse Memory Analyzer(MAT)

9. 常见问题速查手册

9.1 启动类问题

症状:服务启动后立即退出
检查

  1. 查看DOMAIN_HOME/servers/AdminServer/logs/AdminServer.out
  2. 确认JDK版本兼容性
  3. 检查config.xml是否有语法错误

9.2 部署失败排查

典型错误weblogic.application.ModuleException
排查步骤

  1. 检查war包完整性:jar -tvf hello.war
  2. 查看应用特定日志:DOMAIN_HOME/servers/AdminServer/logs/hello.log
  3. 验证weblogic.xml配置:
    <container-descriptor> <prefer-web-inf-classes>true</prefer-web-inf-classes> </container-descriptor>

10. 进阶资源推荐

10.1 官方文档精要

必读文档:

  • 《WebLogic Server Administration Console Online Help》
  • 《Developing Applications for Oracle WebLogic Server》
  • 《Performance and Tuning for Oracle WebLogic Server》

快速访问方式:

# 本地文档(安装后可用) start chrome http://localhost:7001/console-help

10.2 社区资源

优质技术博客:

  • Oracle WebLogic Team Blog
  • Middleware Magic
  • WebLogic Tips & Tricks

实用工具集合:

  • WLST Script Generator:自动化管理脚本生成
  • WebLogic Maven Plugin:集成部署到构建流程
  • Jenkins WebLogic Deploy Plugin:CI/CD集成

在最近的一个金融项目中,我们团队花了三天时间才解决了一个诡异的类加载问题——根本原因是WebLogic和应用的SLF4J版本冲突。这个经历让我深刻体会到,掌握WebLogic的类加载机制(特别是APP-INF/libLIB-INF/lib的区别)和学会分析PreferWebInfClasses参数的重要性。

http://www.gsyq.cn/news/1490562.html

相关文章:

  • 无人机电力巡检图像数据集 | 输电线路故障智能识别 深度学习目标检测数据集实战
  • 技能中台:大模型落地最后一公里,小白程序员必备收藏指南
  • 从‘数毛党’到‘肉眼党’:SRGAN的感知损失是如何改变超分辨率游戏规则的?
  • 三大AI主流模型怎么选?选对场景,比盲目订阅更省钱
  • 保姆级教程:在Ubuntu 22.04上为RK3588 Android12 SDK搭建私有Git仓库(含Gitolite权限管理)
  • 告别默认证书:为你的VMware Horizon 8连接服务器部署自定义CA证书全流程
  • 别再复制粘贴路径了!一个更稳的PHP环境变量配置思路(附PowerShell与CMD报错分析)
  • 2026年耐腐蚀的江苏pph弯头管件/江苏pph四通管件厂家综合对比分析 - 品牌宣传支持者
  • 别再只用RDP了!用Horizon发布RDS应用池,实现安全可控的软件共享
  • 为什么你写了100篇文章,却没带来客户?
  • 告别一问一答:用GD32F405RGT6的SPI从机中断模式,实现高效数据接收与响应
  • 厦门特产店实力排行:厦门美食店、闽南姜母鸭、黄厝网红打卡小吃、厦门伴手礼、厦门姜母鸭伴手礼、厦门姜母鸭小吃、厦门姜母鸭特产选择指南 - 优质品牌商家
  • 用COMSOL复现经典:一杯水的自然对流仿真,从模型选择到后处理全流程解析
  • 别再只盯着JVM了!实战配置JMX Exporter精准监控Tomcat连接池与业务MBean
  • 告别官方依赖:手把手教你为RK3588 Android12 SDK搭建私有Repo镜像服务器(含Gitolite权限管理)
  • 基于STM32+超声波+舵机雷达测距可视化系统
  • 告别‘神秘失踪’:用电压比较器LM393给你的嵌入式设备做个掉电‘遗言’电路
  • spring boot_04@Bean扫描+@Bean注册
  • 你的第一个高性能WebServer雏形:用epoll实现单线程Reactor模型(ET模式详解)
  • Horizon 8连接服务器证书配置避坑指南:从AD CS部署到模板权限的那些细节
  • 别再死记硬背了!用‘相亲匹配’的故事5分钟搞懂Transformer里的Q、K、V
  • 扫地机器人全通信方式详解 - SPI(Serial Peripheral Interface)
  • 2026年6月知名的民用船舶加工厂家推荐,船舶舵叶结构件/核电安全设备/分离压力容器/工程民用船舶,民用船舶厂家有哪些 - 品牌推荐师
  • 从《柯南》变声器到小黄人:手把手教你用Python实现实时变调(附WSOLA代码)
  • GritLM:用一个 LLM 既做 embedding 又做生成
  • 2026年6月目前优秀的不锈钢板现货厂家推荐,不锈钢板定制厂家,质量上乘,品质有保障的钢板 - 品牌推荐师
  • 超越QFIL GUI:命令行dump高通设备eMMC全分区的实战与参数详解
  • 告别卡顿!手把手教你将TUM RGBD的tgz包转成30Hz流畅ROS Bag(附Python脚本)
  • 从原理图到数据:手把手教你用STM32同时读取多个DS18B20的温度
  • 智谱清言粘贴到 word 格式混乱难题破解,AI 导出鸭实现版式精准还原与稳定输出