最多发10次? 是永久性的还是当前回话中允许发10次?? 如果是前者需要保存数据库中,后者只需要在session中判断一下。
然后关于设置 多少分钟分钟发一次,这个配置信息可以放在配置文件中,也可以存储在数据库中。
至于限制多少分钟发送一次可以将所有的发送记录记录一下,然后获取最后一个发送的时间与当前发送的时间比较一下,如果小于配置的时间分钟,那么不允许发送,反之允许发送。。
然后关于设置 多少分钟分钟发一次,这个配置信息可以放在配置文件中,也可以存储在数据库中。
至于限制多少分钟发送一次可以将所有的发送记录记录一下,然后获取最后一个发送的时间与当前发送的时间比较一下,如果小于配置的时间分钟,那么不允许发送,反之允许发送。。
服务端获取登录用户的,每次发布index++一次,这个可以定义在外面,如果index >= 10 就不能发了
1、Action插入数据后执行:
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MINUTE, 3 * 5);//3分钟每次*5次 = 15分钟后结束
SchedulerManager.updateTime("0 3 * * * ?" , calendar.getTime());
2、SchedulerManager
//修改定时器执行时间
//dotime 配置文件里面 - 是配置jobDetail和CronExpression的
public static void updateTime(String expression,Date endDate){
try {
/*
* 通过Scheduler.getTrigger("truggerName","GroupName")得到CronTriggerBean
* 通过setCronExpression方法设置时间
* setEndTime(endDate);
* */
CronTriggerBean trigger = (CronTriggerBean) scheduler.getTrigger("dotime", Scheduler.DEFAULT_GROUP);
trigger.setCronExpression(expression);
trigger.setEndTime(endDate);
System.out.println(trigger.getName() + ":"+ trigger.getCronExpression());
scheduler.rescheduleJob("dotime", Scheduler.DEFAULT_GROUP, trigger);
} catch (Exception e) {
e.printStackTrace();
}
}
3、spring 配置
<!-- 定时任务START -->
<!-- 指定job类 -->
<bean id="quartjob" class="com.hjl.action.WebAction" ></bean> <!-- 指定Method和job -->
<bean id="objAndmethod"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" lazy-init="false">
<property name="targetObject" ref="quartjob" /> <!-- 调用的job -->
<property name="targetMethod" value="work" /> <!-- 调用的Method -->
<property name="concurrent" value="false"/>
</bean>
<!-- 定义CronExpression表达式 以及jobDetail-->
<bean id="dotime" class="org.springframework.scheduling.quartz.CronTriggerBean" lazy-init="false">
<property name="jobDetail">
<ref bean="objAndmethod" />
</property>
<property name="cronExpression">
<!-- 默认5秒钟执行一次 -->
<value>10,15,20,25,30,35,40,45,50,55 * * * * ?</value>
</property>
</bean>
<!-- 管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 -->
<bean id="startQuartz" lazy-init="false" autowire="no"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers" ref="dotime" />
<property name="autoStartup" value="false"/>
</bean>
<!-- 注入scheduler -->
<bean id="updatetime" class="com.hjl.task.SchedulerManager" lazy-init="false">
<property name="scheduler" ref="startQuartz" />
</bean>
<!-- 定时任务 END -->
4、就是调用的这个work方法了
<property name="targetMethod" value="work" /> <!-- 调用的Method -->
但是在这个方法中不知道怎么获取当前触发任务的用户 或者 当前插入的数据 哪位大神给个提示....
还有点新的小问题 自己在琢磨琢磨就可以了
最终 我在public static void updateTime(String expression,Date endDate,Map 我要的数据){}
<bean id="quartjob" class="com.hjl.action.WebAction" >
<property name="scheduler" ref="startQuartz"></property><!-- 在把这个注入进去 -->
</bean>在work中在获取这个 trigger get到我要的数据就行了剩下的问题就是 新的任务执行的时候 ,其他用户未结束的任务没到执行时间 一样会执行。
我在研究研究 实在不行就用另一个办法先解决了 慢慢在研究可能一开始我没说明白 ,我要的效果是 用户设定几分钟自动重发自己刚发过的数据 不用用户操作 就算退出了也会操作