本文只介绍配置文件,注意扫描文件部分。
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>