【问题标题】:How to use application.properties in org.quartz.Job Class如何在 org.quartz.Job 类中使用 application.properties
【发布时间】:2019-02-28 07:43:09
【问题描述】:

我创建了一个 Spring Boot 应用程序来实现 Quartz 调度程序。在 Job 类中,我想使用 application.properties 中的一些属性。如何注入?

我在下面尝试过,但结果为空:

    @Component
public class ScheduleJob implements org.quartz.Job {

        private static final Logger LOGGER = LogManager.getLogger(ScheduleJob.class);

        public ScheduleJob() {
        }

        @Value("${ijobs.service.url}")
        private String ijobsUrl;

        public void execute(JobExecutionContext context) throws JobExecutionException {

            LOGGER.info("Job exceution starts--->");
              System.out.println("-------------------"+ijobsUrl);

【问题讨论】:

  • Spring Boot 内置了对 Quartz 的支持。它使用我们在 application.properties 文件中提供的配置自动创建一个 Quartz 调度程序 bean。这就是为什么我们可以直接在控制器中注入调度器。
  • 您具体要寻找哪个物业?
  • 我已经注入了 Quartz 调度器。但是在作业类中,我想调用一个我想从属性文件中选择的 url。

标签: spring spring-boot quartz-scheduler job-scheduling


【解决方案1】:

Spring 需要使用 @Component 注释类以对其进行管理(包括将任何属性加载到类中)。如果您使用“new”来创建对象,那么它不在 Spring 的控制范围内,它不会将依赖项/值注入其中。

附带说明,如果使用 Spring Boot,则会原生支持 Quartz:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-quartz.html

【讨论】:

  • 使用组件但仍将值设为空
  • 您是如何创建 ScheduleJob 的?您需要具备以下条件才能使用它:@Component public class QuartzSetup { @Autowired ScheduleJob job; // 使用作业的代码 }
  • Spring 没有因为缺少属性而未能创建组件,这表明 Spring 没有创建对象。
  • 是的,默认情况下,您的 Job 子类实例不是由 Spring 创建的。您可以:a) 将 Job Factory 设置为 Spring bean,它会在创建期间自动装配依赖项 b) 或将其作为 Job 的 execute() 方法的第一行调用:SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
【解决方案2】:

首先,ScheduleJob 类应该用 @Component 注释,以便 spring 管理它。其次,如果您想要注入任何属性,您可以采用与注入 ijobsUrl 值类似的方式进行操作。

把你需要的属性放在 application.properties 中

@Value("${my.property}")
private String myProperty

【讨论】:

  • 尝试了同样的方法,但仍然为空。
  • 你从哪里获取属性 ijobs.service.url ?
  • 来自 application.properties
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-03
  • 2020-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-23
  • 2021-05-08
相关资源
最近更新 更多