Spring,应用程序启动时运行一次任务

时间:2016-08-10 06:57:30

标签: spring scheduled-tasks quartz-scheduler quartz-core

我的应用程序基于弹簧启动。 我想创建一个应用程序启动后应该只运行一次的任务。

目前,我正在研究两种解决方案:

  1. 使用@Scheduled和布尔属性来确定是否运行逻辑shold。

    @Scheduled public void method(){ if(method_run_propery){ //do something; } }

  2. 使用Quartz。但我以前没用过。

  3. 请告诉我在这种情况下使用的最佳方法是什么。

2 个答案:

答案 0 :(得分:7)

Spring有一个@PostConstruct注释来完成这个。在初始化bean并添加所有依赖项后运行。

答案 1 :(得分:5)

如果必须在初始化应用程序后立即运行 ,我只需从单例bean的init方法启动它。 Spring确保在运行时它将被初始化所有依赖bean。

例如,假设Java注释Spring配置,您可以使用类似:

@Bean(init_method="init")
class TaskLauncher {

    @Autowired DependantBeanClass dependant Bean;
    ...

    public void init() {
        // execute or start the task, eventually using the autowired dependant beans
        ...
    }
}

当刷新上下文时,Spring会自动装配所有内容,初始化依赖bean,然后调用init bean的TaskLauncher方法。

如果你只需要在Spring初始化时启动一些东西,就不需要@Scheduler或Quartz