当前位置: 首页 > 知识库问答 >
问题:

Spring boot cron表达式调度,调用Application ationListener的Application ationEvent

双浩涆
2023-03-14

通过实现ApplicationListener并重写方法:onApplicationEvent(ContextRefreshedEvent事件),我编写了一个StartupListener。

@Component
public class StartupListener implements ApplicationListener<ContextRefreshedEvent> {

  private static Logger logger = LoggerFactory.getLogger(StartupListener.class);

  @Value("${create.file.some.merchant}")
  private boolean createMerchantAFile;

  @Override
  public void onApplicationEvent(ContextRefreshedEvent event) {
    logger.info("Application context started");

    if (createMerchantAFile) {
      EmbeddedResponse emb = null;
      file = ReportConstants.MERCHANT_A+ ReportConstants.FILE_FORMAT;
      try {
        emb = genericServices.readJsonFile("merA.json");
        generateReport.generateExcelFile(emb, file, "MerchantA");
      } catch (IOException ioe) {
        logger.error("IO Exception while reading JSON file. Message: ", ioe);
      } catch (Exception e) {
        logger.error("Exception while reading JSON file. Message", e);
      }
      createMerchantAFile= false;
    }
  }
}

在这个方法中,我试图根据文件对应的布尔值是否为true来创建一些文件。

使用@Value注释从“application.properties”文件中读取此布尔值。

这个StartupListener很好用。

现在我希望通过调度来生成这些文件,所以我在我的主类文件中添加了@EnableSchedoop,并使用以下方法创建了一个新的java文件:

@Component
public class FileGenerationScheduler {

  @Autowired
  StartupListener startupListener;

  @Scheduled(cron = "${file.gen.cron}")
  public void generateFileWithCron() {
    startupListener.onApplicationEvent(null); //passing null here
  }
}

此方法在指定的cron表达式上调用,但所有@Value布尔值都不会从“application.properties”中读取。因此默认情况下,这些值将为false(实例变量)

@Value("${create.file.some.merchant}")
private boolean createMerchantAFile;

这在StartupListener中存在,现在为false。所以什么都没有创造。

如何确保从应用程序中读取这些值。即使在通过调度程序调用时也支持?

共有1个答案

张子墨
2023-03-14

创建一个服务,并在其中添加所有逻辑,包括从属性find获取值。将该bean注入侦听器和调度程序类中。

 类似资料:
  • 前言 大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行。 在详细了解这个之前,我们来谈了解一下“自执行”这个叫法,本文对这个功能的叫法也不一定完全对,主要是看个人如何理解,因为有的人说立即调用,有的人说自动执行,所以你完全可以按照你自己的理解来取一个名字,不过我听很多人都叫它为“自执行”,但作者后面说了很多,来说服大家称呼为“立即调用的函数表达式”。

  • 问题内容: 在学习过程中,我遇到以下错误: 在我的测试程序(https://play.golang.org/p/PW9SF4c9q8)中: 有人愿意帮助我继续前进吗? 问题答案: 不幸的是,您的错误有些令人误解。问题在于它是一个实例方法,您在调用它时就好像它是程序包作用域中的一个方法一样。 您需要这样的东西; 我猜该错误的措辞是这样的,因为接收器(函数名称左侧位置中的括号中的内容)的处理方式与在后

  • 问题内容: 我是打字稿的新手,并且有两节课。在父类中,我有: 在儿童班,我有: showMore和ShowLess都给我一个错误,“无法调用类型缺少调用签名的表达式”。 但是,我认为setProp返回的函数确实具有呼叫签名吗?我认为我误解了有关函数类型的一些重要信息,但我不知道它是什么。 谢谢! 问题答案: 它返回的函数具有一个调用签名,但是您告诉Typescript通过添加其签名来完全忽略它。

  • 在我的项目中,我使用Guava谓词和函数来使用和筛选和转换一些集合。 在这次迁移中,我需要将guava代码更改为Java8更改。所以,我所做的改变是这样的: 到... 由于,使用方法引用的方法还允许我调试转换过程: 多亏了answer,我注意到我的Eclipse没有显示它应该显示的内容,而peek()的使用有助于显示结果。

  • 在我们的项目中,我们将迁移到Java8,并测试它的新特性。 在我的项目中,我使用Guava谓词和函数,使用和过滤和转换一些集合。 在这次迁移中,我需要更改例如guava代码到Java8的更改。所以,我正在做的改变是: 到... 使用guava调试代码非常符合要求,因为我可以调试每个转换过程,但我关心的是如何调试,例如。 由于,使用方法引用的方法还允许我调试转换过程: 由于回答,我注意到我的Ecli