跳到主要内容

宝兰德 BES AppServer 内嵌部署方案(可执行 JAR)

适用工程:jeecg-boot

JeecgBoot:3.9.3,Spring Boot:4.1.0,JDK:17

BES:11.0-SP5-BN001.001,BES Spring Boot Starter:4.x(其 POM 基于 Spring Boot 4.0.6)

部署方式:可执行 JAR,使用 BES 替换 Spring Boot 默认内嵌 Web 容器

一、解压 BES Spring Boot 依赖包

将宝兰德提供的压缩包解压到一个不含中文的目录。本文以 Windows 为例,假设解压后的目录为:

C:\Users\Administrator\Downloads\BES-APPSERVER-SPRINGBOOT

进入该目录后应能看到宝兰德原包自带的以下文件和目录:

  • lib:BES JAR 包;
  • poms:对应的 Maven POM;
  • installlib.bat:将全部 BES 依赖安装到本机 Maven 仓库;
  • installlib.sh:Linux 安装脚本;
  • deploylib.batdeploylib.sh:发布到 Maven 私服的脚本,本地验证不使用;
  • patch:补丁说明。

本文只使用宝兰德原包自带的 installlib.bat,不需要创建或修改安装脚本。

二、检查 Java 和 Maven 环境

打开一个新的 PowerShell 窗口,执行:

java -version
mvn -version

检查结果应满足:

  • java -version 的主版本为 17;
  • mvn -version 能正常输出 Maven 版本;
  • mvn -version 中的 Java version 也是 17。

如果提示“mvn 不是内部或外部命令”,需要先配置 Maven 环境变量,再重新打开 PowerShell:

MAVEN_HOME = Maven 解压目录
Path 增加 = %MAVEN_HOME%\bin

如需指定 Maven 本地仓库,可编辑 Maven 安装目录下的 conf/settings.xml,在 <settings> 内配置:

<localRepository>D:\maven</localRepository>

该配置是可选的;未配置时,Maven 默认使用 %USERPROFILE%\.m2\repository

三、运行宝兰德原厂安装脚本

确认 mvn -version 正常后,在 PowerShell 中执行:

Set-Location -LiteralPath 'C:\Users\Administrator\Downloads\BES-APPSERVER-SPRINGBOOT'
cmd.exe /c installlib.bat

两条命令需要分别执行。必须先进入 BES 解压目录,因为原厂脚本通过当前目录查找 libpoms

脚本会依次安装 13 个 BES 组件。每个组件都应输出:

info: install com.bes.appserver:组件名称:11.0-SP5-BN001.001 success.
  • 示意图

如果出现 failed,打开 BES 解压目录下的 install.log,以日志中最后一个 [ERROR] 为准排查。不要继续修改 JeecgBoot 的 POM。

四、修改 JeecgBoot 启动模块

编辑文件:

jeecg-module-system/jeecg-system-start/pom.xml

<dependencies> 内增加:

<!-- 宝兰德 BES AppServer Spring Boot 4 内嵌容器 -->
<dependency>
<groupId>com.bes.appserver</groupId>
<artifactId>bes-lite-spring-boot-4.x-starter</artifactId>
<version>11.0-SP5-BN001.001</version>
</dependency>

1、排除传递依赖中的 Tomcat

BES 用来替换 Spring Boot 默认内嵌 Tomcat。为避免最终可执行 JAR 同时包含两套 Servlet 容器,需要在启动模块引用的 jeecg-system-bizjeecg-module-demo 依赖中排除 spring-boot-starter-tomcat

