Spring-在应用程序关闭之前执行查询(测试)

Walkeros:

我正在使用Sprind Data JPA / Hibernate作为持久层运行SpringBoot 2.1。在关闭应用程序之前在测试中成功运行查询时遇到了问题

细节:

在应用程序上下文启动期间,我正在通过JPA执行查询(假设此查询转换为以下SQL "insert into mytable('mycolumn') values ('abc'))。

现在,我需要在关闭应用程序之前执行另一个查询。对于给定的示例,这将是"update mytable set mycolumn = 'xyz' where mycolumn = 'abc'

我设法通过在配置类上使用@PreDestroy来执行查询

@Configuration
MyConfig {

   @Autowired
   private MyTransactionalService myService;

   @PreDestroy
   public void doQuery() {
      mySerivce.runMyQuery(); 

  }
}

mySerivce.runMyQuery()延迟到myRepository(这是Spring Data JPA存储库)以调用更新查询:

MyRepository extends JpaRepository(String, Something) {

   @Modifying
   @Query("UPDATE myEntity e SET e.myColumn = 'xyz' WHERE e.myColumn = 'abc")' 
   void runMyQuery();
}

该方法带有@PreDestroyexecutes 注释,但是当查询由H2执行(我的弹簧测试中运行的内存db)时,它抛出异常,表明该表不存在。

事实是该表肯定存在,因为我能够在应用程序启动期间在该表上执行INSERT(请参阅文章开头)。

我的猜测是shudtown进程正在进行中,因此内存数据库被清除了……因此没有表。

无论如何,有什么方法可以确保在与数据库的连接仍然健康且没有删除表时(在应用程序上下文关闭时)执行查询?

Walkeros:

我设法通过使用DB_CLOSE_ON_EXIT=FALSE";init参数克服了这个问题

String url = "jdbc:h2:~/test;DB_CLOSE_ON_EXIT=FALSE";

在这种情况下,H2不会杀死数据库,并在关闭过程中使其保持可用状态。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

EmbeddedKafka AdminClient 在 Spring 应用程序开始测试之前关闭

JUnit ClassRule在Spring Boot应用程序关闭之前执行代码

如何在销毁Web应用程序中的所有其他bean之前关闭Spring任务执行程序/调度程序池?

在测试应用程序之前初始化 Spring Boot 测试 bean

从ApplicationListener关闭spring应用程序

Spring引导应用程序的Gracefull关闭

如何配置 Spring Boot 应用程序以通过 Gradle 执行 Pact.io 提供程序测试

如何配置 Spring Boot 应用程序以通过 Gradle 执行 Pact.io 提供程序测试

在 Cucumber 测试运行之前启动一次 Spring Boot 应用程序

如何在运行集成测试之前启动spring-boot应用程序

在单元测试中启动和关闭Spring应用程序上下文

是什么导致Spring Scheduler在应用程序和Servlet启动之前执行?

黄瓜测试Spring Boot应用程序

Spring Boot应用程序与Spring Cloud的集成测试

迁移 Spring Boot 2.5.12 后,Spring Boot 应用程序未选择所有测试用例执行

配置 HTTP 端点以关闭 Spring Boot Web 应用程序

关闭应用程序后删除Spring JPA数据

正常关闭在Kubernetes中运行的Spring应用程序

如何在 spring boot 启动期间关闭应用程序

以编程方式关闭Spring Boot应用程序

如何关闭Spring Boot命令行应用程序

Spring Boot应用程序一启动就关闭

Spring-boot应用程序无故关闭

Spring WebApp-在应用程序停止时关闭线程

Spring-完全关闭Web应用程序

Spring Boot应用程序正常关闭时的KafkaProducer InterruptedException

获取org.hibernate.exception.JDBCConnectionException:在应用程序正常工作一段时间后无法在Spring应用程序中执行查询

Spring Boot Junit测试安全的应用程序

如何对Spring Boot应用程序进行集成测试?