java Spring調整Quartz定時備份MySQL數據庫

   

    

        利用QuartZ第三方插件定時備份MySQL數據庫,首先要實現能夠單獨備份db的java程序,其具體的思路是,先調用配置文件的相關屬性值來動態生成要執行的批處理命令,

        將其寫入1個bat文件中,然後調用java程序執行這個批處理執行語句:mysqldump -u root -p 123456 sshweb >E:\mysql_backup\2013-1-3_15_29_00.sql

 

       1. .配置文件          

jdbc.driverClassName= com.mysql.jdbc.Driver
jdbc.url= jdbc:mysql://localhost:3306/sshweb?useUnicode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456
jdbc.database=sshweb
jdbc.backupPath=E\:\\Elog4j_log\\mysql_backup\\
//mysql的根目錄
mysql.lumu=E:
//mysql的bin目錄
mysql.binPath=E\:\\music_flash\\NPMserv\\MySQL5.1\\bin

       2. 讀取配置文件的工具類          

package com.util;

import java.util.Properties;

import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

/**
 * <span style="color:#33cc00;">讀取properties文件的工具類
</span> * 
 */
public class PropertiesUtil {
	private String fileName;

	public PropertiesUtil(String fileName) {
		this.fileName = fileName;
	}

	public String readProperty(String name) {
		Resource res = new ClassPathResource(fileName);
		Properties p = new Properties();
		try {
			p.load(res.getInputStream());
			// System.out.println(p.getProperty(name));
		} catch (Exception e) {
			e.printStackTrace();
		}

		return p.getProperty(name);

	}
}

      3. 備份的mysql的java類         

package com.util;

import java.io.*;
import java.text.DateFormat;

import java.util.Date;

import org.apache.log4j.Logger;

import com.config.Config;

/**
 * <span style="color:#33cc00;">數據庫工具類</span>
 * 
 * @author Administrator
 * 
 */
public class MysqlUtil {
	static Logger logger = Logger.getLogger(MysqlUtil.class);

	/**
	 * 備份數據庫
	 */
	public static void exportDataBase() {

		Date now = new Date();
		DateFormat df = DateFormat.getDateTimeInstance();
		String dbName = df.format(now) + ".sql";
		dbName = dbName.replaceAll(":", "_");
		dbName = dbName.replaceAll(" ", "_");
		PropertiesUtil pr = new PropertiesUtil("jdbc.properties");
		String user = pr.readProperty("jdbc.username");
		String password = pr.readProperty("jdbc.password");
		String database = pr.readProperty("jdbc.database");
		String filepath = pr.readProperty("jdbc.backupPath") + dbName;

		
		// 創建執行的批處理
		FileOutputStream fout=null;
		OutputStreamWriter writer=null;
		try {
			String batFile = Config.PROJECT_PATH + "//backup_databae.bat";
			fout = new FileOutputStream(batFile);
			writer = new OutputStreamWriter(fout, "utf8");
			StringBuffer sb = new StringBuffer("");
			sb.append(pr.readProperty("mysql.lumu")+" \r\n");
			sb.append("cd "+pr.readProperty("mysql.binPath")+" \r\n");
			sb.append("mysqldump -u "+user+" -p"+password+" "+database+" >"+filepath+"\r\n");
			sb.append("exit");
			String outStr = sb.toString();
			writer.write(outStr);
			writer.flush();
			writer.close();
			fout.close();


			Runtime.getRuntime().exec(" cmd /c start " + batFile);
			logger.info("備份數據庫成功!");
		} catch (IOException e) {
			e.printStackTrace();
			logger.error("備份數據庫失敗!", e);
		}finally{
			writer=null;
			fout=null;
		}

	}
}

     4. 整合QuartZ        

  <!-- 數據庫定時備份服務  start-->
    <!-- 定義調用對象和調用對象的方法 -->  
    <bean id="backupDatabaseJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject">
            <ref bean="mysqlService"/>
        </property>
        <property name="targetMethod">
            <value>BackMySQL</value>
        </property>
    </bean>
    <!--定義觸發時間  -->  
    <bean id="backupDatabaseTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail">
            <ref bean="backupDatabaseJobDetail"/>
        </property>
         <!-- cron表達式 --> 
        <property name="cronExpression">
            <!-- 每隔90分鐘備份一次-->
            <value>0 0/90 * * * ?</value>
        </property>
    </bean>   
    <!-- 總管理類 如果將lazy-init='false'那麼容器啓動就會執行調度程序 -->  
   <bean id="backupDatabaseScheduler" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="backupDatabaseTrigger"/>
            </list>
        </property>
   </bean>
    <!-- 數據庫定時備份服務  end --> 


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章