<!-- SYSTEM 系统管理模块 -->
<dependency>
<groupId>org.jeecgframework.boot3</groupId>
<artifactId>jeecg-system-biz</artifactId>
<version>${jeecgboot.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>

<!-- DEMO 示例模块 -->
<dependency>
<groupId>org.jeecgframework.boot3</groupId>
<artifactId>jeecg-module-demo</artifactId>
<version>${jeecgboot.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>

排除应写在启动模块,不修改 jeecg-boot-base-core 公共模块,避免影响其他启动方式。

Spring Boot 4 的启动模块还引入了 spring-boot-starter-webmvc-test。该测试 starter 会传递引入 Tomcat,也需要增加排除:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webmvc-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>

因此启动模块一共需要在三处排除 spring-boot-starter-tomcatjeecg-system-bizjeecg-module-demospring-boot-starter-webmvc-test

2、为 Tomcat 专用配置增加生效条件

JeecgBoot 的 jeecg-system-biz 中存在以下 Tomcat 专用配置类:

src/main/java/org/jeecg/config/init/TomcatFactoryConfig.java

排除 Tomcat 后,需要增加 ConditionalOnClass,保证只有类路径中存在 Tomcat 时才加载该配置:

import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;

@Configuration
@ConditionalOnClass(name = "org.apache.catalina.connector.Connector")
public class TomcatFactoryConfig {

3、License 说明

BES 属于商业应用服务器,启动时需要加载与产品版本匹配的 License。本次使用宝兰德提供的 SpringBoot License:

C:\Users\Administrator\Downloads\BES-APPSERVER-SPRINGBOOT\bes.11.0_SpringBoot.lic.txt

JeecgBoot 采用内嵌方式启动时,将该文件复制到启动模块的 resources 目录,并将目标文件名统一改为 bes.lic.txt。请在 D:\jeecg-project\jeecg-boot-framework 项目根目录执行:

Copy-Item -LiteralPath 'C:\Users\Administrator\Downloads\BES-APPSERVER-SPRINGBOOT\bes.11.0_SpringBoot.lic.txt' `
-Destination '.\jeecg-module-system\jeecg-system-start\src\main\resources\bes.lic.txt'

该命令只复制 License,不会修改下载目录中的原文件。检查目标文件是否存在:

Test-Path -LiteralPath '.\jeecg-module-system\jeecg-system-start\src\main\resources\bes.lic.txt'

返回 True 后,需要重新执行后文的 Maven 打包命令。旧 JAR 是在加入 License 之前生成的,直接启动旧 JAR 仍会提示找不到有效 License。

打包完成后,可以检查 License 是否已经进入启动 JAR:

jar tf '.\jeecg-module-system\jeecg-system-start\target\jeecg-system-start-3.9.3.jar' |
Select-String 'BOOT-INF/classes/bes.lic.txt'

正常情况下应输出:

BOOT-INF/classes/bes.lic.txt

License 文件属于授权材料,请勿提交到公开代码仓库,也不要在文档、日志或截图中展示文件内容。如果仍提示 License 过期或不匹配,需要向宝兰德确认该 License 是否适用于 BES-APPSERVER-SPRINGBOOT-11.0-SP5-BN001.001

五、检查 JeecgBoot 的 Maven 依赖

在项目根目录执行:

Set-Location -LiteralPath 'JeecgBoot 后端工程根目录'
mvn `
-pl jeecg-module-system/jeecg-system-start `
-am `
-DskipTests `
dependency:tree `
"-Dincludes=com.bes.appserver:*"

预期依赖树至少包含:

com.bes.appserver:bes-lite-spring-boot-4.x-starter:jar:11.0-SP5-BN001.001
com.bes.appserver:bes-embed-core:jar:11.0-SP5-BN001.001
com.bes.appserver:bes-embed-annotations-api:jar:11.0-SP5-BN001.001
com.bes.appserver:bes-embed-el:jar:11.0-SP5-BN001.001
com.bes.appserver:bes-embed-websocket:jar:11.0-SP5-BN001.001

如果提示 Could not find artifact com.bes.appserver...,回到第二步重新安装,并检查 install.log

六、打包

仍在项目根目录执行。必须使用 clean package,避免上一次打包遗留的 Tomcat JAR 继续留在 target 中:

mvn `
-pl jeecg-module-system/jeecg-system-start `
-am `
-DskipTests `
clean package

打包成功后,可执行 JAR 位于:

jeecg-module-system\jeecg-system-start\target\jeecg-system-start-3.9.3.jar

八、启动验证

启动前保证 Jeecg 当前 profile 所需的 MySQL、Redis 等服务可访问。首次建议在前台运行,便于观察日志:

java -jar jeecg-system-start-3.9.3.jar

判断接入成功不能只看 Jeecg 的 Started JeecgSystemApplication,还应在启动日志中确认出现 BES、BES AppServerBesWebServer 或宝兰德版本信息,并且不要出现 Tomcat 已启动的信息。

  • 登录成功页面

  • 系统用户页面