本文只介绍配置文件,注意扫描文件部分。

1 配置applicationContext.xml

<!-- 定义oracle数据库连接-->

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">

<property name="driverClass" value="oracle.jdbc.driver.OracleDriver" />

<property name="jdbcUrl" value="jdbc:oracle:thin:@ip:port:dbname" />

<property name="user" value="name" />

<property name="password" value="pwd" />

<property name="autoCommitOnClose" value="true" />

<property name="initialPoolSize" value="5" />

<property name="minPoolSize" value="5" />

<property name="maxPoolSize" value="10" />

<property name="acquireIncrement" value="5" />

<property name="maxIdleTime" value="100" />

<property name="maxStatements" value="0" />

<property name="maxStatementsPerConnection" value="100"></property>

</bean>

<!-- 定义jdbcTemplate-->

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">

<property name="dataSource" ref="dataSource" />

</bean>


<!-- 事务  -->

<bean id="transactionManager"

class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource" ref="dataSource" />

</bean>


<!-- 配置方法事务隔离机制以及回退机制 -->

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

<tx:attributes>

<tx:method name="get*" read-only="true" />

<tx:method name="query*" read-only="true" />

<tx:method name="find*" read-only="true" />

<tx:method name="setParameter" propagation="REQUIRES_NEW"

rollback-for="Exception" /><!-- setParameter方法使用新事务 -->

<tx:method name="*" propagation="REQUIRED" rollback-for="Exception" />

</tx:attributes>

</tx:advice>

<!-- 配置事务切入切面 对com.test.service下的文件使用事务 -->

<aop:config>

<aop:advisor

pointcut="execution(* com.test.service.*.*(..))"

advice-ref="txAdvice" />

</aop:config>


<!--

自动扫描组件,这里要把

controller去除,他们是在spring3-servlet.xml中配置的,如果不去除会影响事务管理的。

对com.test下的非Controller注解进行扫描

-->

<context:component-scan base-package="com.test">

<context:exclude-filter type="annotation"

expression="org.springframework.stereotype.Controller" />

</context:component-scan>


主要

2  spring3-servlet.xml

<!--  对com.test.action下的Controller文件扫描

这里只能对Controller扫描,对service扫描会使事务失效 -->

<context:component-scan base-package="com.test.action">

<context:include-filter type="annotation"

expression="org.springframework.stereotype.Controller" />

</context:component-scan>