之前的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所在的路径rsync
String 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.conf
0 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.html
0 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.html
0 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.flag
0 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不也是人写的。