spring中如何实现声明式事务管理呢?
下文笔者将通过示例的方式讲述声明式事务管理的操作方法分享,如下所示
多个数据源的情况下
声明式事务管理示例
使用@Transactional注解
对service进行事务增强
@Transactional
public class Service(){
@Autowired
private Dao dao;
public void insert(Entity e){
dao.insert(e);
}
}
配置信息
<tx:annotation-driven transaction-manager="transactionManager" /> transaction-manager属性默认为”transactionManager” 所以如果事务管理器的id为transactionManager 则可以省略transaction-manager属性变为 <tx:annotation-driven/> 除transaction-manager属性外 还可用proxy-target-class属性 来区别注入类使用的方式 如果为true,则使用Cglib生成子类来代理业务类 如果为false,则使用JDK动态代理的方式,基于接口对进行代理。
多个数据源的情况下
配置多个事务管理器
<bean id="ds1" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="${spring.datasource.url1}" />
<property name="username" value="${spring.datasource.username}" />
<property name="password" value="${spring.datasource.password}" />
</bean>
<bean id="ds2" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="${spring.datasource.url2}" />
<property name="username" value="${spring.datasource.username}" />
<property name="password" value="${spring.datasource.password}" />
</bean>
<bean id="tM1" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
<qualifier value="tm1"></qualifier>
</bean>
<bean id="tM2" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
<qualifier value="tm2"></qualifier>
</bean>
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


