我如何在特定的配置文件中启用定时作业?
伪代码:
@Scheduled(cron = "${job.cron}")
@Profile("prod")
public void runJob() {
}
那可能吗?
我如何在特定的配置文件中启用定时作业?
伪代码:
@Scheduled(cron = "${job.cron}")
@Profile("prod")
public void runJob() {
}
那可能吗?
每个配置文件中应该只有一个bean:
@Component
@Profile("prod")
public class ProdJob {
@Scheduled(cron = "${job.cron}")
public void runJob() {
}
}
@Component
@Profile("beta")
public class BetaJob {
@Scheduled(cron = "${job.cron}")
public void runJob() {
}
}
@Scheduled(cron = "${job.cron:-}")
public void runJob() {
}
然后在所需的配置文件中定义cron表达式(例如使用属性文件)。
这是application-prod.properties文件的内容:
job.cron=*/30 * * * * *
对于prod配置文件,它将每30秒启动一次,而对于所有其他配置文件,则关闭。
// Enable sceduling
@Configuration
@EnableScheduling
public class SchedulerConfig implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(5);
threadPoolTaskScheduler.setThreadNamePrefix("my.main.package-Scheduler-");
threadPoolTaskScheduler.initialize();
scheduledTaskRegistrar.setTaskScheduler(threadPoolTaskScheduler);
}
}
// A scheduled job that runs only when profile "prod" is enabled
@Component
@Profile("prod")
@NoArgsConstructor
class ExpirationNotificationScheduler {
// Just for test, run each 10th second or each minute
@Scheduled(cron = "10 * * * * *") // second, minute, hour, day of month, month, day(s) of week
public void notifyExpiredAccounts() {
System.out.println("Yes, I am a scheduled job.");
}
}
@EnableScheduling
注释创建一个单独的配置。如果未启用该配置,则会忽略@Scheduled
注释。 - M. Deinum@Profile
,而非方法。 - M. Deinum