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

Spring, Run task once when application started

我的应用程序基于 spring 启动。 我想创建一个任务,它应该是 运行 在应用程序启动后只有一次。

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

  1. 使用@Scheduled 和布尔值属性 来判断逻辑是否应该是运行。

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

  2. 使用 Quartz。不过我没用过

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

如果它必须 运行 一次 在应用程序初始化后立即 ,我会简单地从单例 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,然后将调用一次 TaskLauncher bean 的 init 方法。

如果您只需要在 Spring 初始化时间

开始某些东西,则不需要 @Scheduler 或 Quartz

Spring 有一个 @PostConstruct 注释可以做到这一点。在初始化 bean 并添加所有依赖项后运行。

其中一种方法是实现 ApplicationListener

一旦 spring 上下文被初始化,你的 class 实现 ApplicationListener 然后将调用 onApplicationEvent 方法,您的逻辑可以进入此方法。