Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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
Mysql:在Spring中禁用每个插入的自动提交_Mysql_Spring_Transactions_Spring Transactions_Bonecp - Fatal编程技术网

Mysql:在Spring中禁用每个插入的自动提交

Mysql:在Spring中禁用每个插入的自动提交,mysql,spring,transactions,spring-transactions,bonecp,Mysql,Spring,Transactions,Spring Transactions,Bonecp,我正在使用Spring4.0.5、Mysql 5.6.19和BoneCP0.8.0 我的问题是,在应用程序中定义的一个事务中,MySql提交每个插入或更新,因此它不进行事务 首先,我读过一些类似于我的问题,但在Spring数据源中设置它对我不起作用: <property name="defaultAutoCommit" value="false" /> MyTx.java } MyDAO.java 我的问题是,当一步一步地调试或强制失败时,首先,其次,Thirs会立即提交到数据库,

我正在使用Spring4.0.5、Mysql 5.6.19和BoneCP0.8.0

我的问题是,在应用程序中定义的一个事务中,MySql提交每个插入或更新,因此它不进行事务

首先,我读过一些类似于我的问题,但在Spring数据源中设置它对我不起作用:

<property name="defaultAutoCommit" value="false" />
MyTx.java

}

MyDAO.java

我的问题是,当一步一步地调试或强制失败时,首先,其次,Thirs会立即提交到数据库,而不会出现事务行为

我的代码或方法是否有任何错误?我应该把插入句直接放在doInTransactionWithoutResult方法中吗?我是否应该以另一种方式执行此操作,因此这三个插入是以事务方式完成的

任何帮助都将不胜感激。
正如Martin所建议的,带有@Transactional的声明性事务更适合这一点,对我来说也更合适。所以,谢谢你

这两个链接在本主题中对我很有帮助:


您使用的是MySQL,请确保您使用的表支持事务。MyISAM表不支持事务,请确保它们是InnoDB表。为什么不使用声明性事务而使用手动事务?JdbcTemplate和TransactionTemplate也是线程安全的,在您的上下文中创建它们,注入并重用它们。尤其是JdbcTemplate是一个相当大且耗时的对象构造。@m-deinum,谢谢您的回答。我将尝试声明性事务。我正在使用InnoDB表。
    private DataSourceTransactionManager txManager; // Injected in Spring Beans XML
private IMyDAO writerDAO;

public void saveBeans(DataContainer targetData) throws Throwable{
    try {
        JdbcTemplate templateTransaction = new JdbcTemplate(txManager.getDataSource());

        MyTx newTx = new MyTx(targetData, templateTransaction, writerDAO);

        TransactionTemplate txTemplate = new TransactionTemplate(txManager);
        txTemplate.execute(newTx);
    } catch (Throwable e) {
        logger.error("Error saving into DB", e);
        throw e;
    }
}
public class MyTx extends TransactionCallbackWithoutResult {
private IMyDAO writerDAO;
private DataContainer finalData;
private JdbcTemplate txTemplate;

public MyTx(DataContainer newData, JdbcTemplate newTxTemplate, IMyDAO writerDAO){
    this.finalData = newData;
    this.txTemplate = newTxTemplate;
    this.writerDAO = writerDAO;
}

@Override
protected void doInTransactionWithoutResult(TransactionStatus status) {
    writerDAO.saveTargetBean(newData, txTemplate);
}
    private void saveTargetBean(...) {
    jdbcTemplate.update("INSERT...", ...); // First
    jdbcTemplate.update("INSERT...", ...); // Second
    jdbcTemplate.update("INSERT...", ...); // Third
}