java - 如何在Spring-Quartz中使用“MethodInvokingJobDetailFactoryBean”创建“targetObject”的原型(prototype)实例?

标签 java spring prototype javabeans quartz-scheduler

我已经在Spring-Quartz上玩了一段时间了,有一件我无法实现的事情-我想使用“ MethodInvokingJobDetailFactoryBean”来在我拥有的类中执行一个方法,我想每次触发触发器时,都会创建该对象的新实例。

我的应用程序上下文中与Quartz相关的部分如下所示:

  <bean id="myTask" class="com.test.TestImpl" scope="prototype" /> <!-- The bean that does the actual work -->  
<bean id="testMethodJobDetailBean" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="targetObject" ref="myTask"/>
    <property name="targetMethod" value="run"/>
    <property name="concurrent" value="false"/>
</bean>
 <bean id="testTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
    <property name="jobDetail" ref="testMethodJobDetailBean"/>
    <property name="startDelay" value="25000"/>
    <property name="repeatInterval" value="5000"/>
 </bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="waitForJobsToCompleteOnShutdown" value="true"/>
        <property name="triggers">
            <list>
                <ref bean="testTrigger"/>
            </list>

        </property>
</bean>


我的对象的名称在原始文件中有所不同,我还有2个作业(每个作业都有一个触发器),但它们与我的问题无关。

上面的配置有效,并且我的任务每5秒执行一次。问题是,它始终使用相同的“ com.test.TestImpl”实例,这对我来说很麻烦,因为对象的状态会影响其行为。

我已经读到Quartz的默认行为是每次创建一个新的Job实例,但是当使用Spring-Quartz时,Spring会管理生命周期。这确实看起来合乎逻辑,这就是为什么我在“ myTask” bean中添加了scope =“ prototype”的原因,但这没有帮助。
我还尝试将JobDetailsFactory bean的范围设置为原型,但这没有帮助。

我认为问题在于“ MethodInvokingJobDetailFactoryBean”创建的JobDetail对象未定义为原型,并且因为它包装了我的bean,并且仅创建了一次-我的bean不会被创建多次。

我想知道是否有人遇到了此问题,因为我找不到有关此问题的任何有用信息,也找不到任何经历相同行为的人。
当然,如果您知道如何解决此问题,我将很高兴听到它。

最佳答案

真是太有趣了:)我来这里是为了找到一种解决方案,该解决方案在执行之前避免使用石英创建实例。

您可以尝试QuartzJobBean方法,其行为与石英的默认行为相同

关于java - 如何在Spring-Quartz中使用“MethodInvokingJobDetailFactoryBean”创建“targetObject”的原型(prototype)实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11938636/

相关文章:

ajax - Spring Boot - 外部 Tomcat 服务器 Ajax 身份验证失败消息

spring - 使用 Spring Batch 和 Spring Boot 2.2.5 时,无法从 xml 配置注册自定义 LineMapper

javascript - JavaScript 中的原型(prototype)继承...我可以调用 "super"等价物吗?

javascript - 为什么已经生成的使用 'new'操作的对象可以访问稍后在javascript中添加的原型(prototype)方法

java - 使用 Java 调用 AWS Lambda 上的 Web 服务

java - Axis 2 : Unable to engage Rampart module

java - 在 IntelliJ IDEA 中哪里可以找到已弃用方法的替代方法?

java - 使Spring-XD和hdfs下沉适用于maprfs

javascript - 这是正确的(JavaScript 原型(prototype)属性)吗?

java - 如何使用构建器模式构建抽象类?