编程语言
首页 > 编程语言> > java-Spring-JDBC batchUpdate不提交更改.这是一个臭虫吗?

java-Spring-JDBC batchUpdate不提交更改.这是一个臭虫吗?

作者:互联网

我正在研究的项目使用以下依赖项

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>3.2.0.RELEASE</version>
 </dependency>

我正在使用以下方法调用(1)

template.batchUpdate(INSERT_SQL, instance of BatchPreparedStatementSetter);

查看Spring JDBCTemplate中的源代码,似乎(因为驱动程序支持
批处理更新)PreparedStatement上的executeBatch()被调用.但是,我看不到数据库中更新的影响.

这是一个真正的错误,还是我在这里遗漏了明显的错误?如果问题已解决,请告知一个好的版本.请注意,我需要一个不依赖于其他Spring模块(例如Spring Core或MVC)的版本.提前致谢.

解决方法:

如果您不想使用自动提交,则必须在Spring配置中设置PlatformTransactionManager.为了简单地使用JDBC,可以使用DataSourceTransationManager.

在Web应用程序中,通常在服务层中使用@Transactional批注.在一个简单的应用程序中,Spring提出了TransactionTemplate.这是Spring参考手册3.2中的示例

public class SimpleService implements Service {

  // single TransactionTemplate shared amongst all methods in this instance
  private final TransactionTemplate transactionTemplate;

  // use constructor-injection to supply the PlatformTransactionManager
  public SimpleService(PlatformTransactionManager transactionManager) {
    Assert.notNull(transactionManager, "The 'transactionManager' argument must not be null.");
    this.transactionTemplate = new TransactionTemplate(transactionManager);
  }

  public Object someServiceMethod() {
    return transactionTemplate.execute(new TransactionCallback() {

      // the code in this method executes in a transactional context
      public Object doInTransaction(TransactionStatus status) {
        updateOperation1();
        return resultOfUpdateOperation2();
      }
    });
  }
}

updateOperation是必须在事务上下文中调用的方法.

标签:batch-updates,commit,spring,java,spring-jdbc
来源: https://codeday.me/bug/20191029/1960217.html