playframework自带任务调度 http://www.playframework.cn/wiki/Scheduled%20Job
不设置编码会造成中文乱码
package jobs;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import play.Play;
import play.jobs.Job;
import play.jobs.On;
/**
* 自动备份数据库:每天晚上2.00备份一次,日期对应文件名 7天一次全备份,一天一次增量备份
* backup_err.log记录每天自动备份错误日志
* @author wxl
*/
@On("0 0 12 * * ?")
public class DatabaseBackup extends Job{
@Override
public void doJob() throws Exception {
Calendar calendar = Calendar.getInstance();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy_MM_dd_HHmmss");
String currentTime = dateFormat.format(calendar.getTime());
String command = " mysqldump -h 192.168.1.61 -uroot --default-character-set=gbk -pmysql passionlife ";
//当前周次
String week = calendar.get(Calendar.WEEK_OF_YEAR)+"";
System.out.println("备份开始");
try {
long startTime = System.currentTimeMillis();
Runtime rt = Runtime.getRuntime();
Process child = rt.exec(command);
InputStream in = child.getInputStream();
InputStreamReader xx = new InputStreamReader(in, "gbk");
FileOutputStream fout = new FileOutputStream(new File(Play.applicationPath+"/sqlData/data/"+week+".sql"));
OutputStreamWriter writer = new OutputStreamWriter(fout, "gbk");
dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
writer.write("-- 备份时间 " + dateFormat.format(calendar.getTime()) + "\r\n");
String inStr;
BufferedReader br = new BufferedReader(xx);
// 实时写入文件很重要,防止导致Java的堆栈内存溢出。
while ((inStr = br.readLine()) != null) {
writer.write(inStr);
writer.write("\r\n");
}
writer.write("\r\n--备份用时 " + (System.currentTimeMillis() - startTime) + "ms\r\n");
writer.flush();
in.close();
xx.close();
br.close();
writer.close();
fout.close();
} catch (Exception e) {
PrintStream print = null;
try {
print = new PrintStream(new File(Play.applicationPath+"/sqlData/log/"+currentTime+"backup_err.log"));
dateFormat.applyPattern("yyyy-MM-dd HH:mm:ss");
currentTime = dateFormat.format(calendar.getTime());
print.println(currentTime + " 备份失败");
e.printStackTrace(print);
print.flush();
} catch (IOException e2) {
} finally {
if (print != null) {
print.close();
}
}
}
}
}