我有一个定期运行的代码。 以下是该代码的代码
@EnableScheduling
@Component
public class Cer {
@Autowired
private A a;
@Autowired
private CacheManager cacheManager;
@Scheduled(fixedDelayString = "${xvc}")
public void getData() {
getCat();
getB();
return;
}
}
如果runOnce为true,我想基于布尔说@Scheduled(fixedDelayString = "${xvc}")
更改runOnce
这个@scheduled只应该在代码启动时运行一次。
任何建议如何实现这一目标。
提前谢谢。
答案 0 :(得分:0)
我会在组件中放置您要安排的功能:
@Component
public class ServiceToSchedule {
public void methodThatWillBeScheduled() {
// whatever
return;
}
}
还有两个额外的组件将根据Profile
进行实例化。其中一个安排任务,另一个只执行一次。
@Profile("!scheduled")
@Component
public class OnceExecutor {
@Autowired
private ServiceToSchedule service;
@PostConstruct
public void executeOnce() {
// will just be execute once
service.methodThatWillBeScheduled();
}
}
@Profile("scheduled")
@Component
@EnableScheduling
public class ScheduledExecutor {
@Autowired
private ServiceToSchedule service;
@Scheduled(fixedRate = whateverYouDecide)
public void schedule() {
// will be scheduled
service.methodThatWillBeScheduled();
}
}
根据哪个配置文件处于活动状态,您的方法只会执行一次(scheduled
配置文件未激活),或者将被安排(scheduled
配置文件处于活动状态)。
您可以通过(例如)启动服务来设置弹簧配置文件:
-Dspring.profiles.active=scheduled