java 代码判断Mysql服务是否开启

来源:互联网 发布:apache post请求 编辑:程序博客网 时间:2024/05/24 23:15

先啰嗦一下,为什么要监听mysql服务是否开启。也不知道为什么,我们服务器上的mysql服务总是自动的就关闭了,我们要调用接口不停低向数据库中插入数据,如果mysql服务停止了,而调用接口的程序还在一直运行,那么获取的实时数据就不能插入数据库了,所以要来监听一下mysql服务是否停止了。如果mysql服务停止了,就做出相应的操作,即让程序停止,不在向数据库中插入数据直到mysql服务启动。
废话不多说上代码

package cn.com.dekn.client.webservice.tblsavevehicleweight.util;import java.io.IOException;import java.io.InputStream;public class JudgeMysqlIsOpen {    public static String getInfoMySqlIsOpen(){         Process p = null;         try{//                p = new ProcessBuilder("mysqladmin","-u yonghu -h 192.168.1.86 -p123456 -P 8806 ping").start();//                p = new ProcessBuilder("mysqladmin -u -h -p -P","yonghu","192.168.1.86","123456", "8806","ping").start();              //访问运程服务器上的mysql//           p = new ProcessBuilder("mysqladmin","-uyonghu","-h192.168.1.86","-p123456", "-P8806",  "ping").start();              //访问本地的mysql              p = new ProcessBuilder("mysqladmin","-uroot","-proot","ping").start();          }catch(IOException e){             return "获取mysql是否停止异常";         }         byte[] b = new byte[1024];         int readbytes = -1;         StringBuffer sb = new StringBuffer();         //读取进程输出值         //在JAVA IO中,输入输出是针对JVM而言,读写是针对外部数据源而言         InputStream in = p.getInputStream();         try{                while((readbytes = in.read(b)) != -1){                       sb.append(new String(b,0,readbytes));                }         }catch(IOException e1){             return "读取流异常";         }finally {                try{                      in.close();                }catch (IOException e2){                    return "关闭流异常";                }         }        return sb.toString();    }}

其中加注释的是本人还不熟悉ProcessBuilder这个类时传参情况,它是java.lang包下的一个类,JDK1.5以后才有。实验证明最后两种远程的和本地的那种格式是正确。

下面说一下mysql中查看服务是否启动的有关命令和参数的意思,先上效果图首先是mysql服务时启动的情况下
在dos窗口运行命令,结果如图这是结果图
我的mysql在安装的时候没有设置密码所以在这里没有写,如果mysql有密码也可以这样这个是有密码的mysql

mysql服务停止后停止mysql服务后
dos命令执行情况停止mysql服务后的结果,带密码的就不展示了

以上是测试本地的,下面是测试远程的,由于公司的服务不能随便的停止,所以就只演示mysql开启时的效果这里会看到如果命令上没有写密码,会提示让输入密码的这里是把密码写入命令里面了,就直接出现结果了

mysqladmin -u user -h 192.168.1.86 -p mima -P 3306 ping
mysqladmin 是mysql查看服务器的命令
-u 是连接数据库的用户名
-h 是远程服务器的ip地址
-p 是登陆mysql的密码(注意p是小写的)
-P 是mysql的端口号(这里的p是大写的)
ping 本人理解就是ping mysql服务是否开启


这些是在dos窗口中输入的命令时候写的。在java代码中如何写,就是我上面的代码缩写的样子了。不过有几点还是要注意一下:
1.在new ProcessBuilder实例的时候,参数传的得这样new ProcessBuilder("mysqladmin","-uyonghu","-h192.168.1.86","-pmima", "-P3306", "ping").start()其中-h和ip地址之间不要有空格,还有“”双引号前后都不要有空格,其他的都一样,还有-p密码一定要放在-hip地址之后,不然也会报错。最后一点:如果是监控远程服务器上的mysql服务的状态你首先保证能ping通,其次是那个账号和密码具有远程登录的权限就是你可以用mysql -uroot -p远程登录。
有关java.lang包下的这个ProcessBuilder类,本人还在琢磨当中,目前实现功能重要,嘿嘿。
如果我说的有什么不对,或者错误,还望大神们多多指教,共同学习讨论。

0 0
原创粉丝点击