为了账号安全,请及时绑定邮箱和手机立即绑定

应用程序开始使用Spring后执行一个方法

应用程序开始使用Spring后执行一个方法

天涯尽头无女友 2021-06-20 16:55:46
我在 Spring 的 Service 组件中有这个结构:@AutowiredPointController controller;@AutowiredParametroService parametroService;Timer timer = new Timer();TimerTask timerTask = new TimerTask() {    @Override    public void run() {        List<IntRaptMec> allPointments =  getNotValidated();        for(IntRaptMec pointment : allPointments) {           controller.validate(pointment.getIdTemp());        }    }};        public void doValidationsTask() {           Parametro parametroTempo = parametroService.getParametro("1", "ATRC_MEC", "TEMPO_VERIFICACAO");    timer.scheduleAtFixedRate(            timerTask,            Integer.parseInt(parametroTempo.getValor()) * oneMinute,            Integer.parseInt(parametroTempo.getValor()) * oneMinute    );  }我想要的只是在 Spring 应用程序完全初始化之后,它将执行 TimerTask 中的 run() 方法。然后,在从 parametroService.getParametro() 获得的给定时间(以分钟为单位)之后,再次执行此任务。我试图从文档中遵循此链接:https : //docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#scheduling-annotation-support但似乎我无法动态设置将执行特定任务的延迟时间
查看完整描述

3 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

您是正确的,注释@Scheduled不允许您动态读取延迟参数。出于这个原因,并且因为此注释仅以毫秒为单位接受延迟参数或作为对用户不友好的 crone 表达式,我编写了自己的实用程序来执行此操作。该实用程序作为开源 MgntUtils 库的一部分提供。您将需要编写将扩展库中提供的类的类,然后您将获得所需的功能。但这确实需要一些工作。然而,该库带有示例包,其中包含工作示例的源代码,并在 javadoc 中进行了详细说明。如果您有兴趣,可以在GithubMaven Central找到库. 在这两个地方都可以使用源代码和 javadoc。javadoc 中详细描述了所需的功能。如果您将 javadoc 下载并解压到文件夹 c:\tmp 中,请查看 URL file:///C:/tmp/javadoc/com/mgnt/lifecycle/management/backgroundrunner/package-summary.html以获取有关如何使用的详细说明此功能。对于工作代码示例,请查看 package 的源代码com.mgnt.lifecycle.management.backgroundrunner.example

查看完整回答
反对 回复 2021-06-30
?
当年话下

TA贡献1890条经验 获得超9个赞

您可以run()使用@EventListener或创建一个新的此类带注释的方法来注释您的方法,该方法将调用run():


@EventListener

public void handleContextRefresh(ContextRefreshedEvent event) {

    run();

}

如果你不使用支持refresh()操作的上下文,你应该没问题。如果您使用这样的上下文(并且您不想run()在上下文刷新时执行),请确保将此状态存储在您的 bean 中。


查看完整回答
反对 回复 2021-06-30
  • 3 回答
  • 0 关注
  • 141 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信