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

I. *_*kov 3 spring scheduled-tasks quartz-scheduler quartz-core

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

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

  1. 使用@Scheduled和boolean属性,它应该确定逻辑shold是否运行.

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

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

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

Sha*_*ark 8

Spring有一个@PostConstruct注释来做到这一点.一旦bean被初始化并且添加了所有依赖项,就运行.


Ser*_*sta 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
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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