如何在应用程序关闭时保存jpa实体?

5uzkadbs  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(133)

我有一个使用H2数据库为实体处理CRUD操作的服务。以前在测试阶段,我使用一个csv文件作为数据库,在应用程序关闭时,我将所有内存中对实体的更改保存到这个csv文件中。现在我想做同样的事情。但是由于某种原因,我在onExit()方法中没有遇到任何断点,因此在应用程序关闭时没有保存数据。要保存哪些 * 实体,但现在我只希望在Intellij中按下停止'应用程序'按钮时能够自动保存

@Component
public class MangaDataProvider {

  private static MangaService mangaService;

  @Autowired
  public MangaDataProvider(MangaService mangaService) {
    MangaDataProvider.mangaService = mangaService;
  }

  @PreDestroy
  public static void onExit() {
    mangaService.saveAll();
  }
}

Application中有一个onExit()方法:

@SpringBootApplication
public class Application extends SpringBootServletInitializer implements AppShellConfigurator {

  public static void main(String[] args) {
    LaunchUtil.launchBrowserInDevelopmentMode(SpringApplication.run(Application.class, args));
  }

  @PreDestroy
  public void onExit() {
    MangaDataProvider.onExit();
  }
}
eit6fx6z

eit6fx6z1#

无法保证shutdown hook一定会被执行。它们的执行时间非常有限。这意味着您的代码可能会被部分执行。您可以尝试添加一条Print语句,或者一个调试断点。您会看到第一条语句执行了,因为它非常快,但是没有时间执行方法的其余部分。
一个好的做法是调用一个服务或一个终结点来“准备”(在你的情况下,它将保存你的数据)你的应用程序关闭。你调用这个服务/终结点,然后,当执行完成时,你可以安全地终止应用程序。
许多服务器应用程序都有一个“准备关机”端点。)

相关问题