目前我有这个:
@Scheduled(fixedRate=5000)
public void getSchedule(){
System.out.println("in scheduled job");
}
Run Code Online (Sandbox Code Playgroud)
我可以更改它以使用对属性的引用
@Scheduled(fixedRate=${myRate})
public void getSchedule(){
System.out.println("in scheduled job");
}
Run Code Online (Sandbox Code Playgroud)
但是,我需要使用以编程方式获得的值,以便可以在不重新部署应用程序的情况下更改计划.什么是最好的方法?我意识到使用注释可能是不可能的......
我正在看下面的Stack Overflow答案: 如何在运行时更改Spring的@Scheduled fixedDelay
在代码中有以下行:
schedulerFuture = taskScheduler.schedule(() -> { }, this);
Run Code Online (Sandbox Code Playgroud)
我想知道lambda () -> {}在该代码中的含义.我需要在不使用lambdas的情况下编写它.
我正在使用Spring Boot并且在调度cron task数据库中存在的使用值时遇到问题.
暂时,我正在读取属性文件中的值,如下所示:
@Scheduled(cron= "${time.export.cron}")
public void performJob() throws Exception {
// do something
}
Run Code Online (Sandbox Code Playgroud)
这很好用,但我没有从属性文件中获取值,而是想从数据库表中获取它们.有可能吗?怎么样?
我有一个调度程序,它以5秒的固定延迟触发。
我计划有多个调度程序,但是现在,让我们仅使用一个调度程序。
要求:应根据业务条件更改调度程序的fixedDelay。
**例如,**默认fixedDelay为5secs,但根据条件,它可以为6、8、10secs。
因此,为了达到这个目的,我正在尝试修改fixedDelay。但这对我不起作用。
代码:
接口,带有延迟方法。
public abstract class DynamicSchedule{
/**
* Delays scheduler
* @param milliseconds - the time to delay scheduler.
*/
abstract void delay(Long milliseconds);
/**
* Decreases delay period
* @param milliseconds - the time to decrease delay period.
*/
abstract void decreaseDelayInterval(Long milliseconds);
/**
* Increases delay period
* @param milliseconds - the time to increase dela period
*/
abstract void increaseDelayInterval(Long milliseconds); …Run Code Online (Sandbox Code Playgroud) 我有一个 spring 调度程序,它有三个具有不同触发器(cron 触发器)的任务。对于这些任务中的每一个,我都有一个可以修改 cron 表达式的 UI。我想在服务收到更新请求时重新安排任务。下面是我的调度程序配置。如何在运行时更改其中一项任务的计划(当 UI 发送更新数据库中的 cron 表达式的请求时)。使用下面的方法,调度器只更新下一个调度。即在调用触发器时调用 nextExecutionTime() 方法。
@Configuration
@EnableScheduling
public class Config implements SchedulingConfigurer {
@Inject
MyDao db;
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
taskScheduler.setPoolSize(10);
taskScheduler.initialize();
taskRegistrar.setTaskScheduler(taskScheduler);
List<TaskConfig> conf = db.readTaks();
conf.forEach((TaskConfig aTask) -> {
taskRegistrar.addTriggerTask(new Runnable() {
@Override
public void run() {
System.out.println("Running task + " + aTask.getName());
}
}, new Trigger() {
@Override
public Date nextExecutionTime(final TriggerContext triggerContext) {
String expression = aTask.getCronExpression();
CronTrigger trigger = new …Run Code Online (Sandbox Code Playgroud)