最近需要對服務器上的數據庫進行定時備份和刪除,在網上查了相關資料后完成了,現將相關代碼記錄下來。
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
// TODO Auto-generated method stub
logJobStart("backup day job");
PrintWriter printWriter = null;
BufferedReader bufferedReader = null;
try {
//初始化
Properties webPro = new Properties();
Properties dbPro = new Properties();
// 使用ClassLoader加載properties配置文件生成對應的輸入流
InputStream web = BackupDayJob.class.getClassLoader().getResourceAsStream("webConfig.properties");
InputStream db = BackupDayJob.class.getClassLoader().getResourceAsStream("dbconfig.properties");
// 使用properties對象加載輸入流
webPro.load(web);
dbPro.load(db);
//獲取key對應的value值
String savePath = webPro.getProperty("savePath");
String databaseName = webPro.getProperty("databaseName");
String hostIP = webPro.getProperty("hostIP");
String userName = dbPro.getProperty("jdbc_username");
String password = dbPro.getProperty("jdbc_password");
String fileName = DateHelp.DateToString(new Date(), "yyyyMMdd") + ".sql";
File saveFile = new File(savePath);
if (!saveFile.exists()) {// 如果目錄不存在
saveFile.mkdirs();// 創建文件夾
}
//首先刪除7天前的數據
Date date = DateHelp.setDay(new Date(), -7);
File[] files = saveFile.listFiles();
for (int i=0;i<files.length;i++){
File file = files[i];
if (new Date(file.lastModified()).before(date)){
file.delete();
}
}
//備份新的數據
if(!savePath.endsWith(File.separator)){
savePath = savePath + File.separator;
}
printWriter = new PrintWriter(new OutputStreamWriter(new FileOutputStream(savePath + fileName), "utf8"));
Process process = Runtime.getRuntime().exec("mysqldump -h" + hostIP + " -u" + userName + " -p" + password + " --set-charset=UTF8 " + databaseName);
InputStreamReader inputStreamReader = new InputStreamReader(process.getInputStream(), "utf8");
bufferedReader = new BufferedReader(inputStreamReader);
String line;
while((line = bufferedReader.readLine())!= null){
printWriter.println(line);
}
printWriter.flush();
}catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bufferedReader != null) {
bufferedReader.close();
}
if (printWriter != null) {
printWriter.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
logJobEnd("backup day job");
}
以上是刪除和備份的代碼,接下來還需要配置quartz設置一個定時任務。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<context:component-scan base-package="定時文件路徑" />
<bean id="backupDayJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value="doc.web.job.BackupDayJob" />
</bean>
<bean id="backupTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="backupDayJob" />
<property name="cronExpression" value="0 0 3 * * ?" />
</bean>
<bean id="jobFactory" class="doc.web.job.JobFactory"></bean>
<bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="backupTrigger" />
</list>
</property>
<property name="jobFactory" ref="jobFactory"></property>
</bean>
</beans>
