有没有办法在 Quarkus 测试之前强制执行 import.sql?

Car*_*rla 3 quarkus


我想在 Quarkus 测试中使用 H2 测试资源:

@QuarkusTestResource(H2DatabaseTestResource.class)
Run Code Online (Sandbox Code Playgroud)

但是我需要数据库中有一些可用的表。尽管我已经放置了带有 DDL 的 resources/import.sql,但测试失败,因为它在执行 import.sql 之前尝试使用配置中的表:

quarkus.security.jdbc.principal-query.sql=SELECT u.password, u.role FROM test_user u WHERE u.username=?
Run Code Online (Sandbox Code Playgroud)

因此:

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]
Run Code Online (Sandbox Code Playgroud)

有什么办法可以在 Quarkus 读取配置文件之前执行 SQL 吗?

Fra*_*oni 6

您需要将 INIT 参数包含到 JDBC 连接字符串中,其中包含对要执行的 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'
Run Code Online (Sandbox Code Playgroud)

请参阅使用 H2 数据库保护 Quarkus 的示例应用程序。