gpt4 book ai didi

java - 在 Spring Boot 应用程序启动后调用方法

转载 作者:搜寻专家 更新时间:2023-10-31 19:36:34 26 4
gpt4 key购买 nike

我有一个 Java Spring Boot 应用程序,它有一个调度程序,它从服务调用异步任务任务需要几分钟(通常是 3-5 分钟)才能完成。

服务中的相同异步方法也可以通过 UI 应用程序调用,方法是从 Spring Boot Controller 调用 API。

代码:

调度器

@Component
public class ScheduledTasks {
@Autowired
private MyService myService;

@Scheduled(cron = "0 0 */1 * * ?")
public void scheduleAsyncTask() {
myService.doAsync();
}
}

服务

@Service
public class MyService {
@Async("threadTaskExecutor")
public void doAsync() {
//Do Stuff
}
}

Controller

@CrossOrigin
@RestController
@RequestMapping("/mysrv")
public class MyController {
@Autowired
private MyService myService;

@CrossOrigin
@RequestMapping(value = "/", method = RequestMethod.POST)
public void postAsyncUpdate() {
myService.doAsync();
}
}

调度程序每小时运行一次异步任务,但用户也可以从 UI 手动运行它。

但是,如果异步方法已经在执行中,我不希望它再次运行。

为了做到这一点,我在数据库中创建了一个表,其中包含一个标志,该标志在方法运行时打开,然后在方法完成后关闭。

在我的服务类中是这样的:

@Autowired
private MyDbRepo myDbRepo;

@Async("threadTaskExecutor")
public void doAsync() {
if (!myDbRepo.isRunning()) {
myDbRepo.setIsRunning(true);
//Do Stuff
myDbRepo.setIsRunning(false);
} else {
LOG.info("The Async task is already running");
}
}

现在,问题是标志有时会由于各种原因(应用程序重启、其他应用程序错误等)而卡住

因此,我想在每次部署 spring boot 应用程序以及重新启动时重置 DB 中的标志。

我该怎么做?有什么方法可以在 Spring Boot 应用程序启动后立即运行一个方法,从那里我可以从我的 Repo 调用一个方法来取消设置数据库中的标志?

最佳答案

关于java - 在 Spring Boot 应用程序启动后调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55874855/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com