Swing自动扫描服务程序总结

最近用swing写了一个小程序,用于监控服务器上的服务,历时半个月,最终成功测试上线,现对它进行总结

需求:扫描服务器上指定位置的服务,把各个服务按照端口号、项目名、状态、启动路径罗列出来,并增加定时器监控服务状态,如果发现服务崩溃,则杀死此服务并重新启动。界面如下图:
这里写图片描述

思路如下:
1、扫描指定路径,找出server.bat(服务的启动文件),然后根据server.bat的路径得到tomcat下的server.xml文件并解析出里面的端口号,再获取tomcat下webapps中除了默认的文件夹外的文件夹名,得到服务的运行环境名,然后获取本机的ip,根据ip,端口号,运行环境名发送一个登录请求判断服务是否成功启动,如果启动成功,将状态改为Running,否则则改为Disconnct。

2、在表格每行增加一个右击功能,其中分别有“开启服务”“停止服务”“删除服务”三个功能,如下图
这里写图片描述
I.开启服务:直接使用Desktop.getDesktop().open(new File("path"));来执行.bat文件。
II.停止服务:通过

    String[] cmd = {"tasklist"};
    Process process = Runtime.getRuntime().exec(cmd);
    BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
    String string_temp = "";
    while ((string_temp = in.readLine()) != null) {}

循环获取系统当前进程,截取出每个进程的pid,然后Sigar包得到进程的启动路径,根据启动路径与服务路径比较获取指定服务进程,然后杀死进程。
III.删除服务:仅仅删除JTable中的数据,不影响服务文件。

3、编写一个定时器,定时发送请求判断服务的状态,如果服务是Disconnect,则杀死该服务,并重新启动服务。

    Runnable runnable = new Runnable() {  
            public void run() {  
                //定时任务
            }  
        };  
        service = Executors.newSingleThreadScheduledExecutor();  
        // 第二个参数为首次执行的延时时间,第三个参数为定时执行的间隔时间  
        service.scheduleAtFixedRate(runnable, 0, times, TimeUnit.HOURS);  

4、在最下面显示一个JTextArea,用来显示扫描进度。

5、扫描完成后在本地增加缓存txt文件,以key-value的形式存至txt文件中,key为扫描路径,value为list返回值,一个路径对应缓存文件中的一行,然后下次扫描时先判断缓存文件中是否存在该扫描路径,如果存在则直接读取缓存文件中的value值并返回,不存在则扫描该路径。

技术总结:主要是文件的递归扫描,xml文件的读取和txt文件的读写,获取系统的ip、进程信息,以及java执行cmd命令。

//执行.bat之类的文件,带弹窗
Desktop.getDesktop().open(new File("文件路径"));

注意:在Swing生成可执行jar包的时候,因为项目中用了sigar.jar,要使用这个除了jar包还需要一个.dll的库,而这个.dll库在导出的时候不能跟着导出,所以需要手动把它加入到导出的jar包文件夹中,不然会导致sigar不能使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值