为了账号安全,请及时绑定邮箱和手机立即绑定

我在Spring 中配置了Quartz多线程执行没问题,但是不能设置成单线程的执行:

我在Spring 中配置了Quartz多线程执行没问题,但是不能设置成单线程的执行:

米脂 2022-10-07 19:15:37
<bean id="schedulerTrigger"class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><property name="taskExecutor" ref="executor" /></bean><bean id="executor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">             <property name="corePoolSize" value="1" />              <property name="maxPoolSize" value="1" />              <property name="queueCapacity" value="500" />     </bean>        任务设置后,只执行了一次,在也不执行了,而且三个任务,也只执行了第一个
查看完整描述

4 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

quartz本身是多线程的,你这里修改了线程池不知道有没有效果

对于你想控制不能并发执行的任务可以自行控制并发

class Job{
private static Object lock = new Object();


public void execute(){
synchronized(lock){

//do something

}

}

查看完整回答
反对 回复 2022-10-12
?
手掌心

TA贡献1942条经验 获得超3个赞

你没有配置Timer 就是执行的时间粒度,比如每分钟执行一次,没小时执行一次。
给你个例子:
<!-- 要调用的工作类 -->
        <bean id="quartzWork" class="com.hcy.quartz.QuartzWork"></bean>
        <!-- 定义调用对象和调用对象的方法 -->
        <bean id="jobtask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
            <!-- 调用的类 -->
            <property name="targetObject">
                <ref bean="quartzWork"/>
            </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/1.5 * * ?</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>

查看完整回答
反对 回复 2022-10-12
?
慕斯王

TA贡献1864条经验 获得超2个赞

有可能是你第一个任务一直都没有返回,所以后续的任务不会再执行了,因为你配置的是单线程,此时线程一直被第一个任务占用着呢。

查看完整回答
反对 回复 2022-10-12
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

另外quartz本意就是多线程执行的,不知出于什么考虑你要实现单线程?

查看完整回答
反对 回复 2022-10-12
  • 4 回答
  • 0 关注
  • 275 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信