Spring transaction + AOP logging

make a record

<?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:tx="http://www.springframework.org/schema/tx" 
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd 
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.3.xsd">

    <!-- 数据库配置文件 -->
    <context:property-placeholder location="/WEB-INF/conf/dbconf.properties" />

    <!-- spring的自动扫描器,扫描bean用的 -->
    <context:component-scan base-package="com.ft.cloudsign" use-default-filters="false" >
        <context:include-filter type="regex" expression="com.manager.*"/>
        <context:include-filter type="regex" expression="com.apiserver.process.sdkapi.*"/>
    </context:component-scan>

    <!-- 数据源 -->
    <bean name="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource">
        <property name="driver" value="com.mysql.jdbc.Driver" />
        <property name="driverUrl" value="jdbc:mysql://${db_0_ip}:${db_0_port}/${db_0_name}?useUnicode=true&amp;characterEncoding=UTF-8&amp;autoReconnect=true&amp;failOverReadOnly=false" />
        <property name="user" value="${db_0_username}" />
        <property name="password" value="${db_0_password}" />
        <property name="alias" value="DBPool" />
        <property name="houseKeepingSleepTime" value="10000" />
        <property name="prototypeCount" value="1" />
        <property name="maximumConnectionCount" value="20" />
        <property name="minimumConnectionCount" value="3" />
    </bean>

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:mybatis/sqlMapConfig.xml" />
        <property name="mapperLocations" value="classpath*:mybatis/sqlmap/**/*Mapper.xml" />
    </bean>

    <!-- spring针对mybatis的扫描器,就是扫描mybatis的orm的bean文件的 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.ft.cloudsign.**.dao" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
    </bean>

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>

    <tx:advice id="transactionAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="sdkApiInit" propagation="REQUIRED" rollback-for="java.lang.Exception" />
            <tx:method name="addHtmlTemplate" propagation="REQUIRED" rollback-for="java.lang.Exception" />
            <tx:method name="updContractTemplate" propagation="REQUIRED" rollback-for="java.lang.Exception" />
            <tx:method name="delContractTemplate" propagation="REQUIRED" rollback-for="java.lang.Exception" />
            <tx:method name="createContractByTemplate" propagation="REQUIRED" rollback-for="java.lang.Exception" />
            <tx:method name="uploadContract" propagation="REQUIRED" rollback-for="java.lang.Exception" />
            <tx:method name="applyCert" propagation="REQUIRED" rollback-for="java.lang.Exception" />
            <tx:method name="editApplyCertInfo" propagation="REQUIRED" rollback-for="java.lang.Exception" />
            <tx:method name="sendApplyInfo" propagation="REQUIRED" rollback-for="java.lang.Exception" />
            <tx:method name="manuallySign" propagation="REQUIRED" rollback-for="java.lang.Exception" />
            <tx:method name="autoSign" propagation="REQUIRED" rollback-for="java.lang.Exception" />
            <tx:method name="setSignImg" propagation="REQUIRED" rollback-for="java.lang.Exception" />
            <tx:method name="setStampImg" propagation="REQUIRED" rollback-for="java.lang.Exception" />
            <tx:method name="setWatermark" propagation="REQUIRED" rollback-for="java.lang.Exception" />

            <tx:method name="userSign" propagation="REQUIRED" rollback-for="java.lang.Exception" /><!-- 手动签署 -->

            <tx:method name="contractDownload" propagation="SUPPORTS" />
            <tx:method name="verifyContract" propagation="SUPPORTS" />
            <tx:method name="getContractList" propagation="SUPPORTS" />
            <tx:method name="getTemplateList" propagation="SUPPORTS" />
            <tx:method name="accountUseInfomation" propagation="SUPPORTS" />
            <tx:method name="contractDetails" propagation="SUPPORTS" />

            <tx:method name="*" propagation="SUPPORTS" />
        </tx:attributes>
    </tx:advice>

    <bean id="log" class="com.ft.cloudsign.manager.log.Contractlog" />
    <aop:config>
        <-- 多个切面 -->
        <aop:pointcut id="transactionPointcut" expression="(execution(* com.apiserver.process.sdkapi.*.*(..))) or (execution(* com.manager.contract.service.IUserSignServ.userSign(com.manager.contract.entity.Addressee, String, String)))" />
        <aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice" order="2"/>

        <aop:aspect ref="log" order="1">
            <aop:after pointcut-ref="transactionPointcut" method="addContractLog"/>
        </aop:aspect>
    </aop:config>
</beans>

Instructions for the use of order: perform log recording before the transaction processed by the business logic is committed or rolled back, so as to prevent the log from not being recorded under abnormal conditions

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326616716&siteId=291194637