SSH框架,xml配置实现动态定时器
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!--注册定时执行任务实体-->
<!-- 日定时器 -->
<bean id="runkQuartz" class="com.idazui.lobby.quartz.runkQuartz">
<property name="daoRepo">
<ref bean="daoRepo"/>
</property>
</bean>
<!-- 注册定时器信息 -->
<bean id="taskInfo" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 防止定时任务冲突执行,延迟作用 -->
<property name="concurrent" value="false" />
<!-- 指定要执行的定时任务类 这里是runkQuartz -->
<property name="targetObject">
<ref local="runkQuartz"/>
</property>
<!-- 指定定时器任务类要执行的方法名称 这里是execute -->
<property name="targetMethod">
<value>run</value>
</property>
</bean>
<!-- 配置定时器任务的调度器 -->
<bean id="quartzTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<!-- 声明要运行的实体 -->
<property name="jobDetail">
<ref bean="taskInfo"/>
</property>
<!-- 设置运行时间 -->
<property name="cronExpression">
<!-- 每天零点-->
<value>0 0 0 * * ?</value>
<!-- 每1分钟执行一次-->
<!-- <value>0 */1 * * * ?</value> -->
</property>
</bean>
<!-- 周定时器 -->
<bean id="weekRunkQuartz" class="com.idazui.lobby.quartz.weekRunkQuartz">
<property name="daoRepo">
<ref bean="daoRepo"/>
</property>
</bean>
<bean id="weekinfo" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 防止定时任务冲突执行,延迟作用 -->
<property name="concurrent" value="false" />
<!-- 指定要执行的定时任务类 这里是runkQuartz -->
<property name="targetObject">
<ref local="weekRunkQuartz"/>
</property>
<!-- 指定定时器任务类要执行的方法名称 这里是execute -->
<property name="targetMethod">
<value>run</value>
</property>
</bean>
<bean id="weekrunk" class="org.springframework.scheduling.quartz.CronTriggerBean">
<!-- 声明要运行的实体 -->
<property name="jobDetail">
<ref bean="weekinfo"/>
</property>
<!-- 设置运行时间 -->
<property name="cronExpression">
<!-- 每周日零点 -->
<!-- <value>*/5 * * * * ?</value> -->
<value>0 0 0 ? * MON</value>
<!-- <value>0 0 0 ? * WED *</value> -->
<!-- <value>0 59 23 ? * WED</value> -->
</property>
</bean>
<!-- 月定时器 -->
<bean id="monthRunkQuartz" class="com.idazui.lobby.quartz.monthRunkQuartz">
<property name="daoRepo">
<ref bean="daoRepo"/>
</property>
</bean>
<bean id="monthinfo" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 防止定时任务冲突执行,延迟作用 -->
<property name="concurrent" value="false" />
<!-- 指定要执行的定时任务类 这里是runkQuartz -->
<property name="targetObject">
<ref bean="monthRunkQuartz"/>
</property>
<!-- 指定定时器任务类要执行的方法名称 这里是execute -->
<property name="targetMethod">
<value>run</value>
</property>
</bean>
<bean id="monthrunk" class="org.springframework.scheduling.quartz.CronTriggerBean">
<!-- 声明要运行的实体 -->
<property name="jobDetail">
<ref bean="monthinfo"/>
</property>
<!-- 设置运行时间 -->
<property name="cronExpression">
<!-- 相当于每月第一天零点-->
<!-- <value>0 0 0 L * ? *</value> -->
<!-- 每月最后一天23:59 -->
<!-- <value>0 59 23 L * ?</value> -->
<!-- 每月一号零点 -->
<value>0 0 0 1 * ?</value>
</property>
</bean>
<!-- 心跳监听定时器 -->
<bean id="tokenQuartz" class="com.idazui.lobby.quartz.validUserToken">
<property name="daoRepo">
<ref bean="daoRepo"/>
</property>
</bean>
<bean id="tokeninfo" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 防止定时任务冲突执行,延迟作用 -->
<property name="concurrent" value="false" />
<!-- 指定要执行的定时任务类 这里是runkQuartz -->
<property name="targetObject">
<ref bean="tokenQuartz"/>
</property>
<!-- 指定定时器任务类要执行的方法名称 这里是execute -->
<property name="targetMethod">
<value>run</value>
</property>
</bean>
<bean id="tokenrunk" class="org.springframework.scheduling.quartz.CronTriggerBean">
<!-- 声明要运行的实体 -->
<property name="jobDetail">
<ref bean="tokeninfo"/>
</property>
<!-- 设置运行时间 -->
<property name="cronExpression">
<!-- 每10秒执行一次-->
<value>0/10 * * * * ?</value>
</property>
</bean> <!-- 这个类用来做需要完成的业务-->
<bean id="doAutoPush" class="com.idazui.lobby.service.DoAutoPush">
<property name="daoRepo">
<ref bean="daoRepo"/>
</property>
</bean>
<!-- 定时任务 -->
<!-- 定义调用对象和调用对象的方法,这个配置和普通的一样的 -->
<bean id="jobtask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 调用的类 -->
<property name="targetObject">
<ref bean="doAutoPush" />
</property>
<!-- 调用类中的方法 -->
<property name="targetMethod">
<value>autoPush</value>
</property>
<property name ="concurrent" value ="false" />
</bean>
<!-- 定义触发时间 ,这边就不同了,这里必须将时间设置成无限长,因为我们要去读取数据库的时间来做为定时器的触发时间-->
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="jobtask" />
</property>
<!-- cron表达式 -->
<property name="cronExpression">
<!-- cron将时间设置成无限长 -->
<value>1 0 0 1 1 ? 2099</value>
</property>
</bean> <!-- 注册监听器 -->
<bean id="registerQuartz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<!-- 注册定时器实体 集合 -->
<property name="triggers">
<list>
<ref bean="quartzTrigger"/>
<ref bean="weekrunk"/>
<ref bean="monthrunk"/>
<ref bean="tokenrunk"/>
<ref bean="cronTrigger"/>
</list>
</property>
</bean> <!--这里就是这里,就这个配置搞了我一天,这个类是用来设置触发时间的,调用这个类的init的方法来进行对时间的配置-->
<!--这个对象一定要注入,这样类才能进行管理,还有在类型要用get set方法,不然会报错。
<property name="scheduler" ref="registerQuartz" /> -->
<bean id="pushServiceImpl" class="com.idazui.lobby.service.DoAutoPushServiceImpl" lazy-init="false" init-method="init">
<property name="scheduler" ref="registerQuartz" />
</bean>
</beans>
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.text.ParseException; import org.apache.log4j.Logger;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.springframework.scheduling.quartz.CronTriggerBean;
import org.springframework.stereotype.Service; /**
* 功能说明:设置下发定时时间service接口实现类
*
* 创建人:wyb
*
*
*/
public class DoAutoPushServiceImpl{
protected Logger log = Logger.getLogger(getClass().getName()); //这个是总管理类
private Scheduler scheduler; public void init(){ try { CronTriggerBean trigger = (CronTriggerBean) scheduler.getTrigger("cronTrigger", Scheduler.DEFAULT_GROUP);
String originConExpression = trigger.getCronExpression();
//以下几行用来测试时间用
/* Date date=new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat rf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = "17:03:00";
String str2=df.format(date);
System.out.println(str2);
String bb=str2+" "+str;
Date shijian = rf.parse(bb);*/
//从fan()方法获取规定时间段内的随机时间
Date shijian=fan();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = format.format(shijian).substring(11, 19);
//因为是要每天做一次定时任务,所以我截取了字符串进行了拼接格式
String[] strTime = strDate.split(":");
String pushTime = strTime[2]+" "+strTime[1]+" "+strTime[0]+" * * ? ";
//以下就是重新对时间的设置,这样就可以达到动态设置效果。
trigger.setCronExpression(pushTime);
scheduler.rescheduleJob("cronTrigger", Scheduler.DEFAULT_GROUP, trigger);
} catch (SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} /* private String getCronExceptionDB() throws ParseException{
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long timeNow= System.currentTimeMillis()/1000;
long timeLose=(System.currentTimeMillis()+2*60*60*1000)/1000;
//long timeLose=System.currentTimeMillis()+2*60*60*1000;
System.out.println(timeNow+" "+timeLose);
String dateNow=sdf.format(new Date((timeNow)*1000));
Date shijian=fan();
String ti=getCron(shijian);
return ti;
}*/
/***
*
* @param date
* @param dateFormat : e.g:yyyy-MM-dd HH:mm:ss
* @return
*/
public static String formatDateByPattern(Date date,String dateFormat){
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
String formatTimeStr = null;
if (date != null) {
formatTimeStr = sdf.format(date);
}
return formatTimeStr;
}
/***
* convert Date to cron ,eg. "0 06 10 15 1 ? 2014"
* @param date : 时间点
* @return
*/
public String getCron(java.util.Date date){
String dateFormat="ss mm HH dd MM ? yyyy";
return formatDateByPattern(date, dateFormat);
}
public Date fan() throws ParseException{
/* Date date=new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat rf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = "06:00:00";
String str2=df.format(date);
System.out.println(str2);
String bb=str2+" "+str;
Date today = rf.parse(bb); */
log.debug("进入随机时间方法");
Date today=timec();
log.debug("时间格式:"+today);
return today;
}
public Date timec() throws ParseException{
Date date=new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat rf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//时间段开始
String str = "06:00:00";
String str2=df.format(date);
String bb=str2+" "+str;
Date one=rf.parse(bb);
long timeone=(one.getTime())/1000;
/* System.out.println(timeone);
System.out.println((timeone)/1000);*/
//时间段结束
String strone = "12:00:00";
String strtwo=df.format(date);
String two=strtwo+" "+strone;
Date newdate=rf.parse(two);
long timetwo=(newdate.getTime())/1000;
/* System.out.println(timetwo);
System.out.println((timetwo)/1000);*/
Random ra=new Random();
int onenum=(int)timetwo;
int twonum=(int)timeone;
int three=onenum-twonum;
/* System.out.println(onenum+" **");
System.out.println(twonum+" ^^");*/
int result=ra.nextInt(three)+twonum;
//System.out.println(result);
Date ndate=new Date((result)*1000L);
log.debug("最终获取时间为:"+ndate);
return ndate;
}
public Scheduler getScheduler() {
return scheduler;
} public void setScheduler(Scheduler scheduler) {
this.scheduler = scheduler;
} }
import java.io.File;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random; import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger; public class DoAutoPush {
private static Logger m_logger = Logger.getLogger(DoAutoPush.class);
private DaoRepo daoRepo;
public DaoRepo getDaoRepo() {
return daoRepo;
}
public void setDaoRepo(DaoRepo daoRepo) {
this.daoRepo = daoRepo;
}
public void autoPush(){
System.out.println("成功了");
} }
SSH框架,xml配置实现动态定时器的更多相关文章
- SSH框架中配置log4j的方法
SSH框架中使用log4j的方便之处 1. 动态的改变记录级别和策略,即修改log4j.properties,不需要重启Web应用,这需要在web.xml中设置一下.2. 把log文件定在 /WEB- ...
- Java web.xml 配置技巧—动态欢迎页地址
我们的 Java Web 项目在配置web.xml 欢迎页地址默认是index.html .index.jsp ,不知道有人注意过没有,如果我要配置成/index/user.action 或者 ...
- mybatis使用注解替代xml配置,动态生成Sql
mybatis使用注解替代xml配置时,遇到判断条件是否为null或者为空时,@Select很难搞定,不知道怎么办? mybatis3中增加了使用注解来配置Mapper的新特性,使用 SelectPr ...
- SSH框架项目配置和启动的加载顺序及请求的执行顺序
1:======配置和启动====== (1)配置web.xml 配置<context-param>,其中内容为Spring的配置文件applicationContext.xml.注意&l ...
- SSH框架整合配置所需JAR包(SSH整合)
转载于:http://www.cnblogs.com/kaige123/p/5719662.html Hibernate Jar: 1.hibernate3.jar,这个是hibernate3.0的核 ...
- SSH框架中配置Hibernate使用proxool连接池
一.导入proxool.jar包 案例用的是proxool-0.8.3.jar,一般通过MyEclipse配置的SSH都会包含这个jar,如果没有,就去网上搜下下载导入就好了. 二.新建Proxool ...
- SSH框架的配置
^_^阅读本文前请先浏览 : http://www.cnblogs.com/LiJinfu/p/5842890.html 步骤 : 一.编写web.xml配置文件 该文件路径在项目文件下的WebCon ...
- SSH框架 spring 配置中的: scope="prototype"
"可以利用容器的scope="prototype"来保证每一个请求有一个单独的Action来处理, 避免struts中Action的线程安全问题." 这句话怎么 ...
- Spring框架xml配置中属性ref与value的区别
1.spring批量扫描mybatis的mapper,使用value 2.spring管理mybatis的单个mapper,用的是ref 虽然引用的是同一个bean,但两个对象的属相类型明显不一样,一 ...
随机推荐
- 内存可用性判断 IsBadCodePtr IsBadReadPtr 等等
程序异常崩溃,多数是有内存访问异常引起.为定位崩溃位置通常考虑加强内存访问控制,如此有必要进行内存可用性判断,从<Windows核心编程>中看到内存指针的可用性判断方法,感觉还不错,此处记 ...
- DataTable,DataView 排序和使用
我们都知道在Sql Server可以用order by来排序,所以很多朋友在DataTable中排序也想到了用order by关键字.但这样实现是比较困难的,下面,我们讲解一种比较简单的方法: 控制台 ...
- Delphi&C#代码模拟“显示桌面”的功能(使用CreateOleObject('Shell.Application'))
今天有人问我:“用shell打开文件(显示桌面.scf)的方式还是用模拟键盘(Win+D)显示桌面”这应该有更好的方法,就搜了搜,关键字定位“ToggleDesktop”因为显示桌面.scf的内容是: ...
- qt在windows下的udp通信(最简单)
qt编程:windows下的udp通信 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:win7 开发环境:qt 功能: 用udp进行收发 ...
- 创建服务消费者(Feign)
概述 Feign 是一个声明式的伪 Http 客户端,它使得写 Http 客户端变得更简单.使用 Feign,只需要创建一个接口并注解.它具有可插拔的注解特性,可使用 Feign 注解和 JAX-RS ...
- UI-grid 表格内容可编辑(enableCellEdit可指定列编辑)
在网上搜索了很多关于UI-Grid的问题 很遗憾好少啊啊啊 不过有API还是比较欣慰的 官方API:UI Grid 还有一位大佬的翻译的中文API:angularjs ui-grid中文api 行编辑 ...
- 推荐一个Redis管理工具
Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理.它支持字符串.哈希表.列表.集合.有序集合,位图,hyperloglogs等数据类型.内置复制.Lu ...
- Python自学day-11
一.RabbitMQ概述 RabbitMQ是一种消息队列,是一个公共的消息中间件,用于不同进程之间的通讯. 除了RabbitMQ以外,还有ZeroMQ.ActiveMQ等等. 前面学习了两种队列: 线 ...
- Spark学习之路(九)—— Spark SQL 之 Structured API
一.创建DataFrame和Dataset 1.1 创建DataFrame Spark中所有功能的入口点是SparkSession,可以使用SparkSession.builder()创建.创建后应用 ...
- spring boot 2.x 系列 —— spring boot 整合 servlet 3.0
文章目录 一.说明 1.1 项目结构说明 1.2 项目依赖 二.采用spring 注册方式整合 servlet 2.1 新建过滤器.监听器和servlet 2.2 注册过滤器.监听器和servlet ...