spring引导测试执行10次init脚本

vxqlmq5t  于 2021-07-23  发布在  Java
关注(0)|答案(0)|浏览(227)

上下文:
java
Spring Boot2.4.1
使用h2数据库进行测试
我没用jpa


# data source configuration (The one failing, I have another 2 data-sources):

jdbc-url: "jdbc:h2:mem:db;DB_CLOSE_DELAY=-1;INIT=RUNSCRIPT FROM './schema_1.sql'\\;RUNSCRIPT FROM './data1.sql'"
username: "sa"
password: "sa"
driver-class-name: "org.h2.Driver"

# schema_1.sql:

create schema if not exists `schema_1`;
create table if not exists job_run (
    last_run datetime,
    country varchar(2),
    UNIQUE KEY `country` (`country`)
);

# data1.sql:

INSERT INTO `job_run` (`last_run`, `country`) VALUES ('2020-12-12 00:00:00', 'UK');

当我运行@springboottest时,我可以打开应用程序,但是init脚本执行了10次。对于schema_1.sql中包含的create tables,这不是什么大问题,因为我刚刚添加了“if not exists”;问题是在我开始需要数据时出现的,由于表约束(我需要)和测试范围,我不能接受10倍于同一记录的数据。
我知道它试图执行它10次,因为在添加unique约束之前,我看到同一条记录被插入了那么多次。
对这种行为有什么解释吗?我真的不明白。
不管怎样,这是一个明显的问题:

org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: Unique index or primary key violation: "PUBLIC.COUNTRY_INDEX_D ON PUBLIC.JOB_RUN(COUNTRY) VALUES 1"; SQL statement:
INSERT INTO `job_run` (`last_run`, `country`) VALUES ('2020-12-12 00:00:00', 'IT') [23505-200]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:459) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.message.DbException.get(DbException.java:205) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.message.DbException.get(DbException.java:181) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.index.BaseIndex.getDuplicateKeyException(BaseIndex.java:103) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.mvstore.db.MVSecondaryIndex.checkUnique(MVSecondaryIndex.java:221) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.mvstore.db.MVSecondaryIndex.add(MVSecondaryIndex.java:196) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.mvstore.db.MVTable.addRow(MVTable.java:531) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.command.dml.Insert.insertRows(Insert.java:195) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.command.dml.Insert.update(Insert.java:151) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.command.dml.RunScriptCommand.execute(RunScriptCommand.java:79) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.command.dml.RunScriptCommand.update(RunScriptCommand.java:58) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.command.CommandList.executeRemaining(CommandList.java:50) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.command.CommandList.update(CommandList.java:67) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.command.Command.executeUpdate(Command.java:251) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.engine.Engine.openSession(Engine.java:243) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.engine.Engine.createSessionAndValidate(Engine.java:171) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.engine.Engine.createSession(Engine.java:166) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.engine.Engine.createSession(Engine.java:29) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:340) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:173) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:152) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.Driver.connect(Driver.java:69) ~[h2-1.4.200.jar:1.4.200]
    at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-3.4.5.jar:na]
    at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:358) ~[HikariCP-3.4.5.jar:na]
    at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-3.4.5.jar:na]
    at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:477) ~[HikariCP-3.4.5.jar:na]
    at com.zaxxer.hikari.pool.HikariPool.access$100(HikariPool.java:71) ~[HikariCP-3.4.5.jar:na]
    at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:725) ~[HikariCP-3.4.5.jar:na]
    at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:711) ~[HikariCP-3.4.5.jar:na]
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
    at java.base/java.lang.Thread.run(Thread.java:835) ~[na:na]

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题