使用h2数据库在Google App Engine中进行本地开发

时间:2017-09-18 10:52:32

标签: database google-app-engine h2

我正在开发Google App Engine应用程序。在制作中,我打算使用Google Cloud SQL,但在开发中我想使用h2数据库。它在使用内存和嵌入式db(jdbc:h2:mem/dev / jdbc:h2:~/folder/dev)时工作正常,但不支持服务器启用的(jdbc:h2:~/folder/dev;AUTO_SERVER=TRUE),它失败并出现以下错误:

org.h2.jdbc.JdbcSQLException: IO Exception: "java.net.SocketException: Permission denied: Not allowed to issue a socket bind: permission denied."; "port: 0 ssl: false" [90031-168]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
at org.h2.message.DbException.get(DbException.java:158)
at org.h2.message.DbException.convertIOException(DbException.java:315)
at org.h2.util.NetUtils.createServerSocketTry(NetUtils.java:193)
at org.h2.util.NetUtils.createServerSocket(NetUtils.java:156)
at org.h2.server.TcpServer.start(TcpServer.java:222)
at org.h2.tools.Server.start(Server.java:455)
at org.h2.engine.Database.startServer(Database.java:672)
at org.h2.engine.Database.open(Database.java:544)
at org.h2.engine.Database.openDatabase(Database.java:222)
at org.h2.engine.Database.<init>(Database.java:217)
at org.h2.engine.Engine.openSession(Engine.java:56)
at org.h2.engine.Engine.openSession(Engine.java:159)
at org.h2.engine.Engine.createSessionAndValidate(Engine.java:138)
at org.h2.engine.Engine.createSession(Engine.java:121)
at org.h2.engine.Engine.createSession(Engine.java:28)
at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:305)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:108)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:92)
at org.h2.Driver.connect(Driver.java:72)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)

据我了解,这是GAE的局限性。这使我无法在应用程序运行时轻松访问数据库。有没有办法只在本地服务器模式下绕过这个问题?我很好奇是否可以在开发模式下使用MySql数据库。

1 个答案:

答案 0 :(得分:1)

目前也在GAE中尝试H2。由于mem和可写磁盘,标准环境对我来说是不可取的:最大1Gb与F4-1G实例的组合。 如果h2嵌入模式有效,则必须使用Flexible as Standard才允许/ tmp进行写操作。 在错误本身上,GAE不允许监听套接字,因此不管环境类型如何,都不会出现自动服务器(https://cloud.google.com/appengine/docs/standard/java/sockets/