有没有办法在 Quarkus 测试之前强制执行 import.sql?
Is there a way to force execution of import.sql before Quarkus Tests?
我想将 H2 测试资源用于我的 Quarkus 测试:
@QuarkusTestResource(H2DatabaseTestResource.class)
但是我需要在数据库中提供一些表。
尽管我在其中放置了一个包含 DDL 的 resources/import.sql,但测试失败了,因为它在执行 import.sql:
之前尝试使用配置中的表
quarkus.security.jdbc.principal-query.sql=SELECT u.password, u.role FROM test_user u WHERE u.username=?
结果:
Caused by: org.h2.jdbc.JdbcSQLException: Table "TEST_USER" not found; SQL statement:
SELECT u.password, u.role FROM test_user u WHERE u.username=? [42102-197]
有什么方法可以在 Quarkus 读取配置文件之前执行 SQL?
您需要在 JDBC 连接字符串中包含 INIT 参数,其中包含对要执行的 SQL 脚本的引用。示例:
quarkus.datasource.url=jdbc:h2:tcp://localhost/mem:elytron_jdbc_test;DB_CLOSE_DELAY=-1;DB_CLOSE_DELAY=-1;INIT=RUNSCRIPT FROM 'classpath:import.sql'
查看保护 Quarkus with H2 Database 安全的示例应用程序。
我想将 H2 测试资源用于我的 Quarkus 测试:
@QuarkusTestResource(H2DatabaseTestResource.class)
但是我需要在数据库中提供一些表。 尽管我在其中放置了一个包含 DDL 的 resources/import.sql,但测试失败了,因为它在执行 import.sql:
之前尝试使用配置中的表quarkus.security.jdbc.principal-query.sql=SELECT u.password, u.role FROM test_user u WHERE u.username=?
结果:
Caused by: org.h2.jdbc.JdbcSQLException: Table "TEST_USER" not found; SQL statement:
SELECT u.password, u.role FROM test_user u WHERE u.username=? [42102-197]
有什么方法可以在 Quarkus 读取配置文件之前执行 SQL?
您需要在 JDBC 连接字符串中包含 INIT 参数,其中包含对要执行的 SQL 脚本的引用。示例:
quarkus.datasource.url=jdbc:h2:tcp://localhost/mem:elytron_jdbc_test;DB_CLOSE_DELAY=-1;DB_CLOSE_DELAY=-1;INIT=RUNSCRIPT FROM 'classpath:import.sql'
查看保护 Quarkus with H2 Database 安全的示例应用程序。