【转】SpringBoot 注解事务声明式事务
2018-02-24 17:24
441 查看
文章来源: http://www.cnblogs.com/guozp/articles/7446477.html
springboot 对新人来说可能上手比springmvc要快,但是对于各位从springmvc转战到springboot的话,有些地方还需要适应下,尤其是xml配置。我个人是比较喜欢注解➕xml是因为看着方便,查找方便,清晰明了。但是xml完全可以使用注解代替,今天就扒一扒springboot中事务使用注解的玩法。
springboot的事务也主要分为两大类,一是xml声明式事务,二是注解事务,注解事务也可以实现类似声明式事务的方法,关于注解声明式事务,目前网上搜索不到合适的资料,所以在这里,我将自己查找和总结的几个方法写到这里,大家共同探讨
文章来源: http://www.cnblogs.com/guozp/articles/7446477.html
springboot 之 xml事务
可以使用 @ImportResource("classpath:transaction.xml") 引入该xml的配置,xml的配置如下
springboot 启动类如下:
启动后即可开启事务,不过项目里导入了xml配置,如果不想导入xml配置,可以使用注解的方式。
springboot 之 注解事务
注解事务讲解之前,需要先了解下spring创建代理的几个类,在spring内部,是通过BeanPostProcessor来完成自动创建代理工作的。BeanPostProcessor接口的实现只是在ApplicationContext初始化的时候才会自动加载,而普通的BeanFactory只能通过编程的方式调用之。根据 匹配规则的不同大致分为三种类别:
a、匹配Bean的名称自动创建匹配到的Bean的代理,实现类BeanNameAutoProxyCreator
b、根据Bean中的AspectJ注解自动创建代理,实现类AnnotationAwareAspectJAutoProxyCreator
c、根据Advisor的匹配机制自动创建代理,会对容器中所有的Advisor进行扫描,自动将这些切面应用到匹配的Bean中,实现类DefaultAdvisorAutoProxyCreator
接下来开讲注解开启事务的方法:
1、Transactional注解事务
需要在进行事物管理的方法上添加注解
2、注解声明式事务
Component或Configuration中bean的区别,有时间我会专门写一篇来讲解下
a.方式1,这里使用Component或Configuration事务都可以生效
b.方式1,这里使用Component或Configuration事务都可以生效
c.方式1,这里使用Component或Configuration事务都可以生效
d.方式1,这里使用Component或Configuration并不是所有事务都可以生效,例如Configuration的时候如果打开注释部分的而且不把代码都移动到 defaultPointcutAdvisor(),事物会失效,具体原因暂时不明,如果各位有明白的,可以指点我下。
初始使用:
后修改如下:
简单来说,springboot使用上述注解的几种方式开启事物,可以达到和xml中声明的同样效果,但是却告别了xml,使你的代码远离配置文件。
如果有错误的地方,望各位指正。如有其它问题,可以联系
文章来源: http://www.cnblogs.com/guozp/articles/7446477.html
springboot 对新人来说可能上手比springmvc要快,但是对于各位从springmvc转战到springboot的话,有些地方还需要适应下,尤其是xml配置。我个人是比较喜欢注解➕xml是因为看着方便,查找方便,清晰明了。但是xml完全可以使用注解代替,今天就扒一扒springboot中事务使用注解的玩法。
springboot的事务也主要分为两大类,一是xml声明式事务,二是注解事务,注解事务也可以实现类似声明式事务的方法,关于注解声明式事务,目前网上搜索不到合适的资料,所以在这里,我将自己查找和总结的几个方法写到这里,大家共同探讨
文章来源: http://www.cnblogs.com/guozp/articles/7446477.html
springboot 之 xml事务
可以使用 @ImportResource("classpath:transaction.xml") 引入该xml的配置,xml的配置如下
<?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: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/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"> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" ></property> </bean> <tx:advice id="cftxAdvice" transaction-manager="txManager"> <tx:attributes> <tx:method name="query*" propagation="SUPPORTS" read-only="true" ></tx:method> <tx:method name="get*" propagation="SUPPORTS" read-only="true" ></tx:method> <tx:method name="select*" propagation="SUPPORTS" read-only="true" ></tx:method> <tx:method name="*" propagation="REQUIRED" rollback-for="Exception" ></tx:method> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="allManagerMethod" expression="execution (* com.exmaple.fm..service.*.*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod" order="0" /> </aop:config> </beans>
springboot 启动类如下:
springboot 之 注解事务
注解事务讲解之前,需要先了解下spring创建代理的几个类,在spring内部,是通过BeanPostProcessor来完成自动创建代理工作的。BeanPostProcessor接口的实现只是在ApplicationContext初始化的时候才会自动加载,而普通的BeanFactory只能通过编程的方式调用之。根据 匹配规则的不同大致分为三种类别:
a、匹配Bean的名称自动创建匹配到的Bean的代理,实现类BeanNameAutoProxyCreator
<bean id="testInterceptor" class="com.example.service.config.testInerceptor”></bean> <bean id="profileAutoProxyCreator" class="org.springframework.aop.framework. autoproxy.BeanNameAutoProxyProxyCreator"> <bean> <property name="beanNames"> <list> <value>*Service</value> </list> </property> <property name="interceptorNames"> <value> testInterceptor </value> </property> </bean>
b、根据Bean中的AspectJ注解自动创建代理,实现类AnnotationAwareAspectJAutoProxyCreator
<aop:aspectj-autoproxy proxy-target-class="true"/> <bean id="annotationAwareAspectJAutoProxyCreatorTest" class="com.example.service.AnnotationAwareAspectJAutoProxyCreatorTest"/> <aop:config> <aop:aspect ref="annotationAwareAspectJAutoProxyCreatorTest"> <aop:around method="process" pointcut="execution (* com.example.service.fm..*.*(..))"/> </aop:aspect> </aop:config>
c、根据Advisor的匹配机制自动创建代理,会对容器中所有的Advisor进行扫描,自动将这些切面应用到匹配的Bean中,实现类DefaultAdvisorAutoProxyCreator
接下来开讲注解开启事务的方法:
1、Transactional注解事务
需要在进行事物管理的方法上添加注解
@Transactional,或者偷懒的话直接在类上面添加该注解,使得所有的方法都进行事物的管理,但是依然需要在需要事务管理的类上都添加,工作量比较大,这里只是简单说下,具体的可以google或者bing
2、注解声明式事务
Component或Configuration中bean的区别,有时间我会专门写一篇来讲解下
a.方式1,这里使用Component或Configuration事务都可以生效
b.方式1,这里使用Component或Configuration事务都可以生效
c.方式1,这里使用Component或Configuration事务都可以生效
d.方式1,这里使用Component或Configuration并不是所有事务都可以生效,例如Configuration的时候如果打开注释部分的而且不把代码都移动到 defaultPointcutAdvisor(),事物会失效,具体原因暂时不明,如果各位有明白的,可以指点我下。
初始使用:
后修改如下:
简单来说,springboot使用上述注解的几种方式开启事物,可以达到和xml中声明的同样效果,但是却告别了xml,使你的代码远离配置文件。
如果有错误的地方,望各位指正。如有其它问题,可以联系
文章来源: http://www.cnblogs.com/guozp/articles/7446477.html
相关文章推荐
- SpringBoot 注解事务声明式事务
- Spring Boot 事务注解 @Transactional
- 28Spring_的事务管理_银行转账业务加上事务控制_基于注解进行声明式事务管理
- spring boot基于注解的声明式事务配置
- spring boot整合shiro后,部分注解(Cache缓存、Transaction事务等)失效的问题
- SpringBoot 注解事务声明式事务的方式
- Spring系列之 (十五):Spring事务管理方式-声明式事务(注解)
- SpringBoot 注解事务声明式事务
- SpringBoot事务注解实现原理
- Spring Boot 中使用 @Transactional 注解配置事务管理
- 记录一次Spring boot 搭建框架连接Mysql数据库注解事务不回滚的故障
- Spring-AOP和事务实践(注解方式
- spring事物配置,声明式事务管理和基于@Transactional注解的使用
- SpringBoot的注解:@SpringBootApplication注解 vs @EnableAutoConfiguration+@ComponentScan+@Configuration
- springboot情操陶冶-@Configuration注解解析
- Spring Boot中使用MyBatis注解配置详解
- Spring多数据源使用注解事务绑定注意事项和解决办法
- Spring 使用注解方式进行事务管理
- springboot 自定义注解+AOP 实现日志记录
- 关于spring事务注解