Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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
Java 在NamedParameterJdbcTemplate.batchUpdate中禁用自动提交_Java_Sql_Spring_Jdbctemplate_Autocommit - Fatal编程技术网

Java 在NamedParameterJdbcTemplate.batchUpdate中禁用自动提交

Java 在NamedParameterJdbcTemplate.batchUpdate中禁用自动提交,java,sql,spring,jdbctemplate,autocommit,Java,Sql,Spring,Jdbctemplate,Autocommit,我正在使用NamedParameterJdbcTemplate.batchUpdate对我的DB表进行批量更新,但我想禁用auto commit并手动执行提交 我可以从连接对象设置自动提交模式,但是不知道如何使用NamedParameterJdbcTemplate对象来实现同样的操作。我假设您知道Spring中的事务管理,通过定义@transactional并传递传播和隔离的元数据,您可以优雅地管理事务。如果没有,请看一下。在大多数情况下,这就是你所需要的 如果您想自行获得事务管理并对其进行微调

我正在使用
NamedParameterJdbcTemplate.batchUpdate
对我的DB表进行批量更新,但我想禁用
auto commit
并手动执行提交


我可以从
连接
对象设置自动提交模式,但是不知道如何使用
NamedParameterJdbcTemplate
对象来实现同样的操作。

我假设您知道Spring中的事务管理,通过定义
@transactional
并传递
传播
隔离
的元数据,您可以优雅地管理事务。如果没有,请看一下。在大多数情况下,这就是你所需要的

如果您想自行获得事务管理并对其进行微调(即随意执行提交和回滚),则必须直接获得底层TransactionManager

引述:

使用平台TransactionManager

您还可以直接使用
org.springframework.transaction.PlatformTransactionManager
来管理您的事务。只需通过bean引用将您正在使用的
PlatformTransactionManager
的实现传递给bean即可。然后,使用
TransactionDefinition
TransactionStatus
对象,您可以启动事务、回滚和提交


我已经使用

它有一个
execute
方法,我在这个函数的回调函数中执行业务逻辑

transTemplate.execute( new TransactionCallbackWithoutResult()
        {       
                @Override
                protected void doInTransactionWithoutResult( TransactionStatus status)
                {
                    status.setRollbackOnly();
                    //business logic
                }

        });

谢谢,这里有一个快速反馈,TransactionDefinition是在哪里定义的?还有一个问题,对于业务逻辑,我将使用NamedParameterJdbcTemplate,它使用与我创建DataSourceTransactionManager相同的数据源。两者是否能够相互交互,即引用相同的数据库连接?全名为:org.springframework.transaction.TransactionDefinition和org.springframework.transaction.TransactionStatus。如果您使用Maven拉取依赖项,那么这就是依赖项坐标:org.springframework spring tx 3.1.2.RELEASE正是这个坐标:DataSourceTransactionManager。您所要做的就是将其注入Bean中,以便执行这些操作。在NamedParameterJdbcTemplate下面也在使用它,如果你将它注入你的bean,你将获得对它的控制,并能够使用经过微调的TransactionDefinition和TransactionStatus。我感觉你不需要所有这些@如果您对调用DAO的服务方法进行注释,而jdbcTemplate用于CRUD操作,那么事务性就足够了。我建议大家快速阅读doc:和谷歌的示例。无论如何,你都不应该在自动提交模式下工作!
transTemplate.execute( new TransactionCallbackWithoutResult()
        {       
                @Override
                protected void doInTransactionWithoutResult( TransactionStatus status)
                {
                    status.setRollbackOnly();
                    //business logic
                }

        });