Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine Google应用程序引擎GAE上的问题:无法锁定表架构\u版本_Google App Engine_Flyway_Google Cloud Sql - Fatal编程技术网

Google app engine Google应用程序引擎GAE上的问题:无法锁定表架构\u版本

Google app engine Google应用程序引擎GAE上的问题:无法锁定表架构\u版本,google-app-engine,flyway,google-cloud-sql,Google App Engine,Flyway,Google Cloud Sql,我们正在使用云SQL进行GAE。在本地开发服务器上,一切都很好。我们正在使用带有静态连接字符串的AppEngineDriver。在生产环境中连接良好,因为Flyway能够创建schema_版本表 但我们得到一个错误,它无法锁定所述表。桌子是空的。我们有3次迁移,但都没有执行 我们在Spring以Java配置风格创建数据源bean时启动迁移 这是堆栈跟踪 非常感谢 更新1:我在第一个堆栈跟踪的末尾添加了一个相关的二级堆栈跟踪 com.googlecode.flyway.core.api.Flywa

我们正在使用云SQL进行GAE。在本地开发服务器上,一切都很好。我们正在使用带有静态连接字符串的AppEngineDriver。在生产环境中连接良好,因为Flyway能够创建schema_版本表

但我们得到一个错误,它无法锁定所述表。桌子是空的。我们有3次迁移,但都没有执行

我们在Spring以Java配置风格创建数据源bean时启动迁移

这是堆栈跟踪

非常感谢

更新1:我在第一个堆栈跟踪的末尾添加了一个相关的二级堆栈跟踪

com.googlecode.flyway.core.api.FlywayException:无法锁定表
ourschema
schema\u版本
: java.sql.SQLException:在准备好的语句协议中还不支持此命令 位于com.google.cloud.sql.jdbc.internal.Exceptions.newSqlException(Exceptions.java:219) 位于com.google.cloud.sql.jdbc.internal.SqlProtoClient.check(SqlProtoClient.java:198) 位于com.google.cloud.sql.jdbc.internal.SqlProtoClient.executeSql(SqlProtoClient.java:87) 位于com.google.cloud.sql.jdbc.internal.SqlProtoClient.executeSql(SqlProtoClient.java:76) 位于com.google.cloud.sql.jdbc.Connection.executeSql(Connection.java:528) 在com.google.cloud.sql.jdbc.PreparedStatement.executeSqlImpl(PreparedStatement.java:141) 位于com.google.cloud.sql.jdbc.Statement.executeImpl(Statement.java:154) 位于com.google.cloud.sql.jdbc.PreparedStatement.execute(PreparedStatement.java:122) 位于com.googlecode.flyway.core.dbsupport.JdbcTemplate.execute(JdbcTemplate.java:214) 位于com.googlecode.flyway.core.dbsupport.mysql.MySQLTable.doLock(MySQLTable.java:58) 位于com.googlecode.flyway.core.dbsupport.Table.lock(Table.java:254) 位于com.googlecode.flyway.core.metadatatable.MetaDataTableImpl.lock(MetaDataTableImpl.java:121) 位于com.googlecode.flyway.core.command.DbMigrate$1.doInTransaction(DbMigrate.java:140) 位于com.googlecode.flyway.core.command.DbMigrate$1.doInTransaction(DbMigrate.java:138) 位于com.googlecode.flyway.core.util.jdbc.TransactionTemplate.execute(TransactionTemplate.java:54) 位于com.googlecode.flyway.core.command.DbMigrate.migrate(DbMigrate.java:137) 位于com.googlecode.flyway.core.flyway$1.execute(flyway.java:862) 位于com.googlecode.flyway.core.flyway$1.execute(flyway.java:815) 位于com.googlecode.flyway.core.flyway.execute(flyway.java:1177) 位于com.googlecode.flyway.core.flyway.migrate(flyway.java:815) 位于com.ourapplication.pilote.persistence.FlywayMigrationDataSourceInitializer.postInitialize(FlywayMigrationDataSourceInitializer.java:23) 位于com.ourapplication.pilote.persistence.PersistenceConfiguration.initializeDataSource(PersistenceConfiguration.java:188) 位于com.ourapplication.pilote.persistence.PersistenceConfiguration.dataSource(PersistenceConfiguration.java:175)

原因:java.sql.SQLException:在准备好的语句协议中还不支持此命令 位于com.google.cloud.sql.jdbc.internal.Exceptions.newSqlException(Exceptions.java:219) 位于com.google.cloud.sql.jdbc.internal.SqlProtoClient.check(SqlProtoClient.java:198) 位于com.google.cloud.sql.jdbc.internal.SqlProtoClient.executeSql(SqlProtoClient.java:87) 位于com.google.cloud.sql.jdbc.internal.SqlProtoClient.executeSql(SqlProtoClient.java:76) 位于com.google.cloud.sql.jdbc.Connection.executeSql(Connection.java:528) 在com.google.cloud.sql.jdbc.PreparedStatement.executeSqlImpl(PreparedStatement.java:141) 位于com.google.cloud.sql.jdbc.Statement.executeImpl(Statement.java:154) 位于com.google.cloud.sql.jdbc.PreparedStatement.execute(PreparedStatement.java:122) 位于com.googlecode.flyway.core.dbsupport.JdbcTemplate.execute(JdbcTemplate.java:214) 位于com.googlecode.flyway.core.dbsupport.mysql.MySQLTable.doLock(MySQLTable.java:58)
在com.googlecode.flyway.core.dbsupport.Table.lock(Table.java:254)

上,我有点困惑,因为flyway文档说所有东西都可以通过云SQL和AppEngineDriver在GAE上运行。也许这是最近对Flyway或GAE的改变

但这是我的解决办法

在使用JAD查看GAE的类并跟踪Flyway之后,我认为一些SQL语句(如LOCK)不受RPC协议的支持,RPC协议用于在App Engine服务器实例和MySQL集群之间发送查询

因此,我一时兴起,在Flyway中重写了MySQLTable.java,使用简单语句而不是PreparedStatement。没有语句缓存,但它可以工作

我刚刚将MySQLTable.java复制到我的项目中,保留了相同的打包,并替换了以下内容:

@Override
protected void doLock() throws SQLException
{
    jdbcTemplate.executeStatement("LOCK TABLES " + this + " WRITE");
}

@Override
protected void doUnlock() throws SQLException
{
    jdbcTemplate.executeStatement("UNLOCK TABLES");
}
executeStatement而不是execute

我们将等待正式修复

问候,


雷米

我有点困惑,因为Flyway文档说所有东西都可以在GAE上使用云SQL和AppEngineDriver。也许这是最近对Flyway或GAE的改变

但这是我的解决办法

在使用JAD查看GAE的类并跟踪Flyway之后,我认为一些SQL语句(如LOCK)不受RPC协议的支持,RPC协议用于在App Engine服务器实例和MySQL集群之间发送查询

因此,我一时兴起,在Flyway中重写了MySQLTable.java,使用简单语句而不是PreparedStatement。没有语句缓存,但它可以工作

我刚刚将MySQLTable.java复制到我的项目中,保留了相同的打包,并替换了以下内容:

@Override
protected void doLock() throws SQLException
{
    jdbcTemplate.executeStatement("LOCK TABLES " + this + " WRITE");
}

@Override
protected void doUnlock() throws SQLException
{
    jdbcTemplate.executeStatement("UNLOCK TABLES");
}
executeStatement而不是execute

我们将等待正式修复

问候,


Remy

最新代码已恢复为SELECT。。。由于锁表的其他问题而进行更新。下一个版本应该会再次开箱即用。最新的代码已经恢复为SELECT。。。由于锁表的其他问题而进行更新。下一个版本应该会再次开箱即用