宝兰德 AppServer 部署方案(SpringBoot3)
Version: 3.7+ 版本(SpringBoot 3.x)
JDK版本:17
后台采用 war 包的打包方案,部署到宝兰德 BES AppServer。
本文针对 SpringBoot 3 版本(
jakarta.*命名空间、JDK17)。BES AppServer 的 Web 容器必须为 jakarta(Servlet 5.0+)版本,部署前请确认。
一、后台 JeecgBoot 项目打 war 包
所有改动集中在以下几个文件。
1、修改 jeecg-system-start/pom.xml
<!-- 由 jar 改为 war -->
<packaging>war</packaging>

移除或注释 spring-boot-maven-plugin:
<build>
<plugins>
<!--
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
-->
</plugins>
</build>

内嵌 Tomcat 设为 provided:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>

2、解决 Hibernate/JPA 冲突(关键)
BES 容器自带 Jakarta EE API(
jakarta.persistence.*),部署 Spring Boot 3 war 时会自动触发 JPA 配置。WAR 中的hibernate-core-5.6.7.Final.jar实现的是javax.persistence.*命名空间,与容器提供的jakarta.persistence.*不兼容,导致IncompatibleClassChangeError。
达梦 JDBC 驱动
DmJdbcDriver18不动,数据库连接不受影响。
① jeecg-boot-base-core/pom.xml — DmDialect 排除 Hibernate 传递依赖(防止重复打包):
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmDialect-for-hibernate5.0</artifactId>
<version>${dm8.version}</version>
<exclusions>
<exclusion>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
</exclusion>
<exclusion>
<groupId>javax.persistence</groupId>
<artifactId>javax.persistence-api</artifactId>
</exclusion>
</exclusions>
</dependency>

② JeecgSystemApplication.java — 禁用 JPA 自动配置:
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
@SpringBootApplication(exclude = {HibernateJpaAutoConfiguration.class})

JeecgBoot 使用 MyBatis-Plus,不需要 JPA。禁用 Hibernate JPA 自动配置后,
hibernate-corejar 可正常加载供 flowable 使用,但不会触发 JPA 初始化,从而避开命名空间兼容问题。
| 依赖 | 是否保留 | 原因 |
|---|---|---|
hibernate-core-5.6.7.Final.jar | ✅ 保留 | flowable 等模块直接依赖 Hibernate 类 |
javax.persistence-api | ❌ 排除 | 与 BES 的 jakarta.persistence 冲突 |
DmDialect-for-hibernate5.0.jar | ✅ 保留 | 达梦方言类,排除的只是其传递依赖 |
3、注释 WebSocketConfig 中的 ServerEndpointExporter
打开 jeecg-boot-base/jeecg-boot-base-core 下的 org.jeecg.config.WebSocketConfig,注释掉:
// @Bean
// public ServerEndpointExporter serverEndpointExporter() {
// return new ServerEndpointExporter();
// }
二、生产配置 application-prod.yml
- 本示例无项目请求前缀
spring:
profiles:
active: prod
datasource:
dynamic:
datasource:
master:
url: jdbc:mysql://<数据库IP>:3306/<库名>?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: <用户名>
password: <密码>
driver-class-name: com.mysql.cj.jdbc.Driver
data:
redis:
host: <redis 主机>
port: 6379
password: <密码>
jeecg:
path:
upload: /home/jeecg/upload
webapp: /home/jeecg/webapp
uploadType: local
SpringBoot 3 的 Redis 配置为
spring.data.redis.*(SpringBoot 2 为spring.redis.*)。
三、执行打包
- maven 勾选
prodprofile

- 按照顺序点击
clean和install

产物:jeecg-system-start/target/jeecg-system-start-{版本号}.war
四、BES AppServer 标准版安装
标准版仅一个 Java 进程,内存占用 ~1.5G,推荐 8G 以下内存服务器使用。企业版(DMS + Node + Instance 三进程)需要 12G+。
1、上传并解压
# 上传 bes11.0.1-standard-hd.zip 到 /opt
cd /opt
unzip bes11.0.1-standard-hd.zip -d bes11.0.1-standard-hd
cd bes11.0.1-standard-hd/bes11.0.1-standard-hd
2、修改配置(可选)
按需修改 config_install.cfg:
# 控制台端口(默认 1901)
ADMIN_PORT="1901"
# 应用端口
APP_PORT="18081"
3、执行安装
chmod +x install_standard_11.0.1.sh
sh install_standard_11.0.1.sh
安装日志输出控制台地址(
https://<IP>:1901/console)、用户名admin、随机密码,请妥善保存。
4、修复外网访问(Host 头校验)
标准版默认开启 Host 头安全校验,只允许安装时绑定的 IP 访问。通过外网 IP 访问时会被拒绝(HTTP 400),必须添加
HostHeaderPreventionFilter过滤器。
报错现象:
浏览器访问 https://<外网IP>:1901/console 显示空白页或 400 错误。
修复步骤:
vi /home/bes/BES11.1STD/lib/system/apps/console/WEB-INF/web.xml
找到 <!-- Http Header Security Filter --> 注释及其下方的 SecurityFilter 配置:
<!-- Http Header Security Filter -->
<filter>
<filter-name>SecurityFilter</filter-name>
<filter-class>com.bes.enterprise.webtier.filters.HttpHeaderSecurityFilter</filter-class>
<init-param>
<param-name>antiClickJackingOption</param-name>
<param-value>SAMEORIGIN</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SecurityFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
在 SecurityFilter 的 </filter-mapping> 之后、<servlet> 之前插入:
<filter>
<filter-name>hostHeaderPreventionFilter</filter-name>
<filter-class>com.bes.enterprise.console.filter.HostHeaderPreventionFilter</filter-class>
<init-param>
<param-name>isCheckHost</param-name>
<param-value>false</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>hostHeaderPreventionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
重启 BES 生效:
cd /home/bes/BES11.1STD/script && sh stopbes.sh && sh startbes.sh
验证:
# 服务器内 curl 测试
curl -k https://localhost:1901/console/
# 应返回控制台 HTML(HTTP 200),不再返回 400
5、安装后验证
ss -tlnp | grep -E '1901|18081'
控制台:https://<服务器IP>:1901/console
五、部署 war
WAR 包通常 300M+,通过控制台上传容易超时。建议先 SFTP 上传到服务器,再通过控制台本地文件部署。
1、上传 war 到服务器
# SFTP 上传到 /opt
/opt/jeecg-system-start-3.8.5.war
# 复制到 BES 仓库目录,控制台部署时可直接选择
cp /opt/jeecg-system-start-3.8.5.war /home/bes/BES11.1STD/repository/
2、通过控制台部署
- 进入「应用管理 → 常用应用」,点击「部署」

- 在文件选择器中直接选择仓库中的 war 文件(路径
/home/bes/BES11.1STD/repository/),无需再次上传;选中文件,点「下一步」

- 设置应用名称和应用前缀,设置成功之后点击「保存」
- 成功部署
六、访问系统
- 部署完成后前段可通过
http://[服务器IP]:18081/[应用前缀]访问。
- 登录页面
- 登录后首页
附录:常见问题
控制台上传 war 超时
原因:war 包较大(300M+),通过浏览器 HTTP 上传容易超时。
解决:先通过 SFTP 上传到服务器,再复制到 BES 仓库目录 /home/bes/BES11.1STD/repository/,控制台部署时直接选择本地文件。
浏览器访问控制台返回 400
原因:标准版 Host 头校验拦截了外网 IP。
解决:按本文"四、4"节添加 HostHeaderPreventionFilter 并重启。
控制台验证码不显示
原因:缺少字体依赖。
解决:yum install -y fontconfig dejavu-sans-fonts,重启 BES。
Hibernate/JPA 冲突
IncompatibleClassChangeError: org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider
does not implement jakarta.persistence.spi.PersistenceProvider
原因:WAR 包含 Hibernate 5(javax 命名空间),BES 容器提供 Jakarta EE API,Spring Boot 3 的 JPA 自动配置无法兼容二者。
解决:按本文"一、2"节修改两处(base-core 排除传递依赖 + 启动类排除 JPA 自动配置),hibernate-core 本身保留在 WAR 中以确保 flowable 等模块正常运行。