在Google App Engine中使用h2数据库进行本地开发
问题描述:
我正在开发Google App Engine应用程序。在生产中,我计划使用Google Cloud SQL,但在开发中我想使用h2数据库。在Google App Engine中使用h2数据库进行本地开发
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的:它使用的内存和嵌入式数据库(jdbc:h2:mem/dev
/jdbc:h2:~/folder/dev
),但不与启用服务器一(jdbc:h2:~/folder/dev;AUTO_SERVER=TRUE
)时,出现以下错误,当工作正常限制播放。这阻止了我在应用程序运行时轻松访问数据库。有没有办法在本地服务器模式下绕过这个问题?我很好奇,如果在开发模式下使用MySql数据库还有其他选择。
答
当前正在GAE中尝试H2。标准环境对我来说是不可行的,因为mem和可写磁盘:与F4-1G实例组合的最大1Gb。 如果h2嵌入模式有效,则必须使用Flexible作为标准,只允许/ tmp进行写入操作。 在错误本身上,GAE不允许监听套接字,因此不管环境类型如何,都不会自动创建服务器(https://cloud.google.com/appengine/docs/standard/java/sockets/)