, ( ) ( ) !
spring spring , spring AOP, ,spring spring 。spring 、 xml 、 。 。
spring ,
1.spring
spring org.springframework.transaction.TransactionDefinition 。
1.1 (PROPAGATION)
PROPAGATION_MANDATORY
。 ,
PROPAGATION_NESTED
, 。 。 , PROPAGATION_REQUIRED 。 。 ,
PROPAGATION_NEVER
。 ,
PROPAGATION_NOT_SUPPORTED
。 ,
PROPAGATION_REQUIRED
。 , 。 ,
PROPAGATION_REQUIREDS_NEW
。 , , 。 JTATransactionManager, TransactionManager
PROPAGATION_SUPPORTS
, ,
1.2
spring
ISOLATION_DEFAULT
ISOLATION_READ_UNCOMMITTED
。 、
ISOLATION_READ_COMMITED
。 、
ISOLATION_REPEATABLE_READ
, 。 ,
ISOLATION_SERIALIZABLE
ACID , 、 。 , 。
1.3
, , 。 , , (PROPAGATION_REQUIRED,PROPAGATION_REQUIREDS_NEW,PROPAGATION_NESTED) , 。
1.4
, , 。
1.5
, 。 , (runtime exception) , (checked exception) 。 , 。 , , 。
2.spring
spring AOP Advice! ! 。
spring , org.springframework.transaction.PlatformTransactionManager。
jdbc ( ):
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean>
3. XML
3.1
<bean id="rantService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="target" ref="rantServiceTarget" /> <property name="proxyInterfaces" value="com.roadrantz.service.RantService" /> <property name="transactionManager" ref="transactionManager"></property> <property name="transactionAttributes"> <props> <prop key="add*">PROPAGATION_REQUIRED</prop> <prop key="*">PROPAGATION_SUPPORTS,readOnly</prop> </props> </property> </bean>
transactionAttributes :
PROPAGATION,ISOLATION( ),readOnly( ),-Exception( ),+Exception( )
3.2 spring2.0
<tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="add*" propagation="REQUIRED" /> <tx:method name="*" propagation="SUPPORTS" read-only="true" /> </tx:attributes> </tx:advice> <aop:config> <aop:advisor advice-ref="txAdvice" pointcut="execution(* *..RantService.*(..))" /> </aop:config>
4.
<tx:annotation-driven transaction-manager="transactionManager"/>
@Transactional
@Transactional(propagation=Propagation.SUPPORTS,readOnly=true)public class RantServiceImpl implements RantService{... @Transactional(propagation=Propagation.REQUIRED,readOnly=false) public void addRant(Rant rant){}}
5.