有没有一种方法可以在Quarkus测试之前强制执行import.sql?

3
我想在我的Quarkus测试中使用H2测试资源:
@QuarkusTestResource(H2DatabaseTestResource.class)

然而,我需要在数据库中有一些可用的表格。尽管我已经在resources/import.sql文件中放置了DDL,但测试失败了,因为它在执行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?
2个回答

6

您需要在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'

以下是一个示例应用程序,它使用H2数据库保护Quarkus:Securing Quarkus with Elytron Database Realm


1

现在您还可以添加属性quarkus.hibernate-orm.sql-load-script。例如:

%test.quarkus.hibernate-orm.sql-load-script=META-INF/sql/import-test.sql

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接