我通过实现ApplicationListener并重写方法编写了一个StartupListener:onApplicationEvent(ContextRefreshedEvent event)。
@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;
}
}
}
在这个方法中,我试图根据对应于file的布尔值是否为true来创建一些文件。
使用@Value注释从“application.properties”文件中读取此布尔值。
这个StartupListener工作正常。
现在我希望通过安排它们来生成这些文件,所以我将@EnableScheduling添加到我的主类文件中,并使用方法创建了一个新的java文件:
@Component
public class FileGenerationScheduler {
@Autowired
StartupListener startupListener;
@Scheduled(cron = "${file.gen.cron}")
public void generateFileWithCron() {
startupListener.onApplicationEvent(null); //passing null here
}
}
在指定的cron表达式上调用此方法,但不从“application.properties”读取所有@Value布尔值。因此,默认情况下,这些值将为false(实例变量)
@Value("${create.file.some.merchant}")
private boolean createMerchantAFile;
这在StartupListener中出现,现在为false。所以没有创造任何东西。
如果通过调度程序调用,我如何确保从application.prop读取这些值?
答案 0 :(得分:0)
创建服务并添加其中的所有逻辑,包括从属性find中获取值。在侦听器和调度程序类中注入该bean。