LangChat Pro 完全支持信创环境部署,无硬件厂商限制。作为 Spring Boot 单体应用,仅需满足 Java 运行环境即可快速部署。
除了下面介绍的需要替换mybatis-plus相关的数据库集成依赖(根据信创要求)。本项目中还存在少量的代码是写死的select语句或者 where 条件语句实现的,也需要根据SQL语法要求进行适当的兼容
部署架构
基础环境要求
应用架构:
- 应用类型:Spring Boot 单体应用
- 运行环境:Java 17+
- 部署方式:JAR 包或 Docker 容器
基础中间件:
- 数据库:MySQL / 信创数据库
- 缓存:Redis
- 存储:本地文件系统或对象存储
系统兼容性
LangChat Pro 对硬件无特殊要求,支持国产化硬件平台,包括但不限于:
- 鲲鹏、飞腾、龙芯等国产 CPU
- 统信 UOS、麒麟等国产操作系统
- 国产服务器和存储设备
信创数据库支持
支持的数据库
LangChat Pro 基于 MyBatis Plus 框架,理论上底层支持以下所有数据库,只需引入对应数据库依赖即可切换:
MyBatis Plus 底层已实现对多种数据库的统一抽象,大部分数据库切换仅需修改依赖和配置文件即可。
重要提示:项目中存在极少量的自定义 SQL 查询脚本,切换数据库时可能需要根据目标数据库的语法进行适当调整。
主流数据库
| 数据库类型 | 版本支持 | 迁移难度 | 备注 |
|---|
| PostgreSQL | 9.6+ | 简单 | 开源关系型数据库 |
| MySQL | 5.7+ | 简单 | 默认数据库 |
| MariaDB | 10.2+ | 简单 | MySQL 开源分支 |
国产信创数据库
| 数据库类型 | 版本支持 | 迁移难度 | 备注 |
|---|
| 达梦数据库 | DM8+ | 简单 | 国产化首选 |
| 人大金仓 | KingbaseES | 简单 | 国产化数据库 |
| 高斯数据库 | GaussDB | 简单 | 华为云原生 |
| 南大通用 | GBase | 简单 | 国产化数据库 |
| 瀚高数据库 | HGDB | 简单 | 国产化数据库 |
| 神州通用 | Oscar | 简单 | 航天级数据库 |
| 虚谷数据库 | XuguDB | 简单 | 国产化数据库 |
| 优炫数据库 | UXDB | 简单 | 国产化数据库 |
| 星瑞格数据库 | Sinoregal | 简单 | 国产化数据库 |
| Vastbase | 100+ | 简单 | 基于开源数据库的国产化版本 |
| GoldenDB | 2.0+ | 简单 | 中兴分布式数据库 |
企业级数据库
| 数据库类型 | 版本支持 | 迁移难度 | 备注 |
|---|
| Oracle | 11g+ | 简单 | 企业级数据库 |
| SQL Server | 2012+ | 简单 | 微软数据库 |
| DB2 | 9.7+ | 简单 | IBM 数据库 |
| OceanBase | 2.0+ | 简单 | 蚂蚁金服分布式数据库 |
| GaussDB | 200+ | 简单 | 华为企业级数据库 |
嵌入式/轻量级数据库
| 数据库类型 | 版本支持 | 迁移难度 | 备注 |
|---|
| SQLite | 3.x | 简单 | 嵌入式数据库 |
| H2 | 1.4+ | 简单 | 内存数据库 |
| HSQL | 2.x | 简单 | 轻量级数据库 |
| Derby | 10.x | 简单 | Apache 嵌入式数据库 |
| DuckDB | 0.3+ | 简单 | 分析型嵌入式数据库 |
新型/大数据数据库
| 数据库类型 | 版本支持 | 迁移难度 | 备注 |
|---|
| ClickHouse | 1.1+ | 中等 | 列式数据库 |
| Phoenix | 4.x+ | 中等 | HBase SQL 层 |
| TDengine | 2.0+ | 中等 | 时序数据库 |
| RedShift | - | 中等 | AWS 数据仓库 |
其他数据库
| 数据库类型 | 版本支持 | 迁移难度 | 备注 |
|---|
| Sybase | 15+ | 简单 | 企业级数据库 |
| Firebird | 2.5+ | 简单 | 开源数据库 |
| Cubrid | 9.0+ | 简单 | 开源对象关系型数据库 |
| Goldilocks | 1.0+ | 简单 | 韩国数据库 |
| Informix | 12.x+ | 简单 | IBM 数据库 |
数据库迁移步骤
1. 配置文件修改
切换数据库时,需要修改 application.yml 中的 JDBC 连接配置。以下是不同数据库的配置示例:
MySQL 配置示例:
spring:
datasource:
username: root
password: 12345678
url: jdbc:mysql://127.0.0.1:3306/langchat_pro?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
druid:
keep-alive: true
PostgreSQL 配置示例:
spring:
datasource:
username: postgres
password: your-password
url: jdbc:postgresql://127.0.0.1:5432/langchat_pro
driver-class-name: org.postgresql.Driver
达梦数据库配置示例:
spring:
datasource:
username: LANGCHAT
password: your-password
url: jdbc:dm://localhost:5236/LANGCHAT
driver-class-name: com.dameng.DmDriver
Oracle 配置示例:
spring:
datasource:
username: langchat
password: your-password
url: jdbc:oracle:thin:@localhost:1521:ORCL
driver-class-name: oracle.jdbc.OracleDriver
人大金仓配置示例:
spring:
datasource:
username: SYSTEM
password: your-password
url: jdbc:kingbase8://localhost:54321/LANGCHAT
driver-class-name: com.kingbase8.Driver
SQL Server 配置示例:
spring:
datasource:
username: sa
password: your-password
url: jdbc:sqlserver://localhost:1433;databaseName=langchat_pro
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
2. 依赖包引入
根据目标数据库类型,在 pom.xml 中引入对应的 JDBC 驱动依赖。同时需要移除原有的 MySQL 驱动依赖。
主流数据库依赖:
<!-- PostgreSQL -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.1</version>
</dependency>
<!-- MySQL -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.33</version>
</dependency>
<!-- MariaDB -->
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>3.3.2</version>
</dependency>
国产信创数据库依赖:
<!-- 达梦数据库 -->
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver18</artifactId>
<version>8.1.3.14</version>
</dependency>
<!-- 人大金仓 -->
<dependency>
<groupId>com.kingbase8</groupId>
<artifactId>kingbase8</artifactId>
<version>8.6.0</version>
</dependency>
<!-- 高斯数据库 -->
<dependency>
<groupId>org.opengauss</groupId>
<artifactId>opengauss-jdbc</artifactId>
<version>5.0.0</version>
</dependency>
<!-- 瀚高数据库 -->
<dependency>
<groupId>com.highgo</groupId>
<artifactId>HgdbcJdbc42</artifactId>
<version>6.2.4</version>
</dependency>
企业级数据库依赖:
<!-- Oracle -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>21.11.0.0</version>
</dependency>
<!-- SQL Server -->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>12.4.2.jre11</version>
</dependency>
<!-- DB2 -->
<dependency>
<groupId>com.ibm.db2</groupId>
<artifactId>jcc</artifactId>
<version>11.5.9.0</version>
</dependency>
<!-- OceanBase -->
<dependency>
<groupId>com.oceanbase</groupId>
<artifactId>oceanbase-client</artifactId>
<version>2.4.12</version>
</dependency>
嵌入式/轻量级数据库依赖:
<!-- SQLite -->
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.44.1.0</version>
</dependency>
<!-- H2 -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.2.224</version>
</dependency>
<!-- HSQL -->
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>2.7.2</version>
</dependency>
3. 自定义 SQL 语法调整
重要:除本文件中说明需要手动修改的位置外,LangChat Pro 产品已完成对多种数据库的兼容支持,其他地方无需再修改。
项目中存在少量自定义 SQL 查询脚本,切换数据库时需要技术人员手动调整语法:
需要修改的文件:
langchat-auth/src/main/java/cn/langchat/auth/config/LcPermissionInterceptor.java
该文件中使用了 MySQL 语法的 SQL 语句,切换到其他数据库时需要根据目标数据库的语法规则进行相应调整。
建议在切换数据库前,先检查该文件中的 SQL 语句,并对照目标数据库的文档进行语法转换。常见需要注意的语法差异包括:
- 字符串引号(单引号 vs 双引号)
- 分页语法(LIMIT vs OFFSET)
- 日期函数(NOW() vs SYSDATE vs GETDATE())
- 布尔值(TRUE/FALSE vs 1/0)
- 字符串拼接(CONCAT vs || vs +)
4. 数据迁移
完成上述自定义 SQL 语法调整后,MyBatis Plus 的数据库适配层会自动处理大部分 SQL 兼容性问题,通常无需修改其他业务代码。
迁移工具推荐:
- 使用数据库厂商提供的迁移工具
- 通过 SQL 脚本进行结构迁移
- 利用数据同步工具进行数据迁移
部署注意事项
操作系统兼容性
重要限制:CentOS 7 及更低版本系统可能出现 glibc 版本兼容性问题。
推荐操作系统版本
| 操作系统 | 推荐版本 | 兼容性 |
|---|
| CentOS | 8.0+ | ✅ 完全兼容 |
| Red Hat | 8.0+ | ✅ 完全兼容 |
| Ubuntu | 20.04+ | ✅ 完全兼容 |
| 统信 UOS | 20+ | ✅ 完全兼容 |
| 麒麟 | V10+ | ✅ 完全兼容 |
解决方案
方案一:升级 glibc
# CentOS 7 升级 glibc(谨慎操作)
sudo yum update glibc glibc-common
方案二:使用兼容的 Docker 镜像
# 推荐使用基于 Ubuntu 22.04 的镜像
FROM eclipse-temurin:17-jdk-jammy
# 避免使用基于 Debian 11 的镜像
# FROM openjdk:17 # 不推荐
Docker 部署配置
推荐的 Dockerfile
FROM eclipse-temurin:17-jdk-jammy
# 设置工作目录
WORKDIR /app
# 复制应用文件
COPY langchat-pro.jar app.jar
# 创建非 root 用户
RUN groupadd -r langchat && useradd -r -g langchat langchat
USER langchat
# 暴露端口
EXPOSE 8080
# 启动应用
ENTRYPOINT ["java", "-jar", "app.jar"]
Docker Compose 示例
version: '3.8'
services:
langchat-pro:
build: .
ports:
- "8080:8080"
environment:
- SPRING_PROFILES_ACTIVE=prod
- SPRING_DATASOURCE_URL=jdbc:dm://db:5236/LANGCHAT
- SPRING_DATASOURCE_USERNAME=LANGCHAT
- SPRING_DATASOURCE_PASSWORD=your-password
depends_on:
- redis
- db
redis:
image: redis:7-alpine
ports:
- "6379:6379"
db:
image: dameng/dm8:latest
environment:
- DM_PASSWORD=your-password
ports:
- "5236:5236"
信创环境优化
性能调优
# application-prod.yml
server:
tomcat:
max-threads: 200
min-spare-threads: 10
accept-count: 100
spring:
datasource:
hikari:
maximum-pool-size: 20
minimum-idle: 5
connection-timeout: 30000
安全加固
- 网络安全:配置防火墙规则,限制访问端口
- 数据加密:启用数据库连接加密
- 访问控制:配置适当的用户权限
- 日志审计:启用操作日志记录
信创环境部署完成后,建议进行全面的功能测试和性能验证,确保系统稳定运行。