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

2019-03-04  javaweb jsp apache-tomcat Spring MVC          公开-普
<!--创建数据源-->
<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);
}
文章内容的h2标题锚点:
评论列表
DataSourceTransactionManager程序式事务管理