数据库连接池:
<bean id="dataSource" class="" >
<property name="url" value="${jdbc.url}" />
<property name="username"><value>${jdbc.username}</value></property>
<property name="password" value="${jdbc.password}" />
<property name="driverClassName" value="${jdbc.driverClassName}"></property>
<property name="maxActive"><value>50</value></property>
<property name="initialSize"><value>5</value></property>
<property name="maxWait"><value>60000</value></property>
<property name="minIdle"><value>5</value></property>
</bean>
创建sqlsessionFactory:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:sqlMap/sqlMapConfig.xml"></property>
</bean>
事务管理器:
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
声明式事务:
<tx:advice id="txadvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" progatation="REQUIRED"/>
<tx:attributes>
</tx:advice>
progatation是传播规则:
1.MANDATORY:表示当前方法要在事务中,事务不存在抛异常。
2.NESTED:存在事务则嵌套在事务中执行,可以独立于当前事务单独的提交或回滚。
3.NEVER:不在事务中执行,如果有事务就抛异常。
4. NOT_SUPPORTED:不在事务中执行,如果有事务,在执行这个方法时,事务被挂起。
5.REQUIRED:在事务中运行,如果事务不存在就启动一个事务,常用。
6.SUPPORTS:不需要事务,但是如果有就在事务中运行。
7.REQUIRES_NEW:有当前事务则当前事务挂起,在自己的事务中运行,如果没有当前事务就启动一个事务执行。
isolation属性:
1.Default:使用数据库默认级别。
2.READ_UNCOMMITTED
3.READ_COMMITTED
4.REPEATABLE_READ
5.SERIALIZABLE
read_only属性:指定事务为只读
rollback-for:指定事务那些检查型异常会回滚而不提交。
no-rollback-for:指定那些异常应该继续执行而不回滚。
timeout:指定事务超时时间。
这里只是定义个一个通知,还要定义切面:
<aop:config>
<aop:advisor pointcut="" advice-ref="txadvice"/>
</aop:config>
除了tx:advice外还可以注解驱动事务:
<tx:annotation-driven transaction-manager="ttransactionManager"/>
这个注解会扫描@Transactional。
@Transactional(progatatiob=Progatation.supports,readOnly=true)
public class AServiceImpl implements AService{
@Transactional(progatation=Progatation.REQUIRED,readOnly=true)
public void save(User user){
}
}