国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

spring aop 事務(wù)管理

2019-11-08 18:43:01
字體:
供稿:網(wǎng)友

我們在開發(fā)過程中,經(jīng)常會需要事務(wù)管理。比如,我們在執(zhí)行某業(yè)務(wù)時,需要向表A、表B、表C更新數(shù)據(jù),如果此業(yè)務(wù)執(zhí)行成功,則表A、表B、表C更新數(shù)據(jù);如果此業(yè)務(wù)執(zhí)行失敗,則表A、表B、表C回滾到初始狀態(tài)。 由于我們的業(yè)務(wù)邏輯是在service層控制,因此,我們在service注入相關(guān)dao。我們在Service執(zhí)行業(yè)務(wù)邏輯,分別更新數(shù)據(jù)到表A、表B、表C,通過sPRing aop 事務(wù)管理,保證Service層每個method的事務(wù)性。 下面我們講解如何在applicationContext.xml配置spring AOP事務(wù): 1.聲明dataSource

<bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="#{ nplat['db.driverClass'] }" /> <property name="jdbcUrl" value="#{ nplat['db.jdbcUrl'] }" /> <property name="user" value="#{ nplat['db.user'] }" /> <property name="passWord" value="#{ nplat['db.password'] }" /> <property name="initialPoolSize" value="#{ nplat['c3p0.initialPoolSize'] }" /> <property name="minPoolSize" value="#{ nplat['c3p0.minPoolSize'] }" /> <property name="maxPoolSize" value="#{ nplat['c3p0.maxPoolSize'] }" /> <property name="acquireIncrement" value="#{ nplat['c3p0.acquireIncrement'] }" /> <property name="maxIdleTime" value="#{ nplat['c3p0.maxIdleTime'] }" /> <property name="maxStatements" value="#{ nplat['c3p0.maxStatements'] }" /> <property name="maxStatementsPerConnection" value="100" /> <!--每隔60s時間檢測連接是否可正常使用(unit: scond) --> <property name="idleConnectionTestPeriod" value="60" /> <!-- 獲取connnection時測試是否有效 --> <property name="testConnectionOnCheckin" value="true" /> <!-- 連接測試語句 --> <property name="preferredTestQuery" value="#{ nplat['c3p0.testsql'] }" /> <property name="checkoutTimeout" value="10000" /> <property name="numHelperThreads" value="5" /></bean>

2.聲明sessionFactory

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="c3p0DataSource" /> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">#{ nplat['db.dialect'] }</prop> <prop key="hibernate.hbm2ddl.auto">none</prop> <prop key="hibernate.connection.release_mode">after_transaction</prop> <prop key="hibernate.show_sql">false</prop> <prop key="hibernate.format_sql">false</prop> <prop key="hibernate.max_fetch_depth">3</prop><!-- 抓取的級聯(lián)深度 --> <prop key="hibernate.jdbc.fetch_size">50</prop><!-- 批量抓取的數(shù)量.MySQL不支持 --> <prop key="hibernate.jdbc.batch_size">30</prop><!-- 批量寫入的數(shù)量 --> <prop key="javax.persistence.validation.mode">none</prop><!-- HiberV3.5以上需配置該項(xiàng) --> </props> </property> <property name="packagesToScan"> <list> <value>com.gina.gc</value> </list> </property></bean>

3.聲明transactionManager

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref bean="sessionFactory" /> </property></bean>

4.聲明txAdvice

<tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!-- 可以指定事物的傳播行為/隔離級別/哪些異常不需要回滾/哪些異常需要回滾 --> <tx:method name="get*" read-only="true" propagation="SUPPORTS" /> <tx:method name="find*" read-only="true" propagation="SUPPORTS" /> <tx:method name="is*" read-only="true" propagation="SUPPORTS" /> <tx:method name="check*" read-only="true" propagation="SUPPORTS" /> <tx:method name="list*" read-only="true" propagation="SUPPORTS" /> <tx:method name="find*" read-only="true" propagation="SUPPORTS" /> <tx:method name="*" read-only="false" propagation="REQUIRED" rollback-for="Exception" /> </tx:attributes></tx:advice>

read-only=”true” 表明事務(wù)只讀 SUPPORTS:支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就以非事務(wù)方式執(zhí)行 REQUIRED:支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就新建一個事務(wù)。這是最常見的選擇 5.聲明spring aop

<aop:config> <!--expression="this(com.gina.gc.core.orm.manager.Manager)" --> <aop:pointcut id="interceptorPointCuts" expression="execution(* com.gina.gc..*.manager.*Manager.*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="interceptorPointCuts" /></aop:config>

expression=”execution(* com.gina.gc...manager.*Manager.(..))” 中幾個通配符的含義: 第一個 * —— 通配 任意返回值類型 第二個 * —— 通配 包c(diǎn)om.gina.gc下的任意包 第三個 * —— 通配 包c(diǎn)om.gina.gc..*.manager下以Manager結(jié)尾的class 第四個 * —— 通配 包c(diǎn)om.gina.gc..*.manager下以Manager結(jié)尾的class的任意方法 第五個 .. —— 通配 方法可以有0個或多個參數(shù)


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 丰原市| 诸暨市| 内丘县| 蕉岭县| 黎城县| 漳平市| 开远市| 阳曲县| 廊坊市| 海宁市| 屯留县| 岗巴县| 肇州县| 庆云县| 肇东市| 青铜峡市| 霸州市| 潼关县| 凤翔县| 聊城市| 九龙县| 吉安县| 沁水县| 太谷县| 锡林浩特市| 巨鹿县| 华阴市| 黑水县| 林周县| 隆昌县| 灌阳县| 衡南县| 苍南县| 通州区| 陆河县| 吴旗县| 江安县| 仙桃市| 安康市| 东城区| 麻栗坡县|