spring事务管理基本实现——通过jdbcTemplate和transactionTemplate显式调用实现

<!--创建数据源-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    <property name="url" value="jdbc:mysql://localhost:3306/test"></property>
    <property name="username" value="root"></property>
    <property name="password" value=""></property>
    <property name="defaultAutoCommit" value="true" />
</bean>  <!--jdbcTemplate执行数据有关操作--> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">  <property name="dataSource" ref="dataSource"/>
</bean>

<!-- 配置开启事务 -->
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"></property>
</bean>

<!-- 配置transactionTemplate模板 -->    
<bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
    <property name="transactionManager" ref="transactionManager"></property> </bean>

关于数据源自动提交的设置defaultAutoCommit,当在事务中进行数据库操作时该属性失效,commit由事务管理器接管。

@Autowired
private Dao dao;
@Autowired
private TransactionTemplate transactionTemplate;
...

transactionTemplate.execute(new TransactionCallbackWithoutResult() {
    @Override
    protected void doInTransactionWithoutResult(TransactionStatus status) {
        // 需要在事务中执行的逻辑
	dao.out("test");
	//int i = 1/0;
	dao.in("test");
    }
});
transactionTemplate指定事务的范围,在事务结束后可能自动commit.
@Autowired
private JdbcTemplate jdbcTemplate;

public void out(String test) {
	jdbcTemplate.update("insert into inss(test) values(?)",test);
}
通过JdbcTemplate对象执行数据库有关操作。
新加评论 评论标题:

文章评论

    DataSourceTransactionManager程序式事务管理

        2019-03-04    
    修改 删除
    //DataSourceTransactionManager实现事务管理
    @Autowired
    private DataSourceTransactionManager transactionManager;
    
    DefaultTransactionDefinition def = new DefaultTransactionDefinition();
    def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
    TransactionStatus status = transactionManager.getTransaction(def); // get
    try {
    	//do some things.
    	dao.out("test");
    	int i = 1/0;
    	dao.in("test");
    	//.............................................
    	// commit.
    	transactionManager.commit(status);
    } catch (Exception e) {
    	transactionManager.rollback(status);
    }
评论列表
DataSourceTransactionManager程序式事务管理