<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>        <!-- 配置事务传播特性-->
        <bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED,ISOLATION_DEFAULT,timeout_3000</prop>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="create*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="query*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="list*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="execute*">PROPAGATION_REQUIRED</prop>
<prop key="unique*">PROPAGATION_REQUIRED,readOnly</prop>
<!--prop key="noTransaction*">PROPAGATION_SUPPORTS</prop-->
</props>
</property>
</bean>
然后在定义service组件的时候通过parent属性来继承baseTransactionProxy组件,但是在对数据库进行操作的时候是怎样进行处理的?

解决方案 »

  1.   

    事务提交在java里面一般是jdbc connection的commit方法,如果我们自己手动用jdbc去写操作数据库的话,会碰到一个问题不好解决,我们一般是每个dao层的方法打开一个connection,然后去操作数据库,最后提交事务,这样的话,如果再service层调用dao里面的2个方法,这样会打开2个connection,各自提交各自的事务,因此无法解决事务嵌套的问题。而spring缺利用threadlocal这个牛逼的东西很好的解决了这个问题,它根据你的事务文件配置,可以保证在一个线程里面是提交多次事务,还是说只提交一次事务,具体的内容你可以去iteye里面搜索spring 事务,有很多的精华文章进行解释