我在Spring-boot应用程序启动期间以文件模式创建H2 db。因此,在运行Serrenity BDD集成API测试时,是否可以连接到相同的db文件?
我采用了此处指定的混合模式方法自动混合模式
application.yaml
spring:
cache:
enabled: false
sql:
init:
mode: always
datasource:
url: jdbc:h2:./../myApp/data/ppyDB;AUTO_SERVER=TRUE;MODE=Oracle
username: sa
password: sa
baseline-on-migrate: true
driverClassName: org.h2.Driver
jpa:
defer-datasource-initialization: false
show-sql: true
hibernate:
ddl-auto: none
flyway:
enabled: true
username: sa
password: sa
url: jdbc:h2:./../myApp/data/ppyDB;AUTO_SERVER=TRUE;MODE=Oracle
locations: classpath:/db/h2/migration
h2:
console:
enabled: true
path: /h2-console
测试运行后,我可以看到数据库中的新记录
这是在测试验证期间连接到相同数据库的代码
sql = "SELECT * FROM HEADER";
try{
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("org.h2.Driver");
dataSource.setUrl("jdbc:h2:./../myApp/data/ppyDB;AUTO_SERVER=TRUE;MODE=Oracle");
dataSource.setUsername("sa");
dataSource.setPassword("sa");
conn = dataSource.getConnection();
String metadataValue = "";
String strMetadata = "test_code";
statement = conn.createStatement();
ResultSet rs = statement.executeQuery(sql);
while (rs.next()) {
metadataValue = strMetadata.isEmpty() || strMetadata.isBlank() ? rs.getString(0) : rs.getString(strMetadata);
}
statement.close();
conn.close();
Assert.assertEquals(key, "header.approve", metadataValue);
DB文件实际路径:C:Projects\myApp\data\myDB.mv.db
SerenityBDD集成测试功能文件路径:C:Projects\myApp\api\src\it\resources\
SerenityBDD集成测试stepDef路径:C:Projects\myApp\api\src\it\java\stepdefs
,上面的数据库访问代码所在的位置
主应用程序路径:C:Projects\myApp\api\src\main
然而,我不能连接到数据库使用服务器模式通过上述测试代码。
我通过两个连接连接到同一台机器上的同一个H2文件,如果有意义的话。
当前错误:
org.h2.jdbc.JdbcSQLNonTransientConnectionException: Connection is broken: "java.net.SocketTimeoutException: Connect timed out: 172.28.308.1:32632" [90067-214] at org.h2.message.DbException.getJdbcSQLException(DbException.java:678) at org.h2.message.DbException.getJdbcSQLException(DbException.java:477)
myDB.lock.db**
#FileLock
#Wed Apr 12 12:39:46 AEST 2023
server=172.28.308.1\:32632
hostName=AULT-D64WVP99.mshome.net
method=file
id=18773536407803de631be7d5c6a327adf2b4a815286
我可以用这个url jdbc:h2:./../myApp/data/ppyDB;AUTO_SERVER=TRUE;MODE=Oracle
在两个窗口中连接到嵌入模式的数据库
所以这里的问题,尽管能够连接在两个H2控制台,为什么不通过代码?进一步我的知识和根据文档不需要指定端口或IP地址(在锁定文件)时,做一个新的连接。
请澄清。
1条答案
按热度按时间bogh5gae1#
H2文件数据库一次只允许一个连接。您需要重用现有的连接,完全避免并发连接或在服务器模式下使用H2。
在服务器模式下运行h2的一些链接:https://www.h2database.com/html/tutorial.html#using_server