Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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
如何在Spring中使用Java常量作为@Scheduler表达式注释的一部分?_Java_Spring_Annotations_Constants - Fatal编程技术网

如何在Spring中使用Java常量作为@Scheduler表达式注释的一部分?

如何在Spring中使用Java常量作为@Scheduler表达式注释的一部分?,java,spring,annotations,constants,Java,Spring,Annotations,Constants,我正在使用下面给出的Spring调度程序 @Scheduled(fixedDelay = ((10 * 60 * 1000) / 2)) public void runDynamic() { //doing my stuff } 现在假设我有一个这样的常数 public static final Integer VARIANCE_TIME_IN_MIN = 10; 我想用这个常数作为表达式的一部分,比如: @Scheduled(fixedDelay =

我正在使用下面给出的Spring调度程序

 @Scheduled(fixedDelay = ((10 * 60 * 1000) / 2))
    public void runDynamic()
    {
      //doing my stuff
    }
现在假设我有一个这样的常数

public static final Integer VARIANCE_TIME_IN_MIN = 10;
我想用这个常数作为表达式的一部分,比如:

@Scheduled(fixedDelay = ((MyConstants.VARIANCE_TIME_IN_MIN * 60 * 1000) / 2))
public void runDynamic()
{
//doing my stuff
}

但它给出了我的编译时错误。有什么想法吗?提前谢谢

使用属性文件中的cron表达式进行任务调度

@Scheduled(cron = "${cronTrigger.expression}")
public void runDynamic()
    {
      //doing my stuff
    }
XML文件中的配置:

<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="jobDetail" ref="exampleJob" />
    <!-- run every morning at 6 AM -->
    <property name="expression" value="0 0 6 * * ?" />
</bean>

这可能对你有帮助


您还可以动态地(以编程方式)创建Tash调度程序,正如所解释的那样,

Java注释采用编译时常量,这些常量被定义为最终原语或字符串

所以把你的定义改为

   public static final int VARIANCE_TIME = 10;
   public static final long FIXED_DELAY = ((VARIANCE_TIME * 60 * 1000) / 2)

   @Scheduled(fixedDelay = FIXED_DELAY)
   public void runDynamic()      

您好@NimChimpsky,谢谢您的回复,但我在您给定的链接中找不到任何使用Java常量的示例。这是不可能的吗?请您也发布编译时错误?您使用的是什么Java版本?但它来自属性文件,而不是Java常量。您不能通过Java常量计划任务。为什么需要使用这个常数?你不能重用${cronTrigger.expression}本身吗!!还可以解释一下,您将类型更改为long,因为它不容易访问,而这段代码可能会回答这个问题,提供关于如何以及为什么解决这个问题的附加上下文将提高答案的长期价值。
private static final long VARIANCE_TIME_IN_MIN = 10l;

@Scheduled(fixedDelay = ((VARIANCE_TIME_IN_MIN * 60 * 1000) / 2))
public void runDynamic() {
    // ...
}