In spring boot, you can use an application property directly!
For example:
@Scheduled(fixedDelayString = "${my.property.fixed.delay.seconds}000")
private void process() {
// your impl here
}
Note that you can also have a default value in case the property isn't defined, eg to have a default of "60" (seconds):
@Scheduled(fixedDelayString = "${my.property.fixed.delay.seconds:60}000")
Other things I discovered:
- the method must be void
- the method must have no parameters
- the method may be
private
I found being able to use private
visibility handy and used it in this way:
@Service
public class MyService {
public void process() {
// do something
}
@Scheduled(fixedDelayString = "${my.poll.fixed.delay.seconds}000")
private void autoProcess() {
process();
}
}
Being private
, the scheduled method can be local to your service and not become part of your Service's API.
Also, this approach allows the process()
method to return a value, which a @Scheduled
method may not. For example, your process()
method can look like:
public ProcessResult process() {
// do something and collect information about what was done
return processResult;
}
to provide some information about what happened during processing.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…