首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安排Spring批处理作业每4小时重启一次我的应用程序

安排Spring批处理作业每4小时重启一次我的应用程序
EN

Stack Overflow用户
提问于 2020-05-12 16:37:40
回答 1查看 321关注 0票数 0

我想每隔4小时安排一个作业,以便在每隔4小时重新启动我的spring batch应用程序.I正在使用下面的代码,但它只安排了我的作业.I在应用程序启动时运行的方法很少.Those方法没有得到安排

代码语言:javascript
复制
@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();
    }
 }
EN

回答 1

Stack Overflow用户

发布于 2020-05-12 17:17:32

bean因为方法是在构造函数中调用的,所以当

为initialized.So时会调用它。每次我都必须重新启动我的应用程序

为此,您不需要在每次调度时关闭/重新启动应用程序上下文。您可以在JobExecutionListener#beforeJob中移动任何初始化代码,这更适合您的用例。

解决这个问题的另一种方法是创建一个微线程,该微线程调用生成json文件的脚本(例如SystemCommandTasklet ),然后创建第二个步骤,该步骤使用json项读取器读取文件(文件名可以在两个步骤之间通过执行上下文共享)。

在这两种情况下,都不需要像您当前那样在每个计划中关闭/重新启动应用程序上下文。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61747272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档