首页 > 解决方案 > FlyWay 连接关闭后不允许操作

问题描述

我尝试使用 FlyWay 6.0.Beta2 BaseJavaMigration 和 Mysql

@Slf4j
public class V1_7__ini_cf_template_2019_07_1 extends BaseJavaMigration {

  @Override
  public void migrate(Context context) throws Exception {
    log.info("111");
    try (Connection connection = context.getConnection()) {
      log.info("222");
      try (PreparedStatement statement = connection.prepareStatement(
          "insert into console.customers_settings (settings_customer_id, start_balance, max_balance_allowed, max_instance_allowed) values (?, ?, ?, ?)")) {
        log.info("333");
        statement.setLong(1, 3);
        statement.setBigDecimal(2, new BigDecimal(100));
        statement.setBigDecimal(3, new BigDecimal(200));
        statement.setBigDecimal(4, new BigDecimal(300));
        statement.executeUpdate();
      }
    }
  }
}

出于某种原因,我收到一个错误

无法回滚事务 java.sql.SQLNonTransientConnectionException:连接关闭后不允许任何操作。

和一个类型的请求。好好工作

https://flywaydb.org/getstarted/java

public class V3__Anonymize extends BaseJavaMigration {
    public void migrate(Context context) throws Exception {
        try (Statement select = context.getConnection().createStatement()) {
            try (ResultSet rows = select.executeQuery("SELECT id FROM person ORDER BY id")) {
                while (rows.next()) {
                    int id = rows.getInt(1);
                    String anonymizedName = "Anonymous" + id;
                    log.info(anonymizedName);
                    }
                }
            }
        }
    }
}

可能是什么原因

标签: mysqlprepared-statementflyway

解决方案


不要将 -once 放在Connection connection = context.getConnection()里面,try一旦完成,连接将在 Flyway 引擎完成之前关闭。通过一些额外的日志记录,您可以看到您的异常在迁移完成后发生。

如果您在此处查看示例:https ://flywaydb.org/documentation/migrations#java-based-migrations您将看到该语句已关闭,但连接未关闭。


推荐阅读