Spring, 运行 应用程序启动时任务一次
Spring, Run task once when application started
我的应用程序基于 spring 启动。
我想创建一个任务,它应该是 运行 在应用程序启动后只有一次。
目前,我正在研究两种解决方案:
使用@Scheduled
和布尔值属性 来判断逻辑是否应该是运行。
@Scheduled
public void method(){
if(method_run_propery){
//do something;
}
}
使用 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 方法,您的逻辑可以进入此方法。
我的应用程序基于 spring 启动。 我想创建一个任务,它应该是 运行 在应用程序启动后只有一次。
目前,我正在研究两种解决方案:
使用
@Scheduled
和布尔值属性 来判断逻辑是否应该是运行。@Scheduled public void method(){ if(method_run_propery){ //do something; } }
使用 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 或 QuartzSpring 有一个 @PostConstruct 注释可以做到这一点。在初始化 bean 并添加所有依赖项后运行。
其中一种方法是实现 ApplicationListener
一旦 spring 上下文被初始化,你的 class 实现 ApplicationListener 然后将调用 onApplicationEvent 方法,您的逻辑可以进入此方法。