之前的JRT只部署在一个服务器,实际运用可能会有数台、数十台、或者更多服务器。那么多台服务器就需要程序同步机制。这里借助Rsync同步,但是有个问题是Rsync同步jar之后他不知道是否需要重启站点,为此实现java控制台驱动Rsync,重定向Rsync的输出到java,通过自己程序决定是否需要重启站点。
同步程序演示视频
本次优化运维便捷性
实现代码
/*
本框架版权归属于JRT计划,任何单位或个人未经许可,不得以任何方式复制、传播、展示、发布、分发、重新分发、修改、反编译、
反向编译或以其他方式使用本框架的任何部分,包括但不限于源代码、二进制文件、文档、演示文稿、示例代码和API。
使用本框架的用户需遵守以下条款:
用户只能以个人学习和研究为目的使用本框架,不得将其用于商业用途。
用户在使用本框架时,应遵守所有适用的法律和法规,包括但不限于版权法、商标法、专利法和隐私权法。
用户在使用本框架时,应自行承担风险和责任,并确保不会侵犯任何知识产权或个人权利。
本框架的使用仅限于用户自己使用,不得将其分发给其他用户或将其用于任何形式的共享或传播。
在使用本框架时,用户应尊重和保护其他用户的隐私和个人信息,不得将其泄露给任何第三方。
违反以上条款将视为侵权行为,将采取法律手段维护JRT合法权益。*/import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.concurrent.TimeUnit;/*** 实现同步网站代码,根据同步结果角色是否需要重启web*/
public class Rsync {/*** 实体编译入口** @param args*/public static void main(String[] args) {// 检查是否为Windows平台,如果是则提示不支持并退出if (System.getProperty("os.name").toLowerCase().contains("win")) {System.out.println("不支持Windows,按任意键退出");try {System.in.read();} catch (IOException e) {e.printStackTrace();}return;}//得到.class所在的路径rsyncString basePath = Rsync.class.getResource("").getPath();File fBase = new File(basePath);//tomcat的根basePath = fBase.getParent();//同步脚本的路径String shPath = Paths.get(basePath, "rsync", "rsyncclient.sh").toString();ProcessBuilder processBuilder = new ProcessBuilder("/usr/bin/bash", shPath);//将标准错误和标准输出合并processBuilder.redirectErrorStream(true);Process process = null;try {process = processBuilder.start();BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));String line;boolean needRestart = false;//循环读取数据while ((line = reader.readLine()) != null) {System.out.println(line);//检查是否需要重启if ((line.contains("lib") && (line.contains(".jar")) || line.contains("/Conf/restart.flag"))) {needRestart = true;} else if (line.contains("webapps/") && line.contains(".java")) {String path = basePath + "/" + line;Path filePath = Paths.get(path);if (Files.exists(filePath)) {System.out.println("追加一个空格触发编译");//要追加的空格String space = " ";Files.write(filePath, space.getBytes(StandardCharsets.UTF_8), StandardOpenOption.APPEND);}}}int exitCode = process.waitFor();System.out.println("Shell script exited with code " + exitCode);//需要重启网站if (needRestart) {System.out.println("有需要重启站点才生效的文件更新,30秒后重启站点");//休眠30秒TimeUnit.SECONDS.sleep(30);//重启脚本String stopweb = Paths.get(basePath, "bin", "shutdown.sh").toString();String startweb = Paths.get(basePath, "bin", "startup.sh").toString();//重启网站ProcessBuilder processBuilderWeb = new ProcessBuilder("/usr/bin/bash", stopweb);Process processWeb = processBuilderWeb.start();processWeb.waitFor();ProcessBuilder processBuilderWebStart = new ProcessBuilder("/usr/bin/bash", startweb);Process processWebStart = processBuilderWebStart.start();processWebStart.waitFor();}} catch (IOException | InterruptedException e) {e.printStackTrace();} finally {//进程没结束就杀进程if (process != null && !process.isAlive()) {process.destroy();}}}
}
排除文件指定这些目录排除同步
同步模块配置
供Java驱动的客户端同步脚本
jrt初始化文件同步服务菜单
jrt执行客户端同步的菜单,这样用jrt 6就能主动执行同步了,systemd的服务会定时5分钟执行一次同步
Linux同步效果
root@VM-8-9-ubuntu:~# jrt
欢迎使用jrt的linux命令呼出入口,通过jrt命令引导bash脚本
执行命令:bash /jrtlis/jrt.sh+欢迎您使用jrt网站运维脚本
+该脚本致力于简化基于jrt框架的web在linux上运维
+常用菜单选项有1、2
+检验约定发布在8080端口
+在没有jrt命令的检验服务器运行bash /jrtlis/jrt.sh来第一次初始化jrt命令+*************************************************JRTWeb网站配置工具************************************************************+
+ +
+ 1:重启Tomcat网站 +
+ +
+ 2:端口查看和开放,查看端口占用(lsof -i:8080) +
+ +
+ 3:查看网站进程信息 +
+ +
+ 6:同步主站点程序 +
+ +
+ 8:编译实体 +
+ +
+ 9:常用命令帮助 +
+ +
+ 11:停止Tomcat网站 +
+ +
+ 18:实体编译测试和代码比对 +
+ +
+ 66:自定义命令名称,否则都是以jrt驱动 +
+ +
+ 97:测试端口可用性 +
+ +
+ 98:启动rsync服务 +
+ +
+ 99:初始化同步程序 +
+ +
+ 发布后系统访问地址https://127.0.0.1:8081/jrtlis/login/form/Login.html +
+ 小乌鱼 20231228 +
+*******************************************************************************************************************************+
请按菜单输入选择功能Ctrl+C退出:6
执行客户端同步任务receiving incremental file list
webapps/jrtlis/Conf/Security.conf0 0% 0.00kB/s 0:00:00 22 100% 21.48kB/s 0:00:00 (xfr#1, ir-chk=1003/1515)
webapps/jrtlis/error/error.html0 0% 0.00kB/s 0:00:00 1,014 100% 11.13kB/s 0:00:00 (xfr#2, ir-chk=1006/7674)sent 1,887 bytes received 335,805 bytes 225,128.00 bytes/sec
total size is 1,395,700,883 speedup is 4,133.06
Shell script exited with code 0
同步完成
+*************************************************JRTWeb网站配置工具************************************************************+
+ +
+ 1:重启Tomcat网站 +
+ +
+ 2:端口查看和开放,查看端口占用(lsof -i:8080) +
+ +
+ 3:查看网站进程信息 +
+ +
+ 6:同步主站点程序 +
+ +
+ 8:编译实体 +
+ +
+ 9:常用命令帮助 +
+ +
+ 11:停止Tomcat网站 +
+ +
+ 18:实体编译测试和代码比对 +
+ +
+ 66:自定义命令名称,否则都是以jrt驱动 +
+ +
+ 97:测试端口可用性 +
+ +
+ 98:启动rsync服务 +
+ +
+ 99:初始化同步程序 +
+ +
+ 发布后系统访问地址https://127.0.0.1:8081/jrtlis/login/form/Login.html +
+ 小乌鱼 20231228 +
+*******************************************************************************************************************************+
请按菜单输入选择功能Ctrl+C退出:
+*************************************************JRTWeb网站配置工具************************************************************+
+ +
+ 1:重启Tomcat网站 +
+ +
+ 2:端口查看和开放,查看端口占用(lsof -i:8080) +
+ +
+ 3:查看网站进程信息 +
+ +
+ 6:同步主站点程序 +
+ +
+ 8:编译实体 +
+ +
+ 9:常用命令帮助 +
+ +
+ 11:停止Tomcat网站 +
+ +
+ 18:实体编译测试和代码比对 +
+ +
+ 66:自定义命令名称,否则都是以jrt驱动 +
+ +
+ 97:测试端口可用性 +
+ +
+ 98:启动rsync服务 +
+ +
+ 99:初始化同步程序 +
+ +
+ 发布后系统访问地址https://127.0.0.1:8081/jrtlis/login/form/Login.html +
+ 小乌鱼 20231228 +
+*******************************************************************************************************************************+
请按菜单输入选择功能Ctrl+C退出:
+*************************************************JRTWeb网站配置工具************************************************************+
+ +
+ 1:重启Tomcat网站 +
+ +
+ 2:端口查看和开放,查看端口占用(lsof -i:8080) +
+ +
+ 3:查看网站进程信息 +
+ +
+ 6:同步主站点程序 +
+ +
+ 8:编译实体 +
+ +
+ 9:常用命令帮助 +
+ +
+ 11:停止Tomcat网站 +
+ +
+ 18:实体编译测试和代码比对 +
+ +
+ 66:自定义命令名称,否则都是以jrt驱动 +
+ +
+ 97:测试端口可用性 +
+ +
+ 98:启动rsync服务 +
+ +
+ 99:初始化同步程序 +
+ +
+ 发布后系统访问地址https://127.0.0.1:8081/jrtlis/login/form/Login.html +
+ 小乌鱼 20231228 +
+*******************************************************************************************************************************+
请按菜单输入选择功能Ctrl+C退出:
+*************************************************JRTWeb网站配置工具************************************************************+
+ +
+ 1:重启Tomcat网站 +
+ +
+ 2:端口查看和开放,查看端口占用(lsof -i:8080) +
+ +
+ 3:查看网站进程信息 +
+ +
+ 6:同步主站点程序 +
+ +
+ 8:编译实体 +
+ +
+ 9:常用命令帮助 +
+ +
+ 11:停止Tomcat网站 +
+ +
+ 18:实体编译测试和代码比对 +
+ +
+ 66:自定义命令名称,否则都是以jrt驱动 +
+ +
+ 97:测试端口可用性 +
+ +
+ 98:启动rsync服务 +
+ +
+ 99:初始化同步程序 +
+ +
+ 发布后系统访问地址https://127.0.0.1:8081/jrtlis/login/form/Login.html +
+ 小乌鱼 20231228 +
+*******************************************************************************************************************************+
请按菜单输入选择功能Ctrl+C退出:
+*************************************************JRTWeb网站配置工具************************************************************+
+ +
+ 1:重启Tomcat网站 +
+ +
+ 2:端口查看和开放,查看端口占用(lsof -i:8080) +
+ +
+ 3:查看网站进程信息 +
+ +
+ 6:同步主站点程序 +
+ +
+ 8:编译实体 +
+ +
+ 9:常用命令帮助 +
+ +
+ 11:停止Tomcat网站 +
+ +
+ 18:实体编译测试和代码比对 +
+ +
+ 66:自定义命令名称,否则都是以jrt驱动 +
+ +
+ 97:测试端口可用性 +
+ +
+ 98:启动rsync服务 +
+ +
+ 99:初始化同步程序 +
+ +
+ 发布后系统访问地址https://127.0.0.1:8081/jrtlis/login/form/Login.html +
+ 小乌鱼 20231228 +
+*******************************************************************************************************************************+
请按菜单输入选择功能Ctrl+C退出:
+*************************************************JRTWeb网站配置工具************************************************************+
+ +
+ 1:重启Tomcat网站 +
+ +
+ 2:端口查看和开放,查看端口占用(lsof -i:8080) +
+ +
+ 3:查看网站进程信息 +
+ +
+ 6:同步主站点程序 +
+ +
+ 8:编译实体 +
+ +
+ 9:常用命令帮助 +
+ +
+ 11:停止Tomcat网站 +
+ +
+ 18:实体编译测试和代码比对 +
+ +
+ 66:自定义命令名称,否则都是以jrt驱动 +
+ +
+ 97:测试端口可用性 +
+ +
+ 98:启动rsync服务 +
+ +
+ 99:初始化同步程序 +
+ +
+ 发布后系统访问地址https://127.0.0.1:8081/jrtlis/login/form/Login.html +
+ 小乌鱼 20231228 +
+*******************************************************************************************************************************+
请按菜单输入选择功能Ctrl+C退出:
+*************************************************JRTWeb网站配置工具************************************************************+
+ +
+ 1:重启Tomcat网站 +
+ +
+ 2:端口查看和开放,查看端口占用(lsof -i:8080) +
+ +
+ 3:查看网站进程信息 +
+ +
+ 6:同步主站点程序 +
+ +
+ 8:编译实体 +
+ +
+ 9:常用命令帮助 +
+ +
+ 11:停止Tomcat网站 +
+ +
+ 18:实体编译测试和代码比对 +
+ +
+ 66:自定义命令名称,否则都是以jrt驱动 +
+ +
+ 97:测试端口可用性 +
+ +
+ 98:启动rsync服务 +
+ +
+ 99:初始化同步程序 +
+ +
+ 发布后系统访问地址https://127.0.0.1:8081/jrtlis/login/form/Login.html +
+ 小乌鱼 20231228 +
+*******************************************************************************************************************************+
请按菜单输入选择功能Ctrl+C退出:6
执行客户端同步任务receiving incremental file list
webapps/jrtlis/error/
webapps/jrtlis/error/error403.html0 0% 0.00kB/s 0:00:00 1,235 100% 1.18MB/s 0:00:00 (xfr#1, ir-chk=1005/7674)sent 1,863 bytes received 335,768 bytes 675,262.00 bytes/sec
total size is 1,395,700,883 speedup is 4,133.81
Shell script exited with code 0
同步完成
+*************************************************JRTWeb网站配置工具************************************************************+
+ +
+ 1:重启Tomcat网站 +
+ +
+ 2:端口查看和开放,查看端口占用(lsof -i:8080) +
+ +
+ 3:查看网站进程信息 +
+ +
+ 6:同步主站点程序 +
+ +
+ 8:编译实体 +
+ +
+ 9:常用命令帮助 +
+ +
+ 11:停止Tomcat网站 +
+ +
+ 18:实体编译测试和代码比对 +
+ +
+ 66:自定义命令名称,否则都是以jrt驱动 +
+ +
+ 97:测试端口可用性 +
+ +
+ 98:启动rsync服务 +
+ +
+ 99:初始化同步程序 +
+ +
+ 发布后系统访问地址https://127.0.0.1:8081/jrtlis/login/form/Login.html +
+ 小乌鱼 20231228 +
+*******************************************************************************************************************************+
请按菜单输入选择功能Ctrl+C退出:6
执行客户端同步任务receiving incremental file list
webapps/jrtlis/sys/ashx/ashDevOpenPage.java
追加一个空格触发编译0 0% 0.00kB/s 0:00:00 6,956 100% 6.63MB/s 0:00:00 (xfr#1, to-chk=49/11523)sent 1,916 bytes received 335,839 bytes 225,170.00 bytes/sec
total size is 1,395,700,884 speedup is 4,132.29
Shell script exited with code 0
同步完成
+*************************************************JRTWeb网站配置工具************************************************************+
+ +
+ 1:重启Tomcat网站 +
+ +
+ 2:端口查看和开放,查看端口占用(lsof -i:8080) +
+ +
+ 3:查看网站进程信息 +
+ +
+ 6:同步主站点程序 +
+ +
+ 8:编译实体 +
+ +
+ 9:常用命令帮助 +
+ +
+ 11:停止Tomcat网站 +
+ +
+ 18:实体编译测试和代码比对 +
+ +
+ 66:自定义命令名称,否则都是以jrt驱动 +
+ +
+ 97:测试端口可用性 +
+ +
+ 98:启动rsync服务 +
+ +
+ 99:初始化同步程序 +
+ +
+ 发布后系统访问地址https://127.0.0.1:8081/jrtlis/login/form/Login.html +
+ 小乌鱼 20231228 +
+*******************************************************************************************************************************+
请按菜单输入选择功能Ctrl+C退出:6
执行客户端同步任务receiving incremental file list
webapps/jrtlis/Conf/restart.flag0 0% 0.00kB/s 0:00:00 10 100% 9.77kB/s 0:00:00 (xfr#1, ir-chk=1001/1515)
webapps/jrtlis/sys/ashx/ashDevOpenPage.java
追加一个空格触发编译0 0% 0.00kB/s 0:00:00 6,956 100% 11.75kB/s 0:00:00 (xfr#2, to-chk=49/11523)sent 1,995 bytes received 335,633 bytes 675,256.00 bytes/sec
total size is 1,395,700,884 speedup is 4,133.84
Shell script exited with code 0
有需要重启站点才生效的文件更新,30秒后重启站点
同步完成
+*************************************************JRTWeb网站配置工具************************************************************+
+ +
+ 1:重启Tomcat网站 +
+ +
+ 2:端口查看和开放,查看端口占用(lsof -i:8080) +
+ +
+ 3:查看网站进程信息 +
+ +
+ 6:同步主站点程序 +
+ +
+ 8:编译实体 +
+ +
+ 9:常用命令帮助 +
+ +
+ 11:停止Tomcat网站 +
+ +
+ 18:实体编译测试和代码比对 +
+ +
+ 66:自定义命令名称,否则都是以jrt驱动 +
+ +
+ 97:测试端口可用性 +
+ +
+ 98:启动rsync服务 +
+ +
+ 99:初始化同步程序 +
+ +
+ 发布后系统访问地址https://127.0.0.1:8081/jrtlis/login/form/Login.html +
+ 小乌鱼 20231228 +
+*******************************************************************************************************************************+
请按菜单输入选择功能Ctrl+C退出:
这样JRT成为集成开发、部署、运维一体的信创框架,从整个软件的生命周期中降低软件公司的成本和提升竞争力。在JRT下、不需要像互联网那么细分岗位,人人都可以干全栈工程师,只需要前端和java基础知识就可以几分钟内上手开发,只需要Linux的shell连接基础知识就可以上手运维。框架沉淀来自上十年的一线开发和框架设计经验、和上十年的从0手写C#的ORM和使用经验。很多人和公司觉得自己写框架和数据访问层不可靠、没Spring现成的来的可靠;从IIS到DotNetCore的业务脚本化和Linux然后直接上线大医院我不是一波就稳定了吗。没什么不可控的,只要吃懂ado或JDBC和基础知识就行了。老外的Spring不也是人写的。