有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

多个不同时间的java Spring调度

我目前正在做一个当用户点击时自动抓取网页内容的项目,但我遇到了一个问题,我需要在不同的时间不同的秒运行这些方法。我已经提到了@Schedule和TimerTask,但它们只能在固定时间工作。我的案子有什么解决办法吗

代码示例:

public void run(String selectedWeb) {
   if(selectedWeb.equals("First Web")) {
      scrapeFirstWeb(); //Need this method auto execute on 8, 30, 42 seconds every minute
   }else if(selectedWeb.equals("Second Web")) {
      scrapeSecondWeb(); //Need this method auto execute on 10am, 1pm, 11pm every day
   }    
}

PS:我以前在cron中使用过@Scheduled annotation,但有一个问题是这个annotation将自动运行所有方法,包括我没有选择运行的方法。因为我可能有只刮第一个网或第二个网的情况,而不是两者都刮,但是注释会忽略你选择的网,当时间到了,它也会非常可爱。这就是我的问题

如果有人知道我有什么方法可以让@Schedule annotation为我选择的方法运行,只能做评论,请提前告诉我,谢谢


共 (1) 个答案

  1. # 1 楼答案

    最后我找到了一种解决这个问题的方法,它还可以使用back@Schedule注释

    //Set @Scheduled annotation to false to avoid it auto execute when compile
    @Value("${jobs.enabled:false}")
    private boolean isEnabled;
    
    public void run(String selectedWeb) {
       if(selectedWeb.equals("First Web")) {
          //Set it back to true when it has been selected
          isEnabled = true
          scrapeFirstWeb();
       }else if(selectedWeb.equals("Second Web")) {
          isEnabled = true
          scrapeSecondWeb();
       }    
    }
    
    @Scheduled(cron = "8,30,42 * * * * *")
        public void scrapeFirstWeb(){
        //So when isEnabled is false, it will not doing anything until it is true
        if(isEnabled){
           //Do something
        }
    }
    

    详细解释可参考此处https://www.baeldung.com/spring-scheduled-enabled-conditionally