数据备份
// 数据备份
@RequestMapping(value = "/addDbSecurityOne")
@ResponseBody
public PjResult<?> addDBbackups(@RequestBody DbSecurity obj) throws Exception {
String backName = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date())+".sql";
//String pathSql = "F://"+backName;//window系统上的目录
String pathSql ="/home/root/mysqlData/"+backName;//linux系统下的目录
File fileSql = new File(pathSql);
//创建备份sql文件
if (!fileSql.exists()){
fileSql.createNewFile();
}
//mysqldump -hlocalhost -uroot -p123456 db > /home/back.sql
StringBuffer sb = new StringBuffer();
sb.append("mysqldump");
//sb.append(" -h localhost");
//sb.append(" -u"+"root");
//sb.append(" -p"+"ligeyu");
sb.append(" "+"hengji_db"+" >");
/*String command="mysqldump -h192.168.1.41 -uroot -pligeyu hengji_db >";*/
// linux: /usr/bin/mysqldump -uroot -phengji hengji_db >/home/root/mysqlData
sb.append(pathSql);
System.out.println("cmd命令为:"+sb.toString());
Runtime runtime = Runtime.getRuntime();
System.out.println("开始备份:"+"hengji_db");
//Process process = runtime.exec("cmd /c"+sb.toString());
Process process = runtime.exec(sb.toString());
System.out.println("备份成功!");
obj.setDbSql(pathSql);
obj.setCreateTime(new Date());
service.addDbBackups(obj);
return PjResult.success();
}
数据还原
// 数据还原
@RequestMapping(value = "/reDbSecurityOne")
@ResponseBody
public PjResult<?> dbRestore(@RequestBody DbSecurity obj) throws Exception {
StringBuilder sb = new StringBuilder();
sb.append("mysql");
//sb.append(" -h localhost");
sb.append(" -u"+"root");
sb.append(" -p"+"hengji");
sb.append(" "+"hengji_db"+" <");
sb.append(obj.getDbSql());
// mysql -h localhost -uroot -pligeyu hengji_db < F:/2018-09-19-15-56-35.sql
System.out.println("cmd命令为:"+sb.toString());
Runtime runtime = Runtime.getRuntime();
System.out.println("开始还原数据");
try {
Process process = runtime.exec(sb.toString());
InputStream is = process.getInputStream();
BufferedReader bf = new BufferedReader(new InputStreamReader(is,"utf8"));
String line = null;
while ((line=bf.readLine())!=null){
System.out.println(line);
}
is.close();
bf.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("还原成功!");
return PjResult.success();
}
上述代码中其中Runtime为中心。Runtime封装了运行环境,每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。
一般不能实例化一个Runtime对象,应用程序也不能创建自己的 Runtime 类实例,但可以通过 getRuntime 方法获取当前Runtime运行时对象的引用。
一旦得到了一个当前的Runtime对象的引用,就可以调用Runtime对象的方法去控制Java虚拟机的状态和行为。
API预览
addShutdownHook(Thread hook)
注册新的虚拟机来关闭挂钩。
availableProcessors()
向 Java 虚拟机返回可用处理器的数目。
exec(String command)
在单独的进程中执行指定的字符串命令。
exec(String[] cmdarray)
在单独的进程中执行指定命令和变量。
exec(String[] cmdarray, String[] envp)
在指定环境的独立进程中执行指定命令和变量。
exec(String[] cmdarray, String[] envp, File dir)
在指定环境和工作目录的独立进程中执行指定的命令和变量。
exec(String command, String[] envp)
在指定环境的单独进程中执行指定的字符串命令。
exec(String command, String[] envp, File dir)
在有指定环境和工作目录的独立进程中执行指定的字符串命令。
exit(int status)
通过启动虚拟机的关闭序列,终止当前正在运行的 Java 虚拟机。
freeMemory()
返回 Java 虚拟机中的空闲内存量。
gc()
运行垃圾回收器。
InputStream getLocalizedInputStream(InputStream in)
已过时。 从 JDK 1.1 开始,将本地编码字节流转换为 Unicode 字符流的首选方法是使用 InputStreamReader 和 BufferedReader 类。
OutputStream getLocalizedOutputStream(OutputStream out)
已过时。 从 JDK 1.1 开始,将 Unicode 字符流转换为本地编码字节流的首选方法是使用 OutputStreamWriter、BufferedWriter 和 PrintWriter 类。
getRuntime()
返回与当前 Java 应用程序相关的运行时对象。
halt(int status)
强行终止目前正在运行的 Java 虚拟机。
load(String filename)
加载作为动态库的指定文件名。
loadLibrary(String libname)
加载具有指定库名的动态库。
maxMemory()
返回 Java 虚拟机试图使用的最大内存量。
removeShutdownHook(Thread hook)
取消注册某个先前已注册的虚拟机关闭挂钩。
runFinalization()
运行挂起 finalization 的所有对象的终止方法。
runFinalizersOnExit(value)
已过时。 此方法本身具有不安全性。它可能对正在使用的对象调用终结方法,而其他线程正在操作这些对象,从而导致不正确的行为或死锁。
totalMemory()
返回 Java 虚拟机中的内存总量。
traceInstructions(on)
启用/禁用指令跟踪。
traceMethodCalls(on)
启用/禁用方法调用跟踪。