MK-商品上下架方案细化

设置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容器调度了。

MK-商品上下架方案细化_第1张图片
流程图
MK-商品上下架方案细化_第2张图片
quartz每秒触发测试

接下来就是连接数据库:

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 ,添加:



class="org.springframework.scheduling.quartz.JobDetailBean">




class="org.springframework.scheduling.quartz.CronTriggerBean">









class="org.springframework.scheduling.quartz.SchedulerFactoryBean">







连接数据库后,执行查询语句" select * " 得到商品上下架时间 returnTime,根据 currentTime == returnTime 条件,获得当前时间需要上下架的商品 id ,根据 id 更新数据表" update * "。

你可能感兴趣的:(MK-商品上下架方案细化)