spring 有个定时器 通过定时器 设置时间来自动备份数据库文件
时间是通过数据库读取出来的
当你修改了数据库的时间
只有在重启tomcat才能执行新的时间
这里直接读取数据库的时间
第一步:
<!-- 业务调度者 -->
<bean id="schedulerJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="scheduleInfoAction"/> 执行对象
<property name="targetMethod" value="reScheduleJob"/> 执行方法
<property name="concurrent" value="false"/>
</bean>
<!-- 调度者 自己手写 因为要修改时间 -->
<bean id="cronTrigger" class="com.business.backdata.InitTime" >
<property name="jobDetail" ref="schedulerJobDetail"/>
<!-- <property name="cronExpression"> 系统配置的时间 这里不用从数据库读取时间
<value>0/10 * * * * ?</value>
</property> -->
<property name="scheduleInfoManager" ref="scheduleInfoManager"/>
</bean>
<!-- 调度工厂 -->
<bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false">
<property name="triggers">
<list>
<ref local="cronTrigger"/>
</list>
</property>
</bean>
<!-- 获取数据库值的类 -->
<bean id="scheduleInfoManager" class="com.business.backdata.ScheduleInfoManager"/>
<!-- 执行业务方法-->
<bean id="scheduleInfoAction" class="com.business.backdata.ScheduleData">
<property name="scheduleInfoManager" ref="scheduleInfoManager"/>
</bean>
第二步:初始化时间(从数据库获取时间)
public class InitTime extends CronTriggerBean {//必须继承CronTriggerBean
private ScheduleInfoManager scheduleInfoManager;//注入对象
public String getCronExpressionFromDB(){
String sql="from SysParamInfo where sysParamCode='sys_databack_pl'";
List<SysParamInfo> scheduleList =scheduleInfoManager.queryScheduleInListBySql(sql);
SysParamInfo scheduleInfo = (SysParamInfo)scheduleList.get(0);
String dbCronExpression = scheduleInfo.getSysParamValue();
String corn="";
if(dbCronExpression!=null && !"".equals(dbCronExpression)){//数据库的时间和配置的时间不一样
//数据库时间格式为 month;2;10:10:00 每月2日10点10分
//week;2;10:10:00 每周星期二10点10分
//day;10:00:00 每天10点
//spring的定时器baidu上搜一下就可以找到怎么定义时间
String [] s=dbCronExpression.split(";");
if(s[0].equals("day")){
String [] t=s[1].split(":");
corn=t[2]+" "+t[1]+" "+t[0]+" *"+" *"+" ?";
}else if(s[0].equals("week")){//每周
//星期几
String w=s[1];
//时间
String [] t=s[2].split(":");
corn=t[2]+" "+t[1]+" "+t[0]+" ?"+" * "+w;
}else if(s[0].equals("month")){
//月份
String m=s[1];
//时间
String [] t=s[2].split(":");
corn=t[2]+" "+t[1]+" "+t[0]+" "+m+" *"+" ?";
}
}
return corn;
}
public ScheduleInfoManager getScheduleInfoManager() {
return scheduleInfoManager;
}
public void setScheduleInfoManager(ScheduleInfoManager scheduleInfoManager) {
this.scheduleInfoManager = scheduleInfoManager;
String cronExpression=getCronExpressionFromDB();
try {
setCronExpression(cronExpression);//填充手下不知道
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
第三步:操作数据库类
public class ScheduleInfoManager {
@Autowired
private SysParamInfoService sysParamInfoService;
public List<SysParamInfo> queryScheduleInListBySql(String sql){
List<SysParamInfo> list=new ArrayList<SysParamInfo>();
list=sysParamInfoService.fingSystemInfo(sql);
return list;
}
}
第四步:业务类
public class ScheduleData extends Action {
@Autowired
private CopyDatabaseService copyDatabaseService;
private ScheduleInfoManager scheduleInfoManager;
String user = "jxkh"; // 数据库帐号
String pass = "jxkh"; // 登陆密码
String database = "st_jxkh"; // 需要备份的数据库名
public void reScheduleJob() throws SchedulerException, Exception{
addCopyDatabase();
}
private void addCopyDatabase() {
String path="D:\\backdata";
File isyou=new File(path);
if(!isyou.exists()){
isyou.mkdirs();
}
Date date=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyMMddHHmmss");
SimpleDateFormat sdfs=new SimpleDateFormat("yy-MM-dd HH:mm:ss");
String paths=path+"\\auto-stjxkh-"+sdf.format(date)+".sql";
try {
if(BackUp.backup(paths, user, pass, database))//BackUp.backup()
{
CopyDatabase copyDatabases=new CopyDatabase();
copyDatabases.setCopyPath(paths);
copyDatabases.setCopyDate(sdfs.format(date));
copyDatabases.setCopyName(sdf.format(date).toString());
copyDatabaseService.addCopyDatabase(copyDatabases);
}else
{
}
} catch (Exception e) {
e.printStackTrace();
}
}
public ScheduleInfoManager getScheduleInfoManager() {
return scheduleInfoManager;
}
public void setScheduleInfoManager(ScheduleInfoManager scheduleInfoManager) {
this.scheduleInfoManager = scheduleInfoManager;
}