# 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" + 管理 [![rhxOmV.jpg](https://s3.ax1x.com/2020/12/26/rhxOmV.jpg)](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 [![r49OgJ.jpg](https://s3.ax1x.com/2020/12/26/r49OgJ.jpg)](https://imgchr.com/i/r49OgJ) + 端口 [![r4CwPU.jpg](https://s3.ax1x.com/2020/12/26/r4CwPU.jpg)](https://imgchr.com/i/r4CwPU) + 部署和部署 [![r49c4S.jpg](https://s3.ax1x.com/2020/12/26/r49c4S.jpg)](https://imgchr.com/i/r49c4S) + 修改通道编码为utf-8 [![sEf20P.png](https://s3.ax1x.com/2021/01/06/sEf20P.png)](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编码 ## 达梦 [![r4Pny9.jpg](https://s3.ax1x.com/2020/12/26/r4Pny9.jpg)](https://imgchr.com/i/r4Pny9) ### 迁移 [![r4Plo6.jpg](https://s3.ax1x.com/2020/12/26/r4Plo6.jpg)](https://imgchr.com/i/r4Plo6) + FAQ 乱码解决:指定URL `jdbc:mysql://localhost:3306/meeting?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true` ### Mybatis的代码处理 [![r4iBu9.jpg](https://s3.ax1x.com/2020/12/26/r4iBu9.jpg)](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. 批量插入不能返回受影响记录数