将Spring任务调度程序配置为在fixeDelay上运行,或者根据布尔运行立即运行

时间:2015-10-12 07:38:27

标签: java spring scheduled-tasks

我有一个定期运行的代码。 以下是该代码的代码

@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只应该在代码启动时运行一次。 任何建议如何实现这一目标。 提前谢谢。

1 个答案:

答案 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