我想每隔4小时安排一个作业,以便在每隔4小时重新启动我的spring batch应用程序.I正在使用下面的代码,但它只安排了我的作业.I在应用程序启动时运行的方法很少.Those方法没有得到安排
@EnableScheduling
public class App {
private static ConfigurableApplicationContext context;
private static final Logger logger = LoggerFactory.getLogger(App.class);
public static void main(String[] args) {
BasicConfigurator.configure();
context = SpringApplication.run(App.class, args);
}
@Scheduled(cron = "0 0 0/4 * * * ")
public static void restart() {
ApplicationArguments args = context.getBean(ApplicationArguments.class);
logger.info("##### Scheduler Started #####"+System.currentTimeMillis());
Thread thread = new Thread(() -> {
context.close();
logger.info("***Context Closed***"+System.currentTimeMillis());
context = SpringApplication.run(App.class, args.getSourceArgs());
logger.info("###### Context Restarted "+
System.currentTimeMillis());
});
thread.setDaemon(false);
thread.start();
}
}发布于 2020-05-12 17:17:32
bean因为方法是在构造函数中调用的,所以当
为initialized.So时会调用它。每次我都必须重新启动我的应用程序
为此,您不需要在每次调度时关闭/重新启动应用程序上下文。您可以在JobExecutionListener#beforeJob中移动任何初始化代码,这更适合您的用例。
解决这个问题的另一种方法是创建一个微线程,该微线程调用生成json文件的脚本(例如SystemCommandTasklet ),然后创建第二个步骤,该步骤使用json项读取器读取文件(文件名可以在两个步骤之间通过执行上下文共享)。
在这两种情况下,都不需要像您当前那样在每个计划中关闭/重新启动应用程序上下文。
https://stackoverflow.com/questions/61747272
复制相似问题