我的应用程序基于弹簧启动。 我想创建一个应用程序启动后应该只运行一次的任务。
目前,我正在研究两种解决方案:
使用@Scheduled
和布尔属性来确定是否运行逻辑shold。
@Scheduled
public void method(){
if(method_run_propery){
//do something;
}
}
使用Quartz。但我以前没用过。
请告诉我在这种情况下使用的最佳方法是什么。
答案 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