应用程序退出后Jooq插入将丢失(使用h2本地嵌入文件)

问题描述 投票:0回答:1

dsl 上下文创建:


private val resource =
    Thread.currentThread().contextClassLoader.getResource("mock-data.db")!!

private val conn =
    DriverManager.getConnection("jdbc:h2:${resource.path};AUTO_SERVER=TRUE")

val appDslContext get():DSLContext = DSL.using(conn, SQLDialect.H2)

插入语句:

 val alarmEvent = MonitorAlarmEventEntity(....)
 appDslContext.newRecord(MonitorAlarmEvent.MONITOR_ALARM_EVENT).apply {
            from(alarmEvent)
 }.insert()

 // works fine, I can see the inserted row was printed.
 println(
    appDslContext.select().from(MonitorAlarmEvent.MONITOR_ALARM_EVENT)          .fetchInto(MonitorAlarmEventEntity::class.java)
 )

重新运行应用程序后,我仍然只看到一条记录,之前的记录丢失了。

sql-insert h2 jooq
1个回答
0
投票

我可以看到两个可能的问题:要么你没有正确关闭 H2 数据库,要么你没有使用可写文件。

要解决第一个问题,只需确保在应用程序退出之前通过调用

Connection
来清理
close()

对于第二个,我想类路径中的资源是不可直接写入的。但是,您正在使用路径创建连接,所以我不确定这将如何解决。如果这是问题所在,我希望您会在日志中看到异常。无论哪种情况,这在生产中都行不通。您希望数据库文件与应用程序代码分开。

© www.soinside.com 2019 - 2024. All rights reserved.