需要将事务管理和aop切入点结合起来一起用,切入点用于配置相应的需要加入事务的方法,事务配置里面可以对这些方法进行更加细粒度的划分
相关的配置如下
<!--配置PlatformTransactionManager-->
<bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionalManager" >
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--配置事务的通知-->
<tx:advice id="txAdvice" transaction-manager="transactionalManager">
<tx:attributes>
<tx:method name="*" read-only="false" propagation="REQUIRED"/>
<tx:method name="find*" read-only="true" propagation="SUPPORTS"></tx:method>
</tx:attributes>
</tx:advice>
<!--将事务的通知与aop切入点结合-->
<aop:config>
<aop:pointcut id="transactionpointcut" expression="execution(* com.kehao.service.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="transactionpointcut"></aop:advisor>
</aop:config>
<tx:advice>
通知标签<tx:attributes>
子标签
<tx:method>
事务方法标签
<aop:config>
标签
<aop:advisor>
子标签
完整demo代码:https://github.com/chenkehao1998/JavaExampleForBlog/tree/main/kehao_spring_aop_transactional_xml
@EnableTransactionManagement
注解,开启事务管理支持@Bean
的函数用于返回PlatformTransactionManager对象 @Bean
public DataSourceTransactionManager createDataSourceTransactionManager(DataSource dataSource){
System.out.println("DataSourceTransactionManager");
DataSourceTransactionManager manager = new DataSourceTransactionManager();
manager.setDataSource(dataSource);
return manager;
}
@Transactional
(这个函数必须是public的),也可以直接放在类上,表示类里所有的public
函数都支持事务原文:https://www.cnblogs.com/kehao/p/14736671.html