设置quartz定时器,每秒遍历数据库(可以考虑时延减轻负担),每秒遍历DB。
首先明确 quartz job工作流程:
1、Job
表示一个工作,要执行的具体内容。此接口中只有一个方法
void execute(JobExecutionContext context) ,实现它然后在里面定义遍历数据库操作。
2、JobDetail
JobDetail表示一个具体的可执行的调度程序,Job是这个可执行程调度程序所要执行的内容,另外JobDetail还包含了这个任务调度的方案和策略。
3、Trigger
代表一个调度参数的配置,使用 CronTrigger(String name, String group, String cronExpression) ,定义cronExpression:"0/1 * * * * ?",表示每秒触发一次。
4、Scheduler
代表一个调度容器,由SchedulerFactory创建,一个调度容器中可以注册多个JobDetail和Trigger,调用方法scheduleJob(JobDetail var1, Trigger var2)。当Trigger与JobDetail组合,就可以被Scheduler容器调度了。
接下来就是连接数据库:
1.SimpleJob.java
public class SimpleJob implements Job {
// private static final String findSql_src = "select sale_begin from item_db.item";
public void execute(JobExecutionContext jobCtx)throws JobExecutionException
{
// Connection con_select = new
System.out.println("DB run in " + jobCtx.getTrigger().getClass().getName() + " triggered time is: " + new Date());
}
}
2.WEB-INF下面配置 quartz.properties
#============================================================================
# Configure Main Scheduler Properties
#============================================================================
org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false
org.quartz.scheduler.wrapJobExecutionInUserTransaction = false
#============================================================================
# Configure ThreadPool
#============================================================================
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true
#============================================================================
# Configure JobStore
#============================================================================
#org.quartz.jobStore.isClustered = true
#org.quartz.jobStore.clusterCheckinInterval = 15000
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.isClustered = true
org.quartz.jobStore.clusterCheckinInterval = 600000
org.quartz.jobStore.dataSource = myDS
#============================================================================
# Configure DataSource
#============================================================================
org.quartz.dataSource.myDS.driver = com.mysql.jdbc.Driver
org.quartz.dataSource.myDS.URL = jdbc:mysql://192.168.31.180/item_db
org.quartz.dataSource.myDS.user = item_dev
org.quartz.dataSource.myDS.password = 142569
org.quartz.dataSource.myDS.maxConnections = 10
2.配置 applicationContext.xml ,添加:
<bean id="businessReport" class="SimpleJob" />
<bean name="reportTask"
class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="SimpleJob" />
</bean>
<!-- 触发器 -->
<bean id="cronTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<!-- 指向我们的任务 -->
<property name="jobDetail" ref="reportTask" />
<!-- 每秒运行一次 -->
<property name="cronExpression" value="0/1 * * * * ?" />
</bean>
<!-- 调度器 -->
<bean
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<!-- 触发器列表 -->
<ref bean="cronTrigger" />
</list>
</property>
<property name="configLocation" value="classpath:quartz.properties" />
</bean>
连接数据库后,执行查询语句" select * " 得到商品上下架时间 returnTime,根据 currentTime == returnTime 条件,获得当前时间需要上下架的商品 id ,根据 id 更新数据表" update * "。