用 Spel 用另一个 spring 值计算一个 Spring 值
Evaluate a Spring value by another spring value with Spel
我有一个 属性 来自 application.properties
housekeeping.shortInterval=true
我想在我的 java 代码中评估一个值,这取决于此:
@Scheduled(fixedRateString = "#{housekeeping.shortInterval == true ? 60000 : 3600000*24}")
public int doHousekeeping()
{...}
不幸的是,这不起作用。我做错了什么?
第二个问题: 编写测试这个表达式输出的测试的最简单方法是什么?
第一个问题的答案:
您需要将 属性 括在 ${
和 }
之间,如下例所示:
@Scheduled(fixedRateString = "#{${housekeeping.shortInterval} == true ? 60000 : 3600000*24}")
我已经在我的电脑上测试过,它按预期工作。
第二个问题的答案:
请参阅下面的示例以在 Spring Boot 中测试 CRON
。修改您的调度程序方法以存储 CRON
值-
import java.time.LocalDateTime;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import lombok.extern.log4j.Log4j2;
@Component
@Log4j2
public class ScheduleTask {
@Value("${housekeeping.shortInterval}")
private boolean shortInterval;
private long cronValue;
@Scheduled(fixedRateString = "#{${housekeeping.shortInterval} == true ? 60000 : 3600000*24}")
public void scheduleTask() {
this.cronValue = ((shortInterval == true) ? 60000 : 3600000 * 24);
log.info("Executed at {}", LocalDateTime.now());
}
public long getCronValue() {
return this.cronValue;
}
}
测试时检查 CRON
值:
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class ScheduledTaskTest {
@Autowired
ScheduleTask task;
@Test
public void scheduleTask_Cron_Test() {
//Test CRON value
assertEquals(task.getCronValue(), 60000l);
}
}
我有一个 属性 来自 application.properties
housekeeping.shortInterval=true
我想在我的 java 代码中评估一个值,这取决于此:
@Scheduled(fixedRateString = "#{housekeeping.shortInterval == true ? 60000 : 3600000*24}")
public int doHousekeeping()
{...}
不幸的是,这不起作用。我做错了什么?
第二个问题: 编写测试这个表达式输出的测试的最简单方法是什么?
第一个问题的答案:
您需要将 属性 括在 ${
和 }
之间,如下例所示:
@Scheduled(fixedRateString = "#{${housekeeping.shortInterval} == true ? 60000 : 3600000*24}")
我已经在我的电脑上测试过,它按预期工作。
第二个问题的答案:
请参阅下面的示例以在 Spring Boot 中测试 CRON
。修改您的调度程序方法以存储 CRON
值-
import java.time.LocalDateTime;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import lombok.extern.log4j.Log4j2;
@Component
@Log4j2
public class ScheduleTask {
@Value("${housekeeping.shortInterval}")
private boolean shortInterval;
private long cronValue;
@Scheduled(fixedRateString = "#{${housekeeping.shortInterval} == true ? 60000 : 3600000*24}")
public void scheduleTask() {
this.cronValue = ((shortInterval == true) ? 60000 : 3600000 * 24);
log.info("Executed at {}", LocalDateTime.now());
}
public long getCronValue() {
return this.cronValue;
}
}
测试时检查 CRON
值:
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class ScheduledTaskTest {
@Autowired
ScheduleTask task;
@Test
public void scheduleTask_Cron_Test() {
//Test CRON value
assertEquals(task.getCronValue(), 60000l);
}
}