Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java cron中的表达式_Java_Cron - Fatal编程技术网

Java cron中的表达式

Java cron中的表达式,java,cron,Java,Cron,我想在java中运行一个cron,它将每天运行一个“x”小时。X将由数据库中的一个非静态值决定。我试过这样的方法: private static String cronRunTime = getCronRunTimeFromDb(); private String cronExpression = "* " + cronRunTime + " * * *"; 但我面临的主要问题是,我不知道如何在@Scheduled注释中配置此值 我试过一些东西: @Scheduled(cron = cronE

我想在java中运行一个cron,它将每天运行一个“x”小时。X将由数据库中的一个非静态值决定。我试过这样的方法:

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
,等等。