上传安装包: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,首次登陆需要修改账号密码
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
启动指令:./start.sh
停止指令:./start.sh stop
配置文件:/TongHttpServer/THS/conf/httpserver.conf
使用:跟nginx的使用方法一样。相关反向代理直接在httpserver.conf,然后重启TongHttpServer即可!
需要改的配置
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
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部署上去即可