Weblogic 12C部署Maven项目EAR包后自动执行bash脚本的方案咨询
Weblogic 12C 部署EAR后自动执行配置脚本实现方案
以下是3种可落地的实现方式,均可以解决手动执行脚本遗漏的问题:
方案1:基于应用生命周期监听实现(推荐,完全嵌入EAR包)
该方案不需要调整现有部署流程,所有逻辑都打包在EAR内,适配Weblogic原生机制:
- 如果你的EAR包中已有Web模块,直接在Web模块中实现
ServletContextListener接口,重写contextInitialized方法;如果没有Web模块,新增一个轻量空Web模块即可。contextInitialized方法会在应用部署完成、状态转为活跃后自动触发。 - 将3个配置脚本放到EAR包的
APP-INF/scripts自定义目录下,在Listener的初始化逻辑中读取脚本路径,调用系统进程执行。 - 核心注意点:4节点集群环境必须做幂等控制,避免脚本在多个节点重复执行。可以通过分布式锁(数据库/Redis)、判断当前节点是否为集群首节点等逻辑实现。
- 提前给Weblogic进程运行用户授予脚本执行权限,避免权限不足问题。
- 示例代码参考:
import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class PostDeployScriptRunner implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { // 集群首节点判断逻辑,需根据自身业务实现 if (isClusterMasterNode()) { try { // 按顺序执行3个脚本,脚本路径可从ServletContext中读取EAR内的相对路径 Runtime.getRuntime().exec("sh " + getScriptPath("script1.sh")); Runtime.getRuntime().exec("sh " + getScriptPath("script2.sh")); Runtime.getRuntime().exec("sh " + getScriptPath("script3.sh")); } catch (Exception e) { // 异常处理逻辑,可增加告警通知部署失败 e.printStackTrace(); } } } @Override public void contextDestroyed(ServletContextEvent sce) { // 应用销毁逻辑,不需要可留空 } }
- 最后在Web模块的
web.xml中配置该Listener,打包时一起打入EAR包即可。
方案2:基于Weblogic部署计划配置实现(无需修改应用代码)
如果不想改动应用代码,可以通过Maven打包配置嵌入部署计划实现:
- 在Maven的
weblogic-maven-plugin插件配置中添加post-deploy-command参数,配置脚本执行命令。 - 打包时插件会自动生成包含该钩子的部署计划文件,Weblogic部署时会在应用状态转为活跃后自动执行配置的命令。
注意:要读取EAR包内的脚本,可使用Weblogic的部署临时路径变量:
${DOMAIN_HOME}/servers/${SERVER_NAME}/tmp/_WL_user/<应用部署名>/<随机目录>/APP-INF/scripts/xxx.sh
方案3:基于WLST部署脚本整合实现(适配现有部署流程)
如果可以调整运维部署流程,可通过WLST脚本把部署和脚本执行合并为单步操作:
- 编写WLST脚本,逻辑为:执行EAR包部署 → 轮询所有集群节点的应用状态,确认全部转为ACTIVE → 调用3个配置脚本。
- 运维后续直接执行该WLST脚本即可完成全流程部署,无需单独执行配置脚本。
内容的提问来源于stack exchange,提问作者hamed.jahanyan
相关产品推荐
相关产品推荐

