如何给Spring MVC的action加上事务

如何给Spring MVC的action加上事务,第1张

其实就是一个加载顺序的问题

首先使用了spring

MVC的项目是不需要配置action bean,而是通过spring

mvc的配置文件进行扫描注解加载的,spring事务配置文件还有上下文都是通过org.springframework.web.context.ContextLoaderListener加载的,而spring

MVC的action是通过org.springframework.web.servlet.DispatcherServlet加载的,这样就有个优先级的问题了,web是先启动ContextLoaderListener后启动DispatcherServlet,在ContextLoaderListener加载的时候action并没在容器中,所以现在使用AOP添加事务或者扫描注解都是无用的。

那么解决办法就是在DispatcherServlet加载的spring-MVC配置文件后再加上AOP事务扫描配置就OK了

1

2

3

4

5

6

7

8

<tx:advice id="defaultTxAdvice" transaction-manager="transactionManager">

<tx:attributes>

<tx:method name="questionReply" propagation="REQUIRED"/>

</tx:attributes>

</tx:advice>

<aop:config>

<aop:advisor advice-ref="defaultTxAdvice" pointcut="execution(* com.jeecms.cms.action.front.PhQuestionAct.*(..))"/>

</aop:config>

不太明白你的意思。spring AOP有2种方法来实现切入点。

1。用@注解方式 直接开启事务(用起来比较方便)

2。用默认配置文件方式(。xml))(正规大项目 都采用第二种方法,因为这样统一,还可观)

希望对你有所帮助

1、@Transactional使用位置

Ⅰ 写在接口类上,该接口的所有实现类的所有方法都会有事务;

Ⅱ 写在接口方法上,该接口的所有实现类的该方法都会有事务;

Ⅰ 写在实现类上,该类中的所有方法都会有事务;

Ⅱ 写在实现类方法上,该方法上有事务。

建议:写在实现类或实现类的方法上。

2、PlatformTransactionManager

PlatformTransactionManager是Spring中的事务管理接口,具体如下:

3、DataSourceTransactionManager

Spring中JDBC事务管理实现类是DataSourceTransactionManager,所以我们使用MyBatis时,如果需要进行事务管理则配置该事务管理即可。

1、基础准备

jdbc.properties如下:

JdbcConfig如下:

2、测试

1、相关注解

配置类注解,定义在配置类上。

设置当前Spring环境中开启注解式事务支持。

接口、类、方法注解,定义在接口、类、方法上。

为当前业务层方法添加事务(如果设置在类或接口上方则类或接口中所有方法均添加事务)。

2、事务角色

发起事务方,在Spring中通常指代业务层开启事务的方法。

加入事务方,在Spring中通常指代数据层方法,也可以是业务层方法。

3、@Transactional常用属性

true只读事务,false读写事务,增删改要设为false,查询设为true。

设置超时时间单位秒,在多长时间之内事务没有提交成功就自动回滚,-1表示不设置超时时间。

当出现指定异常进行事务回滚。

4、事务传播行为

比如上述测试案例中,我们给log方法上的@Transactional设置了传播属性为REQUIRES_NEW,表示当前事务协调员会自己开启一个事务。并不会因为transfer发生回滚而回滚。

Ⅰ REQUIRED(默认);

Ⅱ SUPPORTS;

Ⅲ MANDATORY;

Ⅳ REQUIRES_NEW;

Ⅴ NOT_SUPPORTED;

Ⅵ NEVER;

Ⅶ NESTED。

以上即为Spring AOP-事务管理的全部内容,感谢阅读。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11560338.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存