qua*_*tum 25 java spring annotations spring-scheduled
我一直在考虑在编译时评估注释值的Java特性,它似乎真的难以外化注释值.
但是,我不确定它是否真的不可能,所以我很感激任何建议或明确的答案.
更重要的是,我试图外化一个注释值来控制Spring中调度方法调用之间的延迟,例如:
public class SomeClass {
private Properties props;
private static final long delay = 0;
@PostConstruct
public void initializeBean() {
Resource resource = new ClassPathResource("scheduling.properties");
props = PropertiesLoaderUtils.loadProperties(resource);
delay = props.getProperties("delayValue");
}
@Scheduled(fixedDelay = delay)
public void someMethod(){
// perform something
}
}
Run Code Online (Sandbox Code Playgroud)
假设它scheduling.properties在classpath上并包含属性键delayValue及其对应的long值.
现在,这段代码有明显的编译错误,因为我们试图为final变量赋值,但这是强制性的,因为我们不能将变量赋值给注释值,除非它是static final.
有没有办法解决这个问题?我一直在考虑Spring的自定义注释,但根本问题仍然存在 - 如何将外化值分配给注释?
欢迎任何想法.
编辑:一个小的更新 - Quartz集成对于这个例子来说太过分了.我们只需要以亚分钟的分辨率进行定期执行即可.
小智 69
@ScheduledSpring v3.2.2中的注释已将String参数添加到原始的3个long参数中以处理此问题.fixedDelayString,fixedRateString并且initialDelayString现已太:
@Scheduled(fixedDelayString = "${my.delay.property}")
public void someMethod(){
// perform something
}
Run Code Online (Sandbox Code Playgroud)