Spring4+Springmvc+quartz实现多线程动态定时调度
时间: 2024-01-09 07:04:02 浏览: 39
首先,需要在pom.xml中引入以下依赖:
```xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>${quartz.version}</version>
</dependency>
```
其中,`${spring.version}`和`${quartz.version}`是对应的版本号。
接着,在Spring配置文件中配置`SchedulerFactoryBean`和`JobDetailFactoryBean`:
```xml
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<!--自动启动 -->
<property name="autoStartup" value="true" />
<!--配置数据源 -->
<property name="dataSource" ref="dataSource" />
<!--配置Quartz的属性 -->
<property name="quartzProperties">
<props>
<prop key="org.quartz.scheduler.instanceName">Scheduler</prop>
<prop key="org.quartz.scheduler.instanceId">AUTO</prop>
<prop key="org.quartz.scheduler.skipUpdateCheck">true</prop>
<prop key="org.quartz.scheduler.jmx.export">true</prop>
<prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop>
<prop key="org.quartz.jobStore.driverDelegateClass">org.quartz.impl.jdbcjobstore.StdJDBCDelegate</prop>
<prop key="org.quartz.jobStore.tablePrefix">QRTZ_</prop>
<prop key="org.quartz.jobStore.isClustered">false</prop>
<prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
<prop key="org.quartz.threadPool.threadCount">10</prop>
<prop key="org.quartz.threadPool.threadPriority">5</prop>
</props>
</property>
<!--配置JobDetail -->
<property name="jobDetails">
<list>
<bean id="jobDetailFactoryBean" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<!--要执行的Job类 -->
<property name="jobClass" value="com.example.job.MyJob" />
<!--Job的名称 -->
<property name="name" value="MyJob" />
<!--Job的分组 -->
<property name="group" value="MyJobGroup" />
<!--是否持久化 -->
<property name="durability" value="true" />
<!--是否可以被其他任务替代 -->
<property name="requestsRecovery" value="true" />
</bean>
</list>
</property>
<!--配置Trigger -->
<property name="triggers">
<list>
<bean id="cronTriggerFactoryBean" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<!--绑定JobDetail -->
<property name="jobDetail" ref="jobDetailFactoryBean" />
<!--触发器的名称 -->
<property name="name" value="MyTrigger" />
<!--触发器的分组 -->
<property name="group" value="MyTriggerGroup" />
<!--Cron表达式 -->
<property name="cronExpression" value="0/10 * * * * ?" />
</bean>
</list>
</property>
</bean>
```
其中,`SchedulerFactoryBean`是Quartz的核心类,用于创建和管理Quartz的`Scheduler`对象。`JobDetailFactoryBean`用于创建`JobDetail`对象,`CronTriggerFactoryBean`用于创建`Trigger`对象。
在上述配置中,我们配置了一个名为`MyJob`的Job,它由`com.example.job.MyJob`类实现,执行逻辑在该类的`executeInternal()`方法中。我们还配置了一个名为`MyTrigger`的Trigger,它使用Cron表达式`0/10 * * * * ?`,表示每隔10秒执行一次。
最后,在`com.example.job.MyJob`类中实现我们的业务逻辑:
```java
public class MyJob extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
// 执行业务逻辑
}
}
```
当配置完成后,启动Spring应用程序,Quartz就会按照我们的配置执行定时任务了。