基于Spring的DataSourceTransactionMananger类事务管理器配置声明式事务
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 使用spring注解 -->
<!-- <context:annotation-config/> -->
<!-- 下面的配置告诉spring容器自动scanner用注解标注bean -->
<context:component-scan base-package="org.lian"/>
<!--配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<context:property-placeholder location="/conf/datasource/jdbc.properties"/>
<!-- spring 声明式事务配置 -->
<!--transaction manager 声明事务管理器 使用spring PlatformTransactionManager-->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 配置事务策略 -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<!-- the transactional semantics... -->
<tx:attributes>
<!-- all methods starting with 'get' are read-only -->
<tx:method name="get*" read-only="true"/>
<tx:method name="count*" read-only="true"/>
<!-- other methods use the default transaction settings (see below) -->
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<!-- execution(* org.lian.service.ContactsManagerService.*(..)) -->
<!-- execution(* org.lian.service.*.*(..)) 包下的所有方法 -->
<!-- execution(* org.lian.service..*Service.*(..)) 包下Service结尾Interface-->
<aop:config>
<aop:pointcut id="serviceOperation" expression="execution(* org.lian.service..*Service.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation"/>
</aop:config>
</beans>
service层java interface
package org.lian.service;
import org.lian.domain.Contacts;
public interface ContactsManagerService {
public Contacts getContacts(Contacts contacts);
public void addContacts(Contacts contacts);
public void editContacts(Contacts contacts);
}
实现类
@Service("contactsManagerService")
public class ContactsManagerServiceImpl implements ContactsManagerService {
@Autowired
@Qualifier("contactsDao")
private ContactsDao contactsDao;
public ContactsDao getContactsDao() {
return contactsDao;
}
public void setContactsDao(ContactsDao contactsDao) {
this.contactsDao = contactsDao;
}
@Autowired
@Qualifier("musicDao")
private MusicDao musicDao;
public MusicDao getMusicDao() {
return musicDao;
}
public void setMusicDao(MusicDao musicDao) {
this.musicDao = musicDao;
}
@Override
public Contacts getContacts(Contacts contacts) {
// TODO Auto-generated method stub
return null;
}
@Override
public void addContacts(Contacts contacts) {
Music music = new Music();
music.setId(IdGenerator.getInstance().getUUID());
music.setName("唇语");
music.setSinger("任然");
music.setAlbum("从小到大");
music.setAuthor("耕耕");
music.setComposer("Xun");
music.setStyle("流行");
music.setDuration("04:48");
// 添加一个music对象
musicDao.add(music);
contactsDao.insertContacts(contacts);
// 事务
}
@Override
public void editContacts(Contacts contacts) {
// TODO Auto-generated method stub
}
}
本文介绍如何使用Spring的DataSourceTransactionManager进行声明式事务管理配置。通过XML方式定义事务管理器和事务策略,实现对数据库操作的统一事务控制。
1138

被折叠的 条评论
为什么被折叠?



