关于spring 事务 和 AOP 管理事务和打印日志问题

1. <tx:annotation-driven /> 就是支持事务注解的(@Transactional) 。

​ 可以在server层总使用@Transactional,进行方法内的事务管理

配置
<!-- 事务注解-->
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
<!-- 事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@localhost:1521:orcl</value>
</property>
<property name="username">
<value>xxx</value>
</property>
<property name="password">
<value>xxx</value>
</property>
<property name="maxActive">
<value>255</value>
</property>
<property name="maxIdle">
<value>2</value>
</property>
<property name="maxWait">
<value>120000</value>
</property>
</bean>

2. 在applicationContent.xml 引入 applicationContext-aop.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd "> <!-- aop 统一处理类 -->
<bean id="serviceLogging" class="com.xxx.hrzcyp.aop.ServiceLogging"/> <!-- aop 配置 -->
<aop:config>
<!-- 切入点 -->
<aop:pointcut id="serviceMethodLoggingPointcut" expression="execution(* com.xxx.service.impl.*.*(..))"/>
<!-- 定义 切面 order 的值越小,说明越先被执行 -->
<aop:aspect id="serviceMethodLoggingAspect" ref="serviceLogging" order="100">
<aop:before method="loggingMethodInvoked" pointcut-ref="serviceMethodLoggingPointcut"/>
<aop:after-throwing method="loggingServiceException" pointcut-ref="serviceMethodLoggingPointcut" throwing="throwable"/>
</aop:aspect>
</aop:config> </beans>

3. 用于aop处理日志和异常的java

package com.xxx.aop;

import org.aspectj.lang.JoinPoint;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; /**
* AOP 统一处理异常和返回值
*/
public class ServiceLogging { private static Logger exceptionLogger = LoggerFactory.getLogger("ExceptionLogging");
private static Logger methodInvokeLogger = LoggerFactory.getLogger("MethodInvokeLogging"); /**
* 捕获Service层抛出的异常并做日志
*
* @param throwable 方法抛出的异常
*/
public void loggingServiceException(Throwable throwable) {
if (exceptionLogger.isErrorEnabled()) {
StringBuilder builder = new StringBuilder();
builder.append("cause:").append(throwable.getMessage());
builder.append("\n\tstackTrack:\n");
for (StackTraceElement stack : throwable.getStackTrace()) {
builder.append("\t\t");
builder.append(stack.toString());
builder.append("\n");
}
exceptionLogger.error(builder.toString());
}
} /**
* 记录Service方法的调用
*
* @param joinPoint 切入点
*/
public void loggingMethodInvoked(JoinPoint joinPoint) {
if (methodInvokeLogger.isDebugEnabled()) {
String methodName = joinPoint.getSignature().getName();
Object[] args = joinPoint.getArgs();
StringBuilder builder = new StringBuilder();
builder.append("调用方法[AOP切入点]:").append(methodName);
builder.append("\t参数:");
for (Object arg : args) {
builder.append(arg.toString());
}
methodInvokeLogger.debug(builder.toString());
}
} }

总结

以上工作做完后,只要有访问当 com.xxx.service.impl 目录下的所有方法。aop都会帮助我们答应访问的日志,如果加上 @Transactional 会将整个方法内的事务统一管理。有异常时也会通过aop抛出异常。

关于spring 事务 和 AOP 管理事务和打印日志问题的更多相关文章

  1. Spring整合JDBC以及AOP管理事务

    本节内容: Spring整合JDBC Spring中的AOP管理事务 一.Spring整合JDBC Spring框架永远是一个容器,Spring整合JDBC其实就是Spring提供了一个对象,这个对象 ...

  2. spring IOC DI AOP MVC 事务, mybatis 源码解读

    demo https://gitee.com/easybao/aop.git spring DI运行时序 AbstractApplicationContext类的 refresh()方法 1: pre ...

  3. Spring AOP 管理事务

    <aop:config proxy-target-class="true"> <aop:pointcut expression="execution(* ...

  4. Spring学习之AOP与事务

      一.概述 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续, ...

  5. spring中使用aop配置事务

    spring的事务配置有5种方式,这里记录其中的一种:基于tx/aop声明式事务配置 在之前spring aop介绍和示例这篇所附代码的基础上进行测试 一.添加save方法 1.在testDao类里添 ...

  6. spring Boot使用AOP统一处理Web请求日志记录

    1.使用spring boot实现一个拦截器 1.引入依赖: <dependency>   <groupId>org.springframework.boot</grou ...

  7. springboot aop + logback + 统一异常处理 打印日志

    1.src/resources路径下新建logback.xml 控制台彩色日志打印 info日志和异常日志分不同文件存储 每天自动生成日志 结合myibatis方便日志打印(debug模式) < ...

  8. spring是如何管理 事务的

    Spring提供的事务管理可以分为两类:编程式的和声明式的.编程式的,比较灵活,但是代码量大,存在重复的代码比较多:声明式的比编程式的更灵活方便.  1.传统使用JDBC的事务管理  以往使用JDBC ...

  9. Spring怎么管理事务?

    我们一般通过aop管理事务,就是把代码看成一个纵向有序的,然后通过aop管理事务,就好比增删改的时候需要开启一个事务,我们给他配置一个required,required就是有事务就执行事务,没有就给他 ...

随机推荐

  1. APPLICATION SERVER和WEBSHPERE和Red Hat操作系统

    1.Web服务器专门处理HTTP请求(request),但是应用程序服务器是通过很多协议来为应用程序提供(serves)商业逻辑(business logic) 2.WebSphere Applica ...

  2. win10以及ubuntu下设置pip源

    问题描述:有一段时间下载python库的时候速度非常慢,想着提高安装python库的速度. window10下: 一:首先进入c盘的用户目录,如我的目录为C:\Users\felix. 二:创建名为p ...

  3. CF1153E Serval and Snake【构造】

    题目链接:洛谷 这道题是很久以前NTF跟我说的,现在想起来把它做了... 我们发现,如果蛇的两头都在矩形里或矩形外,则询问为偶数,否则为奇数. 所以我们询问每一行和每一列,就能知道蛇的两头的横纵坐标了 ...

  4. (转)Git操作

    本地修改了许多文件,其中有些是新增的,因为开发需要这些都不要了,想要丢弃掉,可以使用如下命令: git checkout . #本地所有修改的.没有的提交的,都返回到原来的状态 git stash # ...

  5. 深入理解D3D9

    本文写的较为深入,故转载在此留以备案,呵呵~ 原文链接为:http://www.cnblogs.com/effulgent/archive/2009/02/10/1387438.html ------ ...

  6. 2019.7.9 校内测试 T1挖地雷

    这一次是交流测试?边交流边测试(滑稽 挖地雷 这个题是一个递推问题. 首先我们看第一个格子,因为它只影响了它的上面和右上面这两个地方是否有雷. 我们可以分3种情况讨论: 1. 第一个格子的数字是2: ...

  7. 修改oracle用户登录密码

    运行sqlplus进入输入密码界面 用户名输入: connect as sysdba 密码:这边乱输就可以了 然后进行输入下面的命令: 修改密码命令 alter user system identif ...

  8. 阿里前端实习生面试总结(两轮技术面+一轮hr面)

    投的蚂蚁金服: 一面(只有13分钟): 1.angular里双向绑定的实现原理: 巴拉巴拉巴拉,这个问题很常见,我提到了$scope.$apply()和$scope.$digest(),面试官问app ...

  9. java.util.HashTable (JDK1.8)

    1.Hashtable 特性(先总结下面会详细讲的): 1.Hashtable 存储的内容是键值对(key-value)映射,其底层实现是一个Entry数组+链表. 2.Hashtable是线程安全( ...

  10. Linux学习:Makefile简介及模板

    一.基本概念介绍: Makefile 文件就是告诉make命令需要怎么样的去编译和链接程序. 编写Makefile的基本规则: 1.如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接. 2. ...