如何在spring类中调用@Scheduled方法之前创建init方法?

时间:2016-10-13 09:35:42

标签: spring scheduled-tasks

这是我的java课程

@Component
public class ReportTasckScheduler {
@PostConstruct
    public void init() {
        List<ReportTasck> allByStatus = reportTasckRepository.findAllByStatus(1);
        if (allByStatus.isEmpty()) return;
        for (ReportTasck allByStatu : allByStatus) {
            allByStatu.setStatus(0);
            allByStatu.setStartDate(new Date());
            reportTasckRepository.save(allByStatu);
        }
    }

    @Scheduled(fixedRate = 5000)  //раскоментировать для шедлинга
    public void startSchedule() throws IOException, NurException {
        //code
    }
}

我能否确定init()始终在startSchedule()之前致电? 如果没有,如何在初始化期间,首次启动之前调用我的检查startSchedule()

2 个答案:

答案 0 :(得分:3)

在 bean初始化期间将调用 {em}。在初始化bean之后,将调用 PostConstruct方法。 请注意,此bean仅在Spring上下文中存在一次,因此仅在启动时调用Scheduled

另见答案:Will a method annotated with @PostConstruct be guaranteed to execute prior to a method with @Scheduled within the same bean?

答案 1 :(得分:0)

不要使用注释来安排任务,将TaskScheduler注入您的类,然后在init方法结束时安排任务programamticaly

e.g。

@Inject
private TaskScheduler taskScheduler;

....

然后

taskScheduler.scheduleAtFixedRate(this,5000);