Spring 安排多个不同的时间
Spring scheduling for multiple different times
我目前正在做一个项目,当用户点击时自动抓取网页内容,但我遇到了一个问题,我需要 运行 在不同的时间不同的秒数中使用这些方法。我参考了 @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 注解,但是有一个问题是这个注解会自动 运行 所有的方法都包括那些我没有使用的方法 select 到 运行。因为我可能只抓取第一个网站或第二个网站,而不是同时抓取两个网站,但随后注释将忽略您拥有的网站 select,当时间到了时它也会执行。这就是我的问题。
如果有人知道有什么方法可以为我select只能做评论的方法做@Schedule注解运行让我知道,在此先感谢!
我建议使用可以随时停止的调度执行器:
ScheduledExecutorService executorService = Executors
.newSingleThreadScheduledExecutor();
ScheduledFuture<?> in_method1 = executorService.scheduleAtFixedRate(() -> System.out.println("In method1"), 5, 3, TimeUnit.SECONDS);
Thread.sleep(10000);
in_method1.cancel(false);
终于找到解决这个问题的办法了,而且还可以用回@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
我目前正在做一个项目,当用户点击时自动抓取网页内容,但我遇到了一个问题,我需要 运行 在不同的时间不同的秒数中使用这些方法。我参考了 @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 注解,但是有一个问题是这个注解会自动 运行 所有的方法都包括那些我没有使用的方法 select 到 运行。因为我可能只抓取第一个网站或第二个网站,而不是同时抓取两个网站,但随后注释将忽略您拥有的网站 select,当时间到了时它也会执行。这就是我的问题。
如果有人知道有什么方法可以为我select只能做评论的方法做@Schedule注解运行让我知道,在此先感谢!
我建议使用可以随时停止的调度执行器:
ScheduledExecutorService executorService = Executors
.newSingleThreadScheduledExecutor();
ScheduledFuture<?> in_method1 = executorService.scheduleAtFixedRate(() -> System.out.println("In method1"), 5, 3, TimeUnit.SECONDS);
Thread.sleep(10000);
in_method1.cancel(false);
终于找到解决这个问题的办法了,而且还可以用回@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