文章目录
- 一、部署东方通TongWeb
- 二、部署TongHttpServer
- 三、springboot多模块后端打包
- 四、vue前端打包(TongWeb部署)
- 五、TongWeb部署(前后端一样)
 
一、部署东方通TongWeb
-  上传安装包:TongWeb7.0.4.9_Enterprise_Linux.tar.gz 
-  解压:tar -xvf TongWeb7.0.4.9_Enterprise_Linux.tar.gz 
-  证书:提供的license 文件是企业版的,企业版支持以 war 包方式部署应用。 解压后,将license.dat 放在安装的根目录下 
-  进入bin目录启动:./startserverbg.sh 
-  访问页面:http://ip:9060/console ps:默认账号密码thanos/thanos123.com,首次登陆需要修改账号密码 

二、部署TongHttpServer
ps1:TongHttpServer实际上就是nginx在国产机上的替代品,除了名字意外,其他的原理跟nginx是一样的
pa2:nginx也可以直接部署在国产机上,且操作比部署linux上简单。即不需要安装gcc等插件,直接下载,解压,安装,编译即可!详情可见https://blog.csdn.net/weixin_40496191/article/details/121028500
-  由于我是拿linux验证的,国产机其实也差不多,我这里使用的安装包是:TongHttpServer_6.0.0.2_x86_64.tar.gz 
-  解压:tar -xvf TongHttpServer_6.0.0.2_x86_64.tar.gz 
-  将证书文件license.dat拷贝到TongHttpServer的解压文件夹里面 
-  在THS/bin目录下,执行命令查看license信息:./start.sh -l ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-awITfevp-1692188867573)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20230816202137909.png)]](https://img-blog.csdnimg.cn/35ef34df27ee4787ae1ef3bad3c00580.png) 
-  启动指令:./start.sh 
-  停止指令:./start.sh stop 
-  配置文件:/TongHttpServer/THS/conf/httpserver.conf 
-  使用:跟nginx的使用方法一样。相关反向代理直接在httpserver.conf,然后重启TongHttpServer即可! 
三、springboot多模块后端打包
-  需要改的配置 1)主要启动模块pom文件添加配置 <packaging>war</packaging>2)启动类添加SpringApplicationBuilder方法 @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(WebApplication.class); }剩下的就是解决bug 
-  遇到的坑1:在filter过滤器引入变量的时候,使用@Value导致引入的变量都为null ps:所有的filter类有涉及@Value的都要改,因为东方通中,filter加载在spring之前,都需要改成静态加载方式才能够读取到 public static String whiteUrl; @Value("${FormXssFilter.url}") public void setWhiteUrl(String whiteUrl) { FormXssFilter.whiteUrl=whiteUrl; }
-  遇到的坑2:遇到ZonedDate转换错误的,需要加下以下这个类 package com.ffcs.biyiict.config; import java.sql.*; import java.time.ZoneId; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.convert.converter.Converter; /** * String转ZonedDateTime,解决时间条件查询格式转换问题 * @author lym * */ @Configuration public class ZonedDateTimeConverter extends BaseTypeHandler<ZonedDateTime> { private static final Logger log = LoggerFactory.getLogger(ZonedDateTimeConverter.class); @Bean public Converter<String, ZonedDateTime> zonedDateTimeConvert() { return new Converter<String, ZonedDateTime>() { @Override public ZonedDateTime convert(String source) { /*根据需要修改时间格式与时区*/ DateTimeFormatter df = DateTimeFormatter .ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault()); ZonedDateTime date = null; try { date = ZonedDateTime.parse(source, df).withZoneSameInstant(ZoneId.of("UTC")); } catch (Exception e) { log.error("can not convert ZonedDateTime to Date",e.getMessage()); } return date; } }; } @Override public void setNonNullParameter(PreparedStatement ps, int i, ZonedDateTime parameter, JdbcType jdbcType) throws SQLException { // 将 ZonedDateTime 转换为适当的数据库类型并设置参数 ps.setObject(i, parameter.toLocalDateTime()); } @Override public ZonedDateTime getNullableResult(ResultSet rs, String columnName) throws SQLException { // 从结果集中获取适当的数据库类型并转换为 ZonedDateTime Timestamp value = rs.getTimestamp(columnName); return value != null ? value.toLocalDateTime().atZone(ZoneId.systemDefault()) : null; } @Override public ZonedDateTime getNullableResult(ResultSet rs, int columnIndex) throws SQLException { Timestamp value = rs.getTimestamp(columnIndex); return value != null ? value.toLocalDateTime().atZone(ZoneId.systemDefault()) : null; } @Override public ZonedDateTime getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { Timestamp value = cs.getTimestamp(columnIndex); return value != null ? value.toLocalDateTime().atZone(ZoneId.systemDefault()) : null; } }
-  遇到的坑3:报错:Caused by:com.mysq1.cj . jdbc.exceptions ,Mysq1DataTruncation: Data truncation: Incorrect datetime value:‘ox. xDNxz0lxl5sr ox1.xlIjava. tiom …erlx2E5] oxe4 xEBA ×xl5 1YxBE2 xlNC x1.xoxpwkxl xlb6 xOlx0xO7xEElx09.xO1x7x03-0fFxlO \x’ for colu… ps:若是应用用到的库是 mysql 的,需要更改驱动的版本才用正常运行,原先的版本是8.0.22,改成8.0.30 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.30</version> </dependency>
-  遇到的坑4:由于是多模块的,我的system模块重写了jar代码,主模块引入了system模块。发现,以jar的方式引入system模块,会导致重写的类失效 1)修改system的pom,改成war打包方式,避免重写类无效 <packaging>war</packaging>2)非server模块的其他模块,有引用system模块的,统一加上provided,这样子打包的时候就不会打包system模块 <dependency> <groupId>com.xx.xx</groupId> <artifactId>system</artifactId> <version>1.0.0</version> <scope>provided</scope> </dependency>3)修改主模块引入system的方式 <dependency> <groupId>com.xx.xx</groupId> <artifactId>system</artifactId> <version>1.0.0</version> <type>war</type> <exclusions> <exclusion> <groupId>*</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency> <!-- 添加 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <overlays> <overlay> <groupId>com.xx.xx</groupId> <artifactId>system</artifactId> </overlay> </overlays> </configuration> </plugin>4)打包的时候,system模块需要先install打一个jar包在target,再install打一个war包到target下,否则有可能报错类找不到 5)然后全局package即可 6)如果还是不行,可能是idea缓存问题,删除.dea文件,重新加载项目 
-  遇到的坑5:项目里面的非pom管理的jar包,无法读取,需要在主模块的pom加上以下这串 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-dependencies</id> <phase>compile</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <includeScope>system</includeScope> <outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/lib</outputDirectory> </configuration> </execution> </executions> </plugin>
-  遇到的坑6:存在一些写法,比如public static String xxx= env.getProperty(“xxx”);这种写法可能在java -jar启动的时候正常,但是放在东方通导致null。 因为放入东方通后,spring的加载顺序发生了一些变化。导致env可能获取不到,所以触发了异常。这种情况有两种解决办法 1)使用@value+static静态化加载yml环境变量参数 2)配置参数直接使用final修饰,这样子在编译的时候,就可以初始化yml环境变量参数 
-  报错Request header is too large 原因:springboot项目里面可能已经设置了max-http-header-size,并且没有报错,但是部署到东方通却报错了。这是因为我们springboot设置的这个参数是针对于springboot内置tomcat的,部署到东方通后将不再使用内置的tomcat,所以无效。 正确的做法是在东方通界面上的"虚拟主机管理"和"HTTP通道管理"都配置以下两个参数即可 maxPostSize -1 maxHttpHeaderSize 102400![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HLWORN94-1692188867573)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20230816201053050.png)]](https://img-blog.csdnimg.cn/ea5a567cd8c249218a5d97fa0426c6c1.png) 
四、vue前端打包(TongWeb部署)
ps:这种打包方式是针对于TongWeb部署的,如果是nginx或者TongHttpServer部署,跟普通服务器部署方式一样,打个dist包上传解压即可!
-  npm run build 得到 dist 
-  dist 文件夹里面,添加文件夹和文件 1)创建文件夹:WEB-INBF 2)进入WEB-INBF创建文件rewrite.config RewriteRule ^/index\.html$ - [L] RewriteCond %{REQUEST_PATH} !-f RewriteRule (.*) /index.html [L]
-  进入 dist,打开 cmd,运行 jar -cvf dist.war * 得到 dist.war 
-  前端一般不会遇到什么bug,直接将dist.war部署上去即可 
五、TongWeb部署(前后端一样)
-  参数设置 ps:这里的参数是部署到当前东方通的所有项目共用,可酌情修改,也可以不动 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ui6ypdaL-1692190319626)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20230816203341541.png)]](https://img-blog.csdnimg.cn/3595bcc92df74a379ceaacf03414ab38.png) 
-  创建主机 ps:建议一个应用一个主机,便于区分,参数酌情填写即可 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BBqbULYv-1692190319628)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20230816203426260.png)]](https://img-blog.csdnimg.cn/d72bfe219817417da58c9e3aef0e7611.png) ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WHwvlTLg-1692190319628)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20230816203751474.png)]](https://img-blog.csdnimg.cn/b4d5a09d144d425e9b817960984c18ce.png) 
-  创建HTTP通道管理 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-noyWLmc3-1692190319629)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20230816203709113.png)]](https://img-blog.csdnimg.cn/16d7c22bf28d49ceb033160b4f77b6b8.png) ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jWfVTOPD-1692190319630)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20230816203834620.png)]](https://img-blog.csdnimg.cn/79497d925229429380088f8dd989d31c.png) 然后一直下一步,参数自己看着修改,直到最后一步 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KWrUl5a3-1692190319630)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20230816203934114.png)]](https://img-blog.csdnimg.cn/41015f0798594448ac1d36d0e1e7ef6b.png) 创建完毕后,需要再重新修改 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dXb9P9Of-1692190319631)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20230816204018417.png)]](https://img-blog.csdnimg.cn/64070f8b61344c8b8590681ec8bd7cb1.png) 根据自己项目实际情况进行勾选,然后保存即可! ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PDzFE60q-1692190319632)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20230816204046215.png)]](https://img-blog.csdnimg.cn/3a77d639f57c4e88901cca99173bd685.png) 
-  设置服务器文件路径 ps:主要是为了部署项目的时候,文件可以直接从服务器指定路径进行勾选 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TgY1IBmJ-1692190319632)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20230816204345975.png)]](https://img-blog.csdnimg.cn/e49d02dc527f4c05871a5f57fc5c36b2.png) 
-  部署项目 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tr0Kyixy-1692190319633)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20230816204131279.png)]](https://img-blog.csdnimg.cn/768828707d9843cc99a7f8f647060aec.png) 1)上传文件,选择服务器的话就默认从上一步选择的路径里面,选择底下的文件) 
 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JQIN7spo-1692190319633)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20230816204845279.png)]](https://img-blog.csdnimg.cn/da61a1d676b84ee0999fe8bd03ce923f.png) 
 2)设置前缀
  
 3)选择主机
  
 4)完成
 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Oi7flhhT-1692190319635)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20230816205043869.png)]](https://img-blog.csdnimg.cn/046e1bd81e32472ba34a2780ba966e24.png) 
-  部署结束后,直接使用刚刚设置的端口进行测试访问即可!!! 



















