Skip to main content
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 查询脚本,切换数据库时可能需要根据目标数据库的语法进行适当调整。

主流数据库

数据库类型版本支持迁移难度备注
PostgreSQL9.6+简单开源关系型数据库
MySQL5.7+简单默认数据库
MariaDB10.2+简单MySQL 开源分支

国产信创数据库

数据库类型版本支持迁移难度备注
达梦数据库DM8+简单国产化首选
人大金仓KingbaseES简单国产化数据库
高斯数据库GaussDB简单华为云原生
南大通用GBase简单国产化数据库
瀚高数据库HGDB简单国产化数据库
神州通用Oscar简单航天级数据库
虚谷数据库XuguDB简单国产化数据库
优炫数据库UXDB简单国产化数据库
星瑞格数据库Sinoregal简单国产化数据库
Vastbase100+简单基于开源数据库的国产化版本
GoldenDB2.0+简单中兴分布式数据库

企业级数据库

数据库类型版本支持迁移难度备注
Oracle11g+简单企业级数据库
SQL Server2012+简单微软数据库
DB29.7+简单IBM 数据库
OceanBase2.0+简单蚂蚁金服分布式数据库
GaussDB200+简单华为企业级数据库

嵌入式/轻量级数据库

数据库类型版本支持迁移难度备注
SQLite3.x简单嵌入式数据库
H21.4+简单内存数据库
HSQL2.x简单轻量级数据库
Derby10.x简单Apache 嵌入式数据库
DuckDB0.3+简单分析型嵌入式数据库

新型/大数据数据库

数据库类型版本支持迁移难度备注
ClickHouse1.1+中等列式数据库
Phoenix4.x+中等HBase SQL 层
TDengine2.0+中等时序数据库
RedShift-中等AWS 数据仓库

其他数据库

数据库类型版本支持迁移难度备注
Sybase15+简单企业级数据库
Firebird2.5+简单开源数据库
Cubrid9.0+简单开源对象关系型数据库
Goldilocks1.0+简单韩国数据库
Informix12.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 版本兼容性问题。

推荐操作系统版本

操作系统推荐版本兼容性
CentOS8.0+✅ 完全兼容
Red Hat8.0+✅ 完全兼容
Ubuntu20.04+✅ 完全兼容
统信 UOS20+✅ 完全兼容
麒麟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

安全加固

  1. 网络安全:配置防火墙规则,限制访问端口
  2. 数据加密:启用数据库连接加密
  3. 访问控制:配置适当的用户权限
  4. 日志审计:启用操作日志记录
信创环境部署完成后,建议进行全面的功能测试和性能验证,确保系统稳定运行。