# chinese-springboot
**Repository Path**: yzd_org/chinese-springboot
## Basic Information
- **Project Name**: chinese-springboot
- **Description**: 🔥🔥🔥国产化适配金蝶容器(AAS)
- **Primary Language**: Unknown
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 12
- **Forks**: 7
- **Created**: 2021-03-12
- **Last Updated**: 2025-11-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 国产化适配经验总结
[TOC]
本文通过实际的实践经验,总结出了服务端 `SpringBoot` 国产化适配的注意事项
---
## 国产化适配清单
+ 金蝶AAS V9.0
+ 东方通tongweb 7
+ 达梦DM8 V8.1.1.126
+ 统信 uos 2
## 金蝶AAS适配
### 常见配置和问题
+ jvm
> 编辑 `%domian_home%/bin/startapusic`,搜索`MEMORY_JVMOPTS`
> MEMORY_JVMOPTS="-Xms512m -Xmx1024m -XX:MaxPermSize=256m"
+ 请求
AAS默认是将 `DELETE,PUT,TRACE,OPTIONS` 这四个请求方式禁用了.
>编辑 `%domian_home%/config/vm.options`,搜索`apusic.http.disabledMethods`,进行注释
> apusic.http.disabledMethods=DELETE,PUT,TRACE,OPTIONS
+ 端口
> 编辑 `%domian_home%/config/apusic.conf`,搜索`Port`
> ATTRIBUTE NAME="Port" VALUE="6888"
+ 管理
[](https://imgchr.com/i/rhxOmV)
+ 后台启动和停止
在`./startapusic`其后面加入“&”即可,停止通过杀进程的方式
### 项目适配
+ 排除内嵌tomcat
```xml
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-tomcat
```
+ 打成war
```xml
war
```
+ 修改启动类,并重写初始化方法
```java
public class WebApplication extends SpringBootServletInitializer {
修改启动类,继承 SpringBootServletInitializer 并重写 configure 方法
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
System.out.println("======WebApplication====start==========");
return builder.sources(new Class[]{WebApplication.class});
}
}
```
+ 注入websoket
```java
@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
}
```
+ 添加serverlet依赖
```xml
javax.servlet
javax.servlet-api
3.0.1
provided
javax.servlet
jstl
provided
```
+ 配置文件解析器
```java
/**
* 金蝶文件无法上传时使用,<注意:非国产化注入,文件无法上传>
* @return MultipartResolver
*/
@Bean(name = "multipartResolver")
@Profile({"uos", "dm"})
public MultipartResolver multipartResolver() {
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
resolver.setDefaultEncoding("UTF-8");
// resolveLazily属性启用是为了推迟文件解析,以在在UploadAction中捕获文件大小异常
resolver.setResolveLazily(true);
resolver.setMaxInMemorySize(40960);
// 上传文件大小 100M 100*1024*1024
resolver.setMaxUploadSize(100 * 1024 * 1024);
return resolver;
}
```
注意:项目未使用redis但引入redis依赖时,AAS启动将报错
## 东方通tongweb
### 常见配置和问题
+ jvm
[](https://imgchr.com/i/r49OgJ)
+ 端口
[](https://imgchr.com/i/r4CwPU)
+ 部署和部署
[](https://imgchr.com/i/r49c4S)
+ 修改通道编码为utf-8
[](https://imgchr.com/i/sEf20P)
或
位置:`TongWeb7.0\conf\tongweb.xml`,搜索以下关键字将`GBK`修改为`utf-8`
```xml
uri-encoding="GBK"
parameter-encoding="GBK"
response-encoding="GBK"
```
### 项目适配
+ 打成war
```xml
war
```
+ 修改启动类,并重写初始化方法
```java
public class WebApplication extends SpringBootServletInitializer {
修改启动类,继承 SpringBootServletInitializer 并重写 configure 方法
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
System.out.println("======WebApplication====start==========");
return builder.sources(new Class[]{WebApplication.class});
}
}
```
+ 添加serverlet依赖
```xml
javax.servlet
javax.servlet-api
3.0.1
provided
javax.servlet
jstl
provided
```
## 统信uos2
+ nginx中文文件无法下载
方式一:将文件名修改为英文
方式二:通过文件流方式下载
方式三:修改Nginx支持中文文件名
1. 确定服务器安装了UTF-8字符集
在命令行里输入env|grep LANG
如果显示en_US.UTF-8则说明已安装
2. 在nginx的配置文件中添加charset utf-8; 并使其生效
```java
server {
listen 80;
server_name localhost;
charset utf-8;
……
```
3. 重新以UTF-8方式上传文件,以Xftp举例
点击属性->选项->勾选使用UTF-8编码
## 达梦
[](https://imgchr.com/i/r4Pny9)
### 迁移
[](https://imgchr.com/i/r4Plo6)
+ FAQ
乱码解决:指定URL
`jdbc:mysql://localhost:3306/meeting?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true`
### Mybatis的代码处理
[](https://imgchr.com/i/r4iBu9)
### SQL适配
1. 模式名+表名 (注意大写模式名)
```sql
```
2. 达梦如果设置了某个列为主键自增,那么 `insert` 语句就不能指定主键值
正例:
```sql
insert into "MEETING".meet_ballot (gmt_create, gmt_modified,
meet_id, issue_id, start_time,
interval_time, end_time, ballot_status,
is_anonymous, corp_id)
values ( #{gmtCreate,jdbcType=TIMESTAMP}, #{gmtModified,jdbcType=TIMESTAMP},
#{meetId,jdbcType=BIGINT}, #{issueId,jdbcType=BIGINT}, #{startTime,jdbcType=TIMESTAMP},
#{intervalTime,jdbcType=INTEGER}, #{endTime,jdbcType=TIMESTAMP}, #{ballotStatus,jdbcType=CHAR},
#{isAnonymous,jdbcType=BIT}, #{corpId,jdbcType=VARCHAR})
```
反例:
```sql
insert into meet_ballot (id, gmt_create, gmt_modified,
meet_id, issue_id, start_time,
interval_time, end_time, ballot_status,
is_anonymous, corp_id)
values (#{id,jdbcType=BIGINT}, #{gmtCreate,jdbcType=TIMESTAMP}, #{gmtModified,jdbcType=TIMESTAMP},
#{meetId,jdbcType=BIGINT}, #{issueId,jdbcType=BIGINT}, #{startTime,jdbcType=TIMESTAMP},
#{intervalTime,jdbcType=INTEGER}, #{endTime,jdbcType=TIMESTAMP}, #{ballotStatus,jdbcType=CHAR},
#{isAnonymous,jdbcType=BIT}, #{corpId,jdbcType=VARCHAR})
```
3. 数据库连接务必设置IP(这样能避免防火墙和达梦数据库的隔离策略导致的很多问题)
4. 达梦不支持函数: `LAST_INSERT_ID()`
5. 达梦日期时间函数适配
`DATE_SUB(NOW(), INTERVAL 1 MONTH) --> NOW() - INTERVAL '1' MONTH`
6. 不能使用关键字和保留字作为列名
7. 批量插入不能返回受影响记录数