有没有办法通过用户交互调用弹出预定方法(作业)?我需要创建一个显示所有作业的表,用户应该能够手动执行它们。确保作业自动运行,但用户应该能够手动启动它们。
@Configuration
@EnableScheduling
public class ScheduleConfiguration {
@Bean
public ScheduledLockConfiguration taskScheduler(LockProvider
lockProvider) {
return ScheduledLockConfigurationBuilder
.withLockProvider(lockProvider)
.withPoolSize(15)
.withDefaultLockAtMostFor(Duration.ofHours(3))
.build();
}
@Bean
public LockProvider lockProvider(DataSource dataSource) {
return new JdbcTemplateLockProvider(dataSource);
}
}
@Component
public class MyService {
@Scheduled(fixedRateString = "1000")
@SchedulerLock(name = "MyService.process", lockAtLeastFor = 30000)
@Transactional
public void process() {
// do something
}
}
答案 0 :(得分:0)
以下是使用TaskScheduler
的示例:
@Component
public class SomeTask implements Runnable {
private static final Logger log = LoggerFactory.getLogger();
@Autowired
public SomeDAO someDao;
@Override
public void run() {
// do stuff
}
}
TaskScheduler
bean:@Configuration
public class TaskSchedulerConfig {
@Bean
public TaskScheduler taskScheduler() {
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(5);
threadPoolTaskScheduler.setThreadNamePrefix("ThreadPoolTaskScheduler");
return threadPoolTaskScheduler;
}
}
@Component
public class ScheduledTasks {
@Autowired private TaskScheduler taskScheduler;
// Tasks
@Autowired private SomeTask task1; // autowired in case the task has own autowired dependencies
@Autowired private AnotherTask task2;
@PostConstruct
public void scheduleTasks() {
taskScheduler.schedule(task1, new PeriodicTrigger(20, TimeUnit.SECONDS));
taskScheduler.schedule(task2, new CronTrigger("0 0 4 1/1 * ? *"));
}
}
@Controller
public class TaskController {
@Autowired private TaskScheduler taskScheduler;
// Tasks
@Autowired private SomeTask task1;
@RequestMapping(value = "/executeTask")
public void executeTask() {
taskScheduler.schedule(task1, new Date()); // schedule task for current time
}
}