如何对同一应用程序的多个实例使用H2 DB

时间:2018-09-22 05:16:41

标签: java spring spring-boot spring-batch h2

我们有一个使用Spring Batch框架开发的简单Java应用程序,用于将以文件形式接收的数据加载到数据库中。我们已经使用H2数据库存储读取/加载/失败的记录数的统计信息。在某些情况下,我们需要同时将多个文件加载到不同的表中,这意味着要运行同一Jar文件的多个实例。问题是,H2数据库一次不提供多个连接,并且在运行第二个实例时会反复抛出“文件被锁定”异常。

平台:AIX

Java版本:1.8

H2数据库版本:1.4.193

application.properties中的H2配置

spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:file:./h2/DataLoaderApp
spring.datasource.username=sa
spring.datasource.password=

我尝试了不同的解决方案,但是似乎什么都没有。

尝试1:This did not work

尝试2:附加的FILE_LOCK = NO,尽管我看不到正在创建* lock.db文件,但仍会引发文件锁定异常。

请帮助我,非常感谢您的宝贵时间。

1 个答案:

答案 0 :(得分:2)

看一下server-mode connection的H2手册。
将您的连接URL更改为jdbc:h2:tcp://localhost/~/DataLoaderApp,并在建立连接之前,H2db实例必须正在运行。您可以在运行应用程序之前执行独立的H2实例,也可以通过主要方法启动H2:

public static void main(String[] args) {
        Server.createTcpServer().start();
        SpringApplication.run(YourApplication.class, args);
    }