当前位置: 首页 > 知识库问答 >
问题:

连接关闭后不允许进行任何操作

梁建德
2023-03-14

我尝试使用Flyway6.0.beta2BaseJavaMigration和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:连接关闭后不允许任何操作。

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);
                    }
                }
            }
        }
    }
}

原因是什么

共有1个答案

谯英彦
2023-03-14

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

如果您检查这里的示例:https://flywaydb.org/documentation/migrations#java-based-migrations,您将看到语句是关闭的,但连接不是关闭的。

 类似资料:
  • 问题内容: 我构建了一个应用程序,并在本地部署了……并且运行良好。我将其部署在远程服务器上,并开始获取主题行中提到的异常。这不是因为防火墙问题。 我更改了通过IP地址而不是本地主机进行连接的方式,现在我在本地部署的应用程序上获得了相同的超时。当我使应用程序运行超过一天时,出现此错误。 我自己提交事务或关闭会话之后,我不执行任何操作。我正在使用以下属性 引起原因:com.mysql.jdbc.exc

  • 我为我的webiste更改了主机公司,其中我使用mySQL db。我不时收到这个错误: 连接关闭后不允许进行任何操作。 我记得我第一次在旧服务器上运行我的站点时遇到了同样的问题,我用“配置修复”而不是“代码修复”修复了这个问题,但我不记得我做了什么:( 我在这里读了很多帖子,但每一篇都在谈论代码修复,我不认为这是我的情况 有人能帮我吗? 非常感谢。 编辑 我在我的旧环境中发现了这一点。xml文件;

  • 我已经构建了一个应用程序,使用会话维护。它使用JDBC 当应用程序部署在服务器(Apache Tomcat 6)上时。我可以登录和注销会话。工作完全正常。 现在,我让服务器继续运行24小时。现在,第二天我在输入凭据后尝试登录系统,单击登录按钮,我在网页上看到如下错误:(这是什么原因?) Http状态500 例外 组织。阿帕奇。贾斯珀。JasperException:处理JSP页面/登录时发生异常。

  • 我真的被这个问题困住了,所以我很高兴有人能帮我! 我用java创建了一个登录页面,并在其中创建了一个MYSQL连接。如果您第一次尝试登录,代码可以正常工作,但是在您注销并再次尝试登录之后,我得到了这个错误:com.mysql.jdbc.exceptions.jdbc4.mysqlnontransientconnectionException:连接关闭后不允许任何操作。 和DBManager

  • 问题内容: 我正在尝试执行getPendingSalesOrderIDs()方法,该方法调用方法selectInAsending(…)。 但这显示了一个SQLException,它说java.sql.SQLException:在ResultSet关闭后不允许进行该操作 此处db.endSelect()将关闭所有连接。 我认为问题就在于此。 问题答案: 如果关闭ResultSet,为什么不删除它(在

  • 问题内容: 获取java.sql.SQLException:ResultSet关闭后不允许进行操作当我执行以下代码时,出现异常。我认为这是因为我正在与他相同的连接对象编写新语句。我应该如何重写它,以便可以创建准备好的语句并开始使用rs2?即使连接到相同的数据库,我也必须创建一个新的连接对象吗? 问题答案: 问题在于你在中获取数据的方式。每次访问你都会获得新鲜的食物,但你不会关闭它。 这违反了Sta