springboot+vue项目在国产机东方通部署详细教程!

news2024/10/5 13:40:39

文章目录

    • 一、部署东方通TongWeb
    • 二、部署TongHttpServer
    • 三、springboot多模块后端打包
    • 四、vue前端打包(TongWeb部署)
    • 五、TongWeb部署(前后端一样)

一、部署东方通TongWeb

  1. 上传安装包:TongWeb7.0.4.9_Enterprise_Linux.tar.gz

  2. 解压:tar -xvf TongWeb7.0.4.9_Enterprise_Linux.tar.gz

  3. 证书:提供的license 文件是企业版的,企业版支持以 war 包方式部署应用。 解压后,将license.dat 放在安装的根目录下

  4. 进入bin目录启动:./startserverbg.sh

  5. 访问页面: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

  1. 由于我是拿linux验证的,国产机其实也差不多,我这里使用的安装包是:TongHttpServer_6.0.0.2_x86_64.tar.gz

  2. 解压:tar -xvf TongHttpServer_6.0.0.2_x86_64.tar.gz

  3. 将证书文件license.dat拷贝到TongHttpServer的解压文件夹里面

  4. 在THS/bin目录下,执行命令查看license信息:./start.sh -l

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-awITfevp-1692188867573)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20230816202137909.png)]

  5. 启动指令:./start.sh

  6. 停止指令:./start.sh stop

  7. 配置文件:/TongHttpServer/THS/conf/httpserver.conf

  8. 使用:跟nginx的使用方法一样。相关反向代理直接在httpserver.conf,然后重启TongHttpServer即可!

三、springboot多模块后端打包

  1. 需要改的配置

    1)主要启动模块pom文件添加配置

    <packaging>war</packaging>
    

    2)启动类添加SpringApplicationBuilder方法

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(WebApplication.class);
    }
    

    剩下的就是解决bug

  2. 遇到的坑1:在filter过滤器引入变量的时候,使用@Value导致引入的变量都为null

    ps:所有的filter类有涉及@Value的都要改,因为东方通中,filter加载在spring之前,都需要改成静态加载方式才能够读取到

    public static String whiteUrl;
    
    @Value("${FormXssFilter.url}")
    public void setWhiteUrl(String whiteUrl) {
       FormXssFilter.whiteUrl=whiteUrl;
    }
    
  3. 遇到的坑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;
        }
    }
    
  4. 遇到的坑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>
    
  5. 遇到的坑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文件,重新加载项目

  6. 遇到的坑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>
    
  7. 遇到的坑6:存在一些写法,比如public static String xxx= env.getProperty(“xxx”);这种写法可能在java -jar启动的时候正常,但是放在东方通导致null。

    因为放入东方通后,spring的加载顺序发生了一些变化。导致env可能获取不到,所以触发了异常。这种情况有两种解决办法

    1)使用@value+static静态化加载yml环境变量参数

    2)配置参数直接使用final修饰,这样子在编译的时候,就可以初始化yml环境变量参数

  8. 报错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)]

四、vue前端打包(TongWeb部署)

ps:这种打包方式是针对于TongWeb部署的,如果是nginx或者TongHttpServer部署,跟普通服务器部署方式一样,打个dist包上传解压即可!

  1. npm run build 得到 dist

  2. dist 文件夹里面,添加文件夹和文件

    1)创建文件夹:WEB-INBF

    2)进入WEB-INBF创建文件rewrite.config

    RewriteRule ^/index\.html$ - [L]
    RewriteCond %{REQUEST_PATH} !-f
    RewriteRule (.*) /index.html [L]
    
  3. 进入 dist,打开 cmd,运行 jar -cvf dist.war * 得到 dist.war

  4. 前端一般不会遇到什么bug,直接将dist.war部署上去即可

五、TongWeb部署(前后端一样)

  1. 参数设置

    ps:这里的参数是部署到当前东方通的所有项目共用,可酌情修改,也可以不动

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ui6ypdaL-1692190319626)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20230816203341541.png)]

  2. 创建主机

    ps:建议一个应用一个主机,便于区分,参数酌情填写即可

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BBqbULYv-1692190319628)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20230816203426260.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WHwvlTLg-1692190319628)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20230816203751474.png)]

  3. 创建HTTP通道管理

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-noyWLmc3-1692190319629)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20230816203709113.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jWfVTOPD-1692190319630)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20230816203834620.png)]

    然后一直下一步,参数自己看着修改,直到最后一步

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KWrUl5a3-1692190319630)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20230816203934114.png)]

    创建完毕后,需要再重新修改

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dXb9P9Of-1692190319631)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20230816204018417.png)]

    根据自己项目实际情况进行勾选,然后保存即可!

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PDzFE60q-1692190319632)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20230816204046215.png)]

  4. 设置服务器文件路径

    ps:主要是为了部署项目的时候,文件可以直接从服务器指定路径进行勾选

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TgY1IBmJ-1692190319632)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20230816204345975.png)]

  5. 部署项目

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tr0Kyixy-1692190319633)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20230816204131279.png)]

    1)上传文件,选择服务器的话就默认从上一步选择的路径里面,选择底下的文件)
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JQIN7spo-1692190319633)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20230816204845279.png)]
    2)设置前缀
    在这里插入图片描述
    3)选择主机
    在这里插入图片描述
    4)完成
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Oi7flhhT-1692190319635)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20230816205043869.png)]

  6. 部署结束后,直接使用刚刚设置的端口进行测试访问即可!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/886174.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java内存区域(运行时数据区域)和内存模型(JMM)

Java 内存区域和内存模型是不一样的东西&#xff0c;内存区域是指 Jvm 运行时将数据分区域存储&#xff0c;强调对内存空间的划分。 而内存模型&#xff08;Java Memory Model&#xff0c;简称 JMM &#xff09;是定义了线程和主内存之间的抽象关系&#xff0c;即 JMM 定义了 …

随机改名并一键导出表格,让你的文件整理更高效

在日常工作中&#xff0c;文件的命名和归类是一个常见的繁琐任务。随着文件数量的不断增加&#xff0c;手动改名和整理变得异常耗时且容易出错。但是&#xff0c;现在有了一款创意文件改名归类利器&#xff0c;让你能够轻松将文件随机改名并一键导出表格&#xff0c;让文件整理…

Google Earth中的KML文件转换为CSV文件存放经纬度

最近进行一个小工作是在google earth中选择一系列点坐标,然后保存为csv文件或txt文件。我在Google Earth Pro在左上方的“文件”–>“保存”–>“将位置另存为”选项。 弹出的窗口中只有“kmz”与“kml”两种格式,这两种格式均是google earth内置的格式(KMZ文件是KML的…

运动路径规划,ROS发布期望运动轨迹

目录 一、Python实现&#xff08;推荐方法&#xff09; 1.1代码cubic_spline_path.py 1.2使用方法 二、C实现 参考博客 想让机器人/智能车无人驾驶&#xff0c;要有期望路径&#xff0c;最简单的是一条直线&#xff0c;或者是一条光滑曲线。 生成路径的方法有两种&#xf…

RSA加密解密算法原理以及实现

文章目录 前言一、RSA加密算法是什么&#xff1f;加密过程1、选择一对不相等且足够大的质数2、计算p、q的乘积3、计算n的欧拉函数4、选择一个与 φ ( n ) \varphi(n) φ(n)互质的整数e5、计算出e对于 φ ( n ) \varphi(n) φ(n)的模反元素d6、将e、n公开作为公钥进行加密7、将d…

步入React正殿 - 生命周期

目录 资料 三个阶段的生命周期函数 创建阶段 初始化阶段constructor 挂载阶段componentWillMount 挂载阶段render 挂载阶段componentDidMount 更新阶段【props或state改变】 更新阶段componentWillReceiveProps 更新阶段shouldComponentUpdate【可不使用&#xff0c;…

Mysql事务篇——Day02

Mysql事务篇——Day02 事务有哪些特性并发事务引发的问题脏读不可重复读幻读 事务隔离级别Read View 在 MVCC里如何工作 事务有哪些特性 事务是依赖MySQL的储存引擎是实现的&#xff0c;我们常见的Innodb引擎就是支持事务的。 不过并不是所有的存储引擎都可以支持事务&#xf…

SecureCRT8.5安装教程

第一步&#xff1a; 将文件下载解压 第二步&#xff1a; 双击进行安装&#xff0c;或者右键以管理员的方式运行 第三步&#xff1a; 直接点下一步 第四步&#xff1a; 选择接受协议&#xff0c;然后点下一步 第五步&#xff1a; 我这里选择所有用户&#xff0c;然后点下一…

js实现按创建时间戳1609459200000 开始往后开始显示运行时长-demo

运行时长 00日 00时 17分 59秒 代码 function calculateRuntime(timestamp) {const startTime Date.now(); // 获取当前时间戳//const runtimeElement document.getElementById(runtime); // 获取显示运行时长的元素function updateRuntime() {const currentTimestamp Date…

spring入门基本介绍及注入方式---详细介绍

一&#xff0c;spring的简介 Spring是一个开源框架&#xff0c;它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。 提供了许多功能强大且易于使用的特性&#xff0c;使得开发者能够更加轻松地构建可维护且可扩展的应用程序&#xff0c;简单来说: Spring使用基…

攻击LNMP架构Web应用

环境配置(centos7) 1.php56 php56-fpm //配置epel yum install epel-release rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm//安装php56&#xff0c;php56-fpm及其依赖 yum --enablereporemi install php56-php yum --enablereporemi install php…

深入了解唯品会API及其应用

随着电商行业的快速发展&#xff0c;API&#xff08;Application Programming Interface&#xff0c;应用程序接口&#xff09;已经成为许多企业实现系统对接、数据交换和功能扩展的重要工具之一。唯品会作为国内领先的电商平台之一&#xff0c;也提供了丰富的API接口&#xff…

component:()=>import(“@/views/Home.vue“) 报错,ts说没有找到类型声明文件

1 没有写.vue文件的类型声明&#xff0c;要在env.d.ts文件中写.vue的类型声明文件 2 ts.config.josn的incluede字段中&#xff0c;没有把.d.ts文件的路径写对。 如果没写对&#xff0c;就会在项目启动的时候&#xff0c;找不到.d.ts文件。找不到类型声明文件

【自动电压调节器】无功功率控制的终端电压控制研究(Simulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

ATF(TF-A)安全通告 TFV-5 (CVE-2017-15031)

安全之安全(security)博客目录导读 ATF(TF-A)安全通告汇总 目录 一、ATF(TF-A)安全通告 TFV-5 (CVE-2017-15031) 二、CVE-2017-15031 一、ATF(TF-A)安全通告 TFV-5 (CVE-2017-15031) Title 未初始化或保存/恢复PMCR_EL0可能会泄露安全世界的时间信息 CVE ID CVE-2017-1503…

cs231n assignment 3 Q2 Image Captioning with Vanilla RNNs

文章目录 嫌啰嗦直接看代码Q2 Image Captioning with Vanilla RNNs一个给的工具代码里的bug问题展示问题解决思路解决办法 rnn_step_forward题面解析代码输出 rnn_step_backward题面解析代码输出 rnn_forward题面解析代码输出 rnn_backward题面解析代码输出 word_embedding_for…

时序预测 | MATLAB实现基于CNN-BiLSTM卷积双向长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价)

时序预测 | MATLAB实现基于CNN-BiLSTM卷积双向长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价) 目录 时序预测 | MATLAB实现基于CNN-BiLSTM卷积双向长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价)预测结果基本介绍程序设计参考资料 预测结果 基本介绍…

leetcode 518. 零钱兑换 II

本题是背包问题系列的完全背包问题&#xff0c;和0-1背包唯一的区别就在于&#xff1a;物品是可以重复选取的。 经过之前背包问题的拷打&#xff0c;本题也是一遍AC了。 接下来将给出二维和一维两种做法。 二维dp数组做法&#xff1a; 本题的背包大小即为题中给出的总金额&am…

与微软Office抗衡,两大巨头布局,打造新办公软件,再上新台阶

办公软件是我们日常工作中不可或缺的工具。 除了广为人知的微软Office套件外&#xff0c;近几年来&#xff0c;中国市场有许多优秀的国产办公软件抢眼登场&#xff0c;这些软件在提高工作效率、简化工作流程方面发挥着重要作用。 简单介绍几款值得知道的国产办公软件&#xff…

【学习FreeRTOS】第9章——FreeRTOS任务调度

1.开启任务调度器 vTaskStartScheduler() 作用&#xff1a;用于启动任务调度器&#xff0c;任务调度器启动后&#xff0c; FreeRTOS 便会开始进行任务调度【动态创建任务为例】 创建空闲任务如果使能软件定时器&#xff0c;则创建定时器任务关闭中断&#xff0c;防止调度器开…