Java cron中的表达式
我想在java中运行一个cron,它将每天运行一个“x”小时。X将由数据库中的一个非静态值决定。我试过这样的方法:Java cron中的表达式,java,cron,Java,Cron,我想在java中运行一个cron,它将每天运行一个“x”小时。X将由数据库中的一个非静态值决定。我试过这样的方法: private static String cronRunTime = getCronRunTimeFromDb(); private String cronExpression = "* " + cronRunTime + " * * *"; 但我面临的主要问题是,我不知道如何在@Scheduled注释中配置此值 我试过一些东西: @Scheduled(cron = cronE
private static String cronRunTime = getCronRunTimeFromDb();
private String cronExpression = "* " + cronRunTime + " * * *";
但我面临的主要问题是,我不知道如何在@Scheduled注释中配置此值
我试过一些东西:
@Scheduled(cron = cronExpression)
public void myCron(){
}
但我在编译过程中遇到了一个错误:
error: element value must be a constant expression
@Scheduled(cron = cronExpression)
有人能帮我解决这个问题吗。“秒-分-小时-日-月-工作日”“0*?**”是每天每小时的cron表达式。
“0 10?**”是每天上午10点的cron表达式。
你每天每“x”小时都在寻找的是: “0*/x?**” 希望这会有所帮助。根据Java值,注释元素的基本类型和
字符串必须是-可以在编译时计算,而不是在运行时
简而言之:您不能将运行时计算的值(从数据库获取、从属性文件读取,甚至从静态函数(如System.currentTimeMillis()
)返回)传递给注释属性
如果您有一个依赖于某种配置的动态逻辑(在数据库或属性文件中),则应该考虑使用和它的<代码> AddRon任务(CRONTaskTebug)< /C>方法,这当然不如简单注释。
有关如何在响应中使用
ScheduledTaskRegistrar
的示例,请参见此处:
或者,您可以使用属性占位符逻辑来填充@Scheduled
注释的cron
属性,如其他问题中所述:
如果您真的想疯了,您甚至可以让Spring从数据库读取属性,请参见:
您的问题是“为什么会出现编译器错误?”还是更多的是“如何根据数据库中的信息配置cron expression计划任务?”我的问题是“如何根据数据库中的信息配置cron expression计划任务”我在下面的回答中提供了两个选项:使用Java代码并以编程方式配置任务(使用Spring),以及使用Spring的@Scheduled
注释和占位符功能的声明方式。您也可以放弃Spring方式,只需使用纯JDK功能来运行计划任务:ExecutorService
,等等。