系统使用SSH2架构,每条记录都有一个状态位,若某条记录处于某个状态过长时间(超时),则需进行某些操作,请问这种超时提醒机制应该如何实现?
  跪求各位大神指导!谢谢~

解决方案 »

  1.   

    使用timer定时器 或者 Quartz - 作业调度框架    具体的自己百度谷歌
      

  2.   


    之前用Quartz做过定时清空数据库某个字段的功能,每天固定某个时间执行。
    这里并非固定时间执行,而是从状态位修改成功后开始计算,请问应该在哪里判断状态超时然后再执行动作?状态位修改在database层实现。
      

  3.   


    Quartz  也是可以用来做作业调度的 从状态位修改成功后绑定一个调度作业并设定一个时间长度(超时时间长度)当到达这个时间后就会调用这个作业  这个和java的定时器差不多
      

  4.   


    这个循环检测是用quartz的触发器实现吗?
    是不是要把状态记入session中,每次检测时进行比较?
      

  5.   


    我的job实现类会发一封邮件,2分钟执行一次,结果邮件一直连续不断的发送,这个不是应该执行一次就结束2分钟后再次执行吗,为什么会出现这种情况?
    //job实现类 
    public class MyJob implements Job {
            ... ...
            public void execute(JobExecutionContext context) {
                    // TODO Auto-generated method stub
                    i++;
                    JobDetail jobDetail = context.getJobDetail();
                    String jobName = jobDetail.getName();
                    JobDataMap data = jobDetail.getJobDataMap();        
                    ... ...
                    sms.sendHtmlMail(mailInfo); 
            ... ...//调用job调度处理类
    MyJob job = new MyJob();
    MySchedulerManage.startUp(... ..., job, "* */2 * * * ?",... ...);//每2分钟系统中还用Quartz实现定时清空数据库某个字段的功能,Quartz的配置是在Spring中完成的,会不会是这个配置与前面的有冲突之类的?
    //quartz-config.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"><!--Quartz的配置
    -->   
            <!-- 要调用的工作类 -->
            <bean id="quartzJob" class="basicdata.QuartzJob">
            <property name="sessionFactory">
    <ref bean="sessionFactory" />
    </property>
    </bean>
            <!-- 定义调用对象和调用对象的方法 -->
            <bean id="jobtask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
                <!-- 调用的类 -->
                <property name="targetObject">
                    <ref bean="quartzJob"/>
                </property>
                <!-- 调用类中的方法 -->
                <property name="targetMethod">
                    <value>work</value>
                </property>
            </bean>
            <!-- 定义触发时间 -->
            <bean id="doTime" class="org.springframework.scheduling.quartz.CronTriggerBean">
                <property name="jobDetail">
                    <ref bean="jobtask"/>
                </property>
                <!-- cron表达式 -->
                <property name="cronExpression">
                    <value>0 0 0 * * ?</value><!-- 每天固定时间触发 -->
                </property>
            </bean>
            <!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序  -->
            <bean id="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
                <property name="triggers">
                    <list>
                        <ref bean="doTime"/>
                    </list>
                </property>
            </bean>
    </beans>//QuartzJob.java
    public class QuartzJob extends  HibernateDaoSupport {
    public void work()
        {
         ... ...
        }
    }
      

  6.   


    这个小地方解决,是我cron表达式写错了。