spring-boot - 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 文件;
谢谢
解决方案
App Engine 根据您使用的运行时限制您可以写入的目录,因此在 GAE 标准中您不能在 /tmp 之外写入。还要记住,在 GAE 实例中拥有数据库将为每个实例创建一个数据库,并且每次删除/重新启动实例时内容都会丢失。
我建议您使用Cloud SQL 选项之一或为数据库创建 GCE 实例,您可以避免丢失数据。如果您选择使用 GCE 实例,则必须自己维护它,Cloud SQL 实例由 Google 管理。
推荐阅读
- jmeter - jmeter的加速期是多少?
- c# - 存储在(DVD-RW)中的 c# 系统无法从其他驱动器更新我的文本文件
- node.js - 如何为上传文件设置限制文件大小(不同路由的限制不同)?
- laravel-5 - 筛选字段时出现“从空值创建默认对象”
- c - 运行正常时在 CLion 中调试期间发生了一些奇怪的事情
- android-studio - 颤振没有运行?
- c++ - bool 类型的函数接收参数(引用)并可能在 C++ 中返回它?
- java - 无法将“java.lang.String”的值转换为所需的类型“myEnum”
- r - 将邻接矩阵转换为 R 中的两列表
- amazon-web-services - AWS EC2 无法访问“/bin/bash:权限被拒绝”