当前位置: 首页 > 知识库问答 >
问题:

如何使用SchedulerFactoryBean.SchedulerContextAsMap和javaconfig

方波娃
2023-03-14
<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="schedulerContextAsMap">
        <map>
            <entry key="scheduleService" value-ref="scheduleService" />
            <entry key="knxUtil" value-ref="knxUtil" />
        </map>
    </property>
</bean>

然后,为了在@service(“scheduleService”)中调度作业,我使用了:

JobBuilder jobBuilder = JobBuilder.newJob(ScheduledActionRunner.class)

此外,为了实际执行作业,我让它像这样工作:

@Component
public class ScheduledActionRunner extends QuartzJobBean {

    private KNXUtil         knxUtil;

    private ScheduleService scheduleService;

    public ScheduledActionRunner() {
    }

    @Autowired
    public void setScheduleService(ScheduleService scheduleService) {
        this.scheduleService = scheduleService;
    }

    @Autowired
    public void setKnxUtil(KNXUtil knxUtil) {
        this.knxUtil = knxUtil;
    }

    @Override
    public void executeInternal(JobExecutionContext context) throws JobExecutionException {

        JobDataMap jobDataMap = context.getMergedJobDataMap();

        String scheduleId = jobDataMap.getString("scheduleId");

        Schedule schedule = scheduleService.get(scheduleId);

        Set<ScheduledAction> actions = schedule.getScheduledActions();

        for (ScheduledAction scheduledAction : actions) {
            scheduledAction.getAction().execute(logger, knxUtil);
        }

    }

如上所述,所有这些过去在使用XML-配置时都能正常工作。

现在,使用java-config时,nullpointerexceptionscheduleervice.get(scheduleId);失败

对于java-configuration,我设置SchedulerFactoryBean,如下所示:

@Configuration
@PropertySource(value = "classpath:properties.${target_env:dev}.properties")
@ComponentScan(basePackages = { "com.example.smart" }
public class SpringRootApplication {

    @Autowired
    private ScheduleService scheduleService;

    @Autowired
    private KNXUtil         knxUtil;

    @Bean
    SchedulerFactoryBean schedulerFactoryBean() {

        SchedulerFactoryBean bean = new SchedulerFactoryBean();

        Map<String, Object> schedulerContextAsMap = new HashMap<String, Object>();
        schedulerContextAsMap.put("scheduleService", scheduleService);
        schedulerContextAsMap.put("knxUtil", knxUtil);

        bean.setSchedulerContextAsMap(schedulerContextAsMap);

        return bean;
    }
}

如何使用java-config在ScheduleService中插入对ScheduleService的引用?

共有1个答案

蔡理
2023-03-14

我在这里找到了答案:https://stackoverflow.com/a/17394905/272180

解决方案是在设置SchedulerFactoryBean时删除bean.setSchedulerContextasmap(schedulerContextAsMap),并修改executeinternal,如下所示:

@Autowired
private KNXUtil         knxUtil;

@Autowired
private ScheduleService scheduleService;

@Override
public void executeInternal(JobExecutionContext context) throws JobExecutionException {

    // Adding this autowires everything as needed
    SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);

    JobDataMap jobDataMap = context.getMergedJobDataMap();

    String scheduleId = jobDataMap.getString("scheduleId");

    Schedule schedule = scheduleService.get(scheduleId);

    Set<ScheduledAction> actions = schedule.getScheduledActions();

    for (ScheduledAction scheduledAction : actions) {
        scheduledAction.getAction().execute(logger, knxUtil);
    }

}

这也简化了代码,因为不再需要@autowired注释setter。

 类似资料:
  • 似乎有支持类-在包中。然而,我一直无法找到文档、示例、测试用例,以便在一组图表中使用这种排列/布局。 指针赞赏。

  • 问题内容: 我正在使用,但它会返回如下所示的意外结果: 为什么我得到这些结果? 问题答案: 您是否要使用学位?请记住,并且期望弧度。

  • 问题内容: 大家好, 我想调用 一次而不创建一个反复调用的 循环 ,我应该为此使用递归方法还是应该使用 ? 还请告诉我使用?谢谢 :) 问题答案: 设置一个 定期 计时器。它返回一个句柄,您可以将其传递来阻止它触发: 在浏览器上,保证句柄是一个不等于; 的数字。因此,为“未设置计时器”设置一个方便的标志值。(其他平台可能返回其他值;例如,NodeJS的计时器函数返回一个对象。) 要将功能安排为 仅

  • 在成功运行JUnit4测试后,我试图将JUnit5与Gradle一起使用。 而我唯一的测试包含 我觉得这很奇怪! 我的生成文件是 我的文件夹结构是,使用包, 在我使用的IntelliJ2017.1.3中,模块结构如下所示 因为Gradle现在想要源代码和测试在他们自己的包中。 使用gradle在intellij中从JUnit4升级到JUnit5 链接回到上面的问题,并链接到这个Jetbrains博

  • 我在一个集群中使用Kerberos部署了NiFi,为了访问UI,我使用了HAProxy。我可以通过单独的节点URL访问NiFi UI,但它不能与loadbalncer URL一起工作,并得到以下错误 请求包含无效的主机标头 我认为可以通过nifi.web.proxy.host和nifi.web.proxy.context.path参数来修复。我尝试了这两个参数,但问题仍然存在。

  • 问题内容: 我正在使用MySQL,并且有两个表: 订单号 项目 数量 项目 BAL_QTY 主表具有重复项和值。我使用SQL’GROUP BY’子句获得总计。 我需要从(master_table)的总和中扣除/减去。我有使用查询的SUM 值(实际上有很多行)。 问题答案: 我认为这就是您要寻找的。是从余额中减去的s 的总和: 如果要使用新余额更新项目余额,请使用以下命令: 假设您向后发布减法;它从