其实原理很简单,就是将自己的项目复制一份保存到其他地方,已达到备份的作用,另一个要实现的就是什么时候进行备份,这里我想在每次tomcat重新启动的时候进行备份(因为经常的进行重启,所以频率比较高)
1.新建一个类并集成httpServlet,要实现一个init()方法,这个方法中的内容就是当tomcat重新启动时执行的内容,这里我将自己的两个项目按照时间戳进行了备份
package com.cn.data;
/**
* 随系统启动,设置将指定盘符目录内容复制到其他目录下(自动备份)
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import javax.servlet.http.HttpServlet;
public class Files extends HttpServlet {
public void init() {
Acquisition_time ac = new Acquisition_time();
String golvon_path = "D:\\Installation_path\\Myeclipse_workspace\\Golvon";//要备份的路径
String golvon_dest_path = "D:\\GolvonBackups\\golvon"+ac.time_years();//备份的目标路径
File src = new File(golvon_path);
File dest = new File(golvon_dest_path);
String golvonImg_path = "D:\\Installation_path\\Myeclipse_workspace\\GolvonImage";
String golvonImg_dest_path = "D:\\GolvonBackups\\golvonImage"+ac.time_years();
File golvonImg_src = new File(golvonImg_path);
File golvonImg_dest = new File(golvonImg_dest_path);
try {
copyFolder(src, dest);//备份第一个项目
copyFolder(golvonImg_src,golvonImg_dest);//备份第二个项目
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 当tomcat重新启动时,将进行备份
*/
private static void copyFolder(File src, File dest) throws IOException {
if (src.isDirectory()) {
if (!dest.exists()) {
dest.mkdir();
}
String files[] = src.list();
for (String file : files) {
File srcFile = new File(src, file);
File destFile = new File(dest, file);
// 递归复制
copyFolder(srcFile, destFile);
}
} else {
InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dest);
byte[] buffer = new byte[1024];
int length;
while ((length = in.read(buffer)) > 0) {
out.write(buffer, 0, length);
}
in.close();
out.close();
}
}
}
2.我们需要配置web.xml,在web.xml中声明一个servlet
<servlet>
<servlet-name>GenerateData</servlet-name>
<servlet-class>com.cn.data.Files</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
3.这样每次重新启动之后就可以自动在目标目录下复制一份代码了,而且以后有什么想要随系统启动运行的方法也可以通过init中进行调用