首页 > 解决方案 > Google Cloud App Engine + H2 持久化 + Spring boot JPA

问题描述

我尝试在应用程序引擎上部署我的 spring rest 应用程序,它使用一个简单的数据库 H2,但是当我的应用程序在应用程序引擎上启动时:

org.h2.jdbc.JdbcSQLException: Error while creating file "/srv/data" [90062-196]
at org.h2.message.DbException.getJdbcSQLException (DbException.java:345)
at org.h2.message.DbException.get (DbException.java:179)
at org.h2.message.DbException.get (DbException.java:155)
at org.h2.store.fs.FilePathDisk.createDirectory (FilePathDisk.java:274)
at org.h2.store.fs.FileUtils.createDirectory (FileUtils.java:42)
at org.h2.store.fs.FileUtils.createDirectories (FileUtils.java:309)
at org.h2.store.FileLock.lockFile (FileLock.java:342)
at org.h2.store.FileLock.lock (FileLock.java:135)
at org.h2.engine.Database.open (Database.java:662)
at org.h2.engine.Database.openDatabase (Database.java:276)
at org.h2.engine.Database.<init> (Database.java:270)
at org.h2.engine.Engine.openSession (Engine.java:64)
at org.h2.engine.Engine.openSession (Engine.java:176)
at org.h2.engine.Engine.createSessionAndValidate (Engine.java:154)
at org.h2.engine.Engine.createSession (Engine.java:137)
at org.h2.engine.Engine.createSession (Engine.java:27)
at org.h2.engine.SessionRemote.connectEmbeddedOrServer (SessionRemote.java:354)
at org.h2.jdbc.JdbcConnection.<init> (JdbcConnection.java:116)
at org.h2.jdbc.JdbcConnection.<init> (JdbcConnection.java:100)
at org.h2.Driver.connect (Driver.java:69)
at com.zaxxer.hikari.util.DriverDataSource.getConnection (DriverDataSource.java:138)
at com.zaxxer.hikari.pool.PoolBase.newConnection (PoolBase.java:354)
at com.zaxxer.hikari.pool.PoolBase.newPoolEntry (PoolBase.java:202)
at com.zaxxer.hikari.pool.HikariPool.createPoolEntry (HikariPool.java:473)
at com.zaxxer.hikari.pool.HikariPool.checkFailFast (HikariPool.java:554)
at com.zaxxer.hikari.pool.HikariPool.<init> (HikariPool.java:115)
at com.zaxxer.hikari.HikariDataSource.getConnection (HikariDataSource.java:112)

还有我的 application.properties

spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:file:./data/planningDb;AUTO_SERVER=TRUE
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect

我想知道我是否有权在 app Engine 中写入 H2 文件;

谢谢

标签: spring-bootgoogle-app-enginegoogle-cloud-platformspring-data-jpah2

解决方案


App Engine 根据您使用的运行时限制您可以写入的目录,因此在 GAE 标准中您不能在 /tmp 之外写入。还要记住,在 GAE 实例中拥有数据库将为每个实例创建一个数据库,并且每次删除/重新启动实例时内容都会丢失。

我建议您使用Cloud SQL 选项之一或为数据库创建 GCE 实例,您可以避免丢失数据。如果您选择使用 GCE 实例,则必须自己维护它,Cloud SQL 实例由 Google 管理。


推荐阅读