Je développe une application Google App Engine. En production, je prévois d'utiliser Google Cloud SQL, mais en développement je voulais utiliser une base de données h2. Il fonctionne très bien lorsque vous utilisez un en mémoire et embeded db (jdbc:h2:mem/dev
/jdbc:h2:~/folder/dev
), mais pas avec un permis serveur (jdbc:h2:~/folder/dev;AUTO_SERVER=TRUE
), il échoue avec l'erreur suivante:Utilisation de la base de données h2 pour le développement local dans Google App Engine
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)
Si je comprends bien, cela est GAE de Ce qui m'empêche d'avoir un accès facile à la base de données pendant que l'application est en cours d'exécution. Est-il possible de contourner ce problème en mode serveur local uniquement? Je suis curieux de savoir s'il existe une alternative à l'utilisation d'une base de données MySql en mode dev.