Linux java mysql 定时备份和手动备份 (二) quartz定时器

  在第一篇中实现了,手动的,这篇实现自动用到了quartz

  maven在这里 spring用的4.2.8 就不粘出来了

<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.2.1</version>
</dependency>
<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz-jobs</artifactId>
    <version>2.2.1</version>
</dependency>    

pom.xml

  配置文件如下

 1 <bean name="exampleJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
 2         <property name="jobClass" value="cn.goldencis.tsa.common.job.BackupJob" />
 3         <property name="jobDataAsMap">
 4             <map>
 5                 <entry key="timeout" value="5" />
 6             </map>
 7         </property>
 8     </bean>
 9
10     <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
11         <property name="jobDetail" ref="exampleJob" />
12         <property name="cronExpression" value="0 30 0 L * ?" />  <!-- 每月最后一天凌晨30分触发 -->
13     </bean>
14
15     <bean id="quartzfactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
16         <property name="triggers">
17             <list>
18                 <ref bean="cronTrigger" />
19             </list>
20         </property>
21     </bean>
22
23     <bean id="quartzBean" class="cn.goldencis.tsa.system.entity.QuartzBean" >
24         <property name="cronTriggerStr" value="cronTrigger"/>
25         <property name="exampleJobStr" value="exampleJob"/>
26     </bean>

  job类

 1 package cn.goldencis.tsa.common.job;
 2
 3 import org.quartz.JobExecutionContext;
 4 import org.quartz.JobExecutionException;
 5 import org.springframework.scheduling.quartz.QuartzJobBean;
 6
 7 import cn.goldencis.tsa.common.utils.BackupUtil;
 8
 9 /**
10  * 执行数据库备份作业
11  * @author mll
12  * 2017年4月15日下午3:55:48
13  */
14 public class BackupJob  extends QuartzJobBean {
15
16     @Override
17     protected void executeInternal(JobExecutionContext context)
18             throws JobExecutionException {
19         BackupUtil.getInstance().backup(null);
20     }
21 }

BackupJob

  quartz控制器

 1 package cn.goldencis.tsa.common.utils;
 2
 3 import java.text.ParseException;
 4
 5 import org.apache.log4j.Logger;
 6 import org.quartz.CronTrigger;
 7 import org.quartz.JobDetail;
 8 import org.quartz.JobKey;
 9 import org.quartz.SchedulerException;
10 import org.quartz.TriggerKey;
11 import org.quartz.impl.StdScheduler;
12 import org.quartz.impl.triggers.CronTriggerImpl;
13
14 /**
15  * 定时器控制器,版本spring4以上,quartz 2.2
16  * 版本不一致,导致问题挺多的,避免不必要麻烦,不要更改版本
17  * 在此只有更新表达式方法
18  * @author mll
19  * 2017年4月15日下午4:04:42
20  *
21  */
22 public class QuartzHandler {
23
24     final static String DEFAULT_CRON_EXPRESSION="0 30 0 L * ?";                //每月最后一天执行
25
26     private static Logger logger = Logger.getLogger(QuartzHandler.class);
27
28     private static QuartzHandler instance = new QuartzHandler();
29
30     private QuartzHandler() {
31
32     }
33
34     public static QuartzHandler getInstance() {
35         return instance;
36     }
37
38
39     /**
40      * update expression
41      * @author mll
42      * @param cronTrigger
43      * @param sts
44      * @param cronTriggerName
45      * @param jobDetailName
46      * @param crom void
47      */
48     public void updateCron(CronTrigger cronTrigger,StdScheduler sts,String cronTriggerName,String jobDetailName,String cron){
49
50         String strcron = cron;
51         try {
52             logger.info("-----------------------QuartzHandler : start ----------------------");
53             if(StringUtil.isEmpty(strcron)){
54                 strcron = DEFAULT_CRON_EXPRESSION;
55             }
56
57             CronTriggerImpl ct = (CronTriggerImpl) sts.getTrigger(new TriggerKey(cronTriggerName, StdScheduler.DEFAULT_GROUP));
58
59             JobDetail jd = sts.getJobDetail(new JobKey(jobDetailName, StdScheduler.DEFAULT_GROUP));
60
61             sts.unscheduleJob(new TriggerKey(cronTriggerName, StdScheduler.DEFAULT_GROUP));
62
63             sts.deleteJob(new JobKey(jobDetailName, StdScheduler.DEFAULT_GROUP));
64
65             ct.setCronExpression(strcron);
66
67             sts.scheduleJob(jd,ct);
68
69             logger.info("QuartzHandler : Update CronExpression is " + cron);
70         } catch (SchedulerException e) {
71             e.printStackTrace();
72         } catch (ParseException e) {
73             e.printStackTrace();
74         }
75     }
76
77 }

QuartzHandler

  监听器 里面的CronExpressionUtil这个是拼接cron表达式的,自己写吧,不贴出来了

 1 package cn.goldencis.tsa.system.utils;
 2
 3 import javax.annotation.Resource;
 4
 5 import org.quartz.CronTrigger;
 6 import org.quartz.impl.StdScheduler;
 7 import org.springframework.beans.factory.annotation.Autowired;
 8 import org.springframework.context.ApplicationListener;
 9 import org.springframework.context.event.ContextRefreshedEvent;
10 import org.springframework.stereotype.Component;
11 import org.springframework.web.context.ContextLoader;
12
13 import cn.goldencis.tsa.common.utils.CronExpressionUtil;
14 import cn.goldencis.tsa.common.utils.QuartzHandler;
15 import cn.goldencis.tsa.system.dao.AutoBackupMapper;
16 import cn.goldencis.tsa.system.entity.DBBackupMsg;
17 import cn.goldencis.tsa.system.entity.QuartzBean;
18
19 /**
20  * 监听器,负责spring启动后查询数据库,根据数据库信息设定corn
21  * @author mll
22  * 2017年4月15日20:35:20
23  */
24
25 @Component
26 public class DBBackupListener implements ApplicationListener<ContextRefreshedEvent> {
27
28     final String IS_AUTO_FLAG = "1";
29
30     private static DBBackupListener dBBackupListener=new DBBackupListener();
31
32     @Autowired
33     private AutoBackupMapper autoBackupMapper;
34
35     @Resource(name="cronTrigger")
36     private CronTrigger cronTrigger;
37
38     @Resource(name = "quartzfactory")
39     private StdScheduler sts;
40
41     @Resource(name = "quartzBean")
42     private QuartzBean quartzBean;
43
44     private DBBackupListener() {
45         // TODO Auto-generated constructor stub
46     }
47
48     public static DBBackupListener getInstance(){
49         return dBBackupListener;
50     }
51
52     @Override
53     public void onApplicationEvent(ContextRefreshedEvent event) {
54         if(event.getApplicationContext().getParent()==null){
55             this.updateCornEx(null);
56         }
57     }
58
59
60     public void updateCornEx(DBBackupMsg db) {
61         DBBackupMsg mdb=db;
62         if(mdb==null){
63             mdb = autoBackupMapper.selectAutoBackInfo();
64         }else{
65             cronTrigger = (CronTrigger)ContextLoader.getCurrentWebApplicationContext().getBean("cronTrigger");
66             sts = (StdScheduler)ContextLoader.getCurrentWebApplicationContext().getBean("quartzfactory");
67             quartzBean = (QuartzBean)ContextLoader.getCurrentWebApplicationContext().getBean("quartzBean");
68         }
69
70         String cronEx = null;
71         if(IS_AUTO_FLAG.equals(mdb.getDay()) && IS_AUTO_FLAG.equals(mdb.getWeek())){
72             cronEx = CronExpressionUtil.getCronExByDate(mdb.getDayParam(), mdb.getWeekParam());
73         }else if(IS_AUTO_FLAG.equals(mdb.getWeek())){
74             cronEx = CronExpressionUtil.getCronExByWeek( mdb.getWeekParam());
75         }else if(IS_AUTO_FLAG.equals(mdb.getDay())){
76             cronEx = CronExpressionUtil.getCronExByDay( mdb.getDayParam());
77         }
78         //cronEx="*/5 * * * * ?";
79         QuartzHandler.getInstance().updateCron(cronTrigger, sts, quartzBean.getCronTriggerStr(), quartzBean.getExampleJobStr(), cronEx);
80     }
81 }

DBBackupListener

  这个是删除计划,每隔一段时间删除备份的文件

 1 package cn.goldencis.tsa.system.task;
 2
 3 import java.util.ArrayList;
 4 import java.util.List;
 5
 6 import org.springframework.beans.factory.annotation.Autowired;
 7 import org.springframework.scheduling.annotation.Scheduled;
 8 import org.springframework.stereotype.Component;
 9 import org.springframework.transaction.annotation.Transactional;
10
11 import cn.goldencis.tsa.common.utils.BackupUtil;
12 import cn.goldencis.tsa.system.dao.DBBackupMsgMapper;
13 import cn.goldencis.tsa.system.entity.DBBackupMsg;
14
15 /**
16  * delete backup task
17  * @author mll
18  */
19 @Component
20 public class AutoDeleteBackupFileTask {
21
22     @Autowired
23     private DBBackupMsgMapper dBBackupMsgMapper;
24
25     /**
26      * everyday 0:30
27      */
28     @Scheduled(cron = "0 30 0 * * ?")
29     @Transactional
30     public void autoDeleteBackup() {
31         List<DBBackupMsg> list=dBBackupMsgMapper.selectAutoDeleteInfo();                    //select there are 90 days for file info
32         if(list != null && list.size()>0){
33             StringBuilder sb=new StringBuilder();
34             List<String> listS=new ArrayList<String>();
35             for(DBBackupMsg temp : list){
36                 sb.append(temp.getBackupName()+ ",");
37                 listS.add(temp.getBackupName());
38             }
39             dBBackupMsgMapper.deleteByBackupName(listS);
40             BackupUtil.getInstance().deleteBackup(sb.toString());
41         }
42     }
43 }

AutoDeleteBackupFileTask

  以上也就差不多了,不多解释了   还原还写了shell脚本,不过最后说让他们导出自己还原就没用,也没测试这个shell脚本(没测试没测试没测试) ,也粘出来吧,水平有限,将就看

 1 #!bin/bash
 2
 3 #
 4 PORTAL_DIR=$DEPLOY_DIR/tomcat
 5 IPADR=$1
 6 USERNAME=$2
 7 PASSWORD=$3
 8 DATABASE=$4
 9 FILEPATH=$5
10 BACKUPNAME=$6
11 MYSQL="mysql -h "$IPADR" -u "$USERNAME" -p"$PASSWORD
12 RESTORESQL=$MYSQL" "$DATABASE" <"$FILEPATH"/"$BACKUPNAME
13 DROPDATABASE="drop database "$DATABASE
14
15 #
16 #cd $PORTAL_DIR/bin
17 #bash ./shutdown.sh
18 echo "closed server"
19
20 #
21 #$($MYSQL -e  "$DROPDATABASE")
22 echo "$MYSQL -e ‘$DROPDATABASE‘"
23
24 #
25 #$($RESTORESQL)
26 echo "$RESTORESQL"
27
28 #
29 #$(reboot)
30 echo "reboot"

  

时间: 2024-10-20 08:32:15

Linux java mysql 定时备份和手动备份 (二) quartz定时器的相关文章

linux下mysql定时备份数据库

linux下mysql定时备份数据库 (2010-10-21 12:40:17) 转载▼ 标签: 杂谈   一.用命令实现备份 首页进入mysql的bin目录 1.备份数据#mysqldump -uusername -ppassword discuz > discuz_2010-04-01.sql 这样就把discuz数据库所有的表结构和数据备份到discuz_2010-04-01.sql里了,如果数据量大会占用很大空间,这时可以利用gzip压缩数据, 命令如下:#mysqldump -uuse

Linux下MySQL定时按日期备份数据

一.使用mysql内置命令 mysqldump Usage: mysqldump [OPTIONS] database [tables] mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] mysqldump [OPTIONS] --all-databases [OPTIONS] 可以看到能备份全部的数据库,指定的数据库,指定数据库中的表 mysqldump -uUsername -pPassword Database > /va

LINUX环境MySQL定时备份脚本

(0)备份目标备份:tel数据库目录:/mysqlbackup/策略:每天3点 (1)创建一个备份用户,用户名未backup 密码backupmysql>grant all on tel. to 'backup'@'localhost' identified by "backup"; 提供更小的权限:mysql>grant select,show view,lock tables,trigger on tel. to 'backup'@'localhost' identif

Linux下mysql定时自动备份并FTP到远程脚本

1.添加backupmysqleveryday.sh(vi /data/shell/backupmysqleveryday.sh) #!/bin/sh #this shell is user for backup mysql data everyday #author:www.ieliwb.com #path-config base_mysql_path=/data/webserver/mysql/ mysql_dump_path=/data/mysqlbackup/ mnt_back_path

as3+java+mysql(mybatis) 数据自动工具(二)

AutoScript 项目结构如下图 ---AutoScript.java 为程序入口 ---com.autoscript.object 同步 as3 和 java 的数据类 ---com.autoscript.database 同步 as3.java 和 mysql 的建表语句 ---com.autoscript.macro 同步 as3 和 java 的常量定义 ---samples 一些数据.常量配置示例 ---templates 项目中用到了 freemarker,该目录为输出文件模板目

java sql编辑器 动态报表 数据库备份还原 quartz定时任务调度 自定义表单 java图片爬虫

获取[下载地址]   QQ: 313596790   [免费支持更新] 三大数据库 mysql  oracle  sqlsever   更专业.更强悍.适合不同用户群体 [新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统] A 集成代码生成器(开发利器)+快速构建表单;            QQ:313596790 freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块 B 集成阿里巴巴数据库连接池druid;

mysql 数据库定时备份 增量/全备份

实验楼的 MySQL 数据库需要设计一个自动备份方案,能够每周执行一次全备份,每天执行一次增量备份. 数据库名称为 shiyanlou,管理的用户名为 shiyanlou,密码为 shiyanlou.注意需要先手动启动 MySQL 服务. 目标 设计并实现备份方案,任务完成后满足以下要求: MySQL 服务处于运行状态 需要为服务器中的 shiyanlou 用户设定计划任务 计划任务中设定每周的周一凌晨3点执行一次全备份 计划任务中设定每天凌晨3点执行一次增量备份,周一不执行 请不要编写额外的脚

初接触Linux,mysql备份

一.简介 mysqldump是mysql用于转存储数据库的实用程序.它主要产生一个SQL脚本,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT等 它可以把整个数据库装载到一个单独的文本文件中.这个文件包含有所有重建你的数据库所需要的SQL命令.这个命令取得所有的模式并且将其转换成DDL语法(CREATE语句,即数据库定义语句),取得所有的数据,并且从这些数据中创建INSERT语句.这个工具将你的数据库中所有的设计倒转.因为所有的东西都被包含到了一个文本文件中.这个文本

MySQL定时备份数据库

一.MySQL数据备份 1.1. mysqldump命令备份数据 在MySQL中提供了命令行导出数据库数据以及文件的一种方便的工具mysqldump,我们可以通过命令行直接实现数据库内容的导出dump,首先我们简单了解一下mysqldump命令用法: #MySQLdump常用 mysqldump -u root -p --databases 数据库1 数据库2 > xxx.sql 1.2. mysqldump常用操作示例 1.备份全部数据库的数据和结构 mysqldump -uroot -p12