楼主下午看公司项目配置,发现项目中关于事物的配置,配置了两种,一个是xml配置,另一种是annotation配置。特意比较下两种的优先级。
1,xml配置事物
<aop:config>
<aop:pointcut id=”appService” expression=”execution(* com.clife.commons.base.service.chealth.*.*.*(..))”/>
<aop:advisor advice-ref=”txAdvice” pointcut-ref=”appService”/>
</aop:config>
<tx:advice id=”txAdvice” transaction-manager=”transactionManager”>
<tx:attributes>
<tx:method name=”select*” read-only=”true”/>
<tx:method name=”find*” read-only=”true”/>
<tx:method name=”get*” read-only=”true”/>
<tx:method name=”update*” propagation=”REQUIRED”/>
<tx:method name=”insert*” propagation=”REQUIRED”/>
<tx:method name=”save*” propagation=”REQUIRED”/>
<tx:method name=”add*” propagation=”REQUIRED”/>
<tx:method name=”del*” propagation=”REQUIRED”/>
<tx:method name=”*”/>
</tx:attributes>
</tx:advice>
<bean id=”transactionManager” class=”org.springframework.jdbc.datasource.DataSourceTransactionManager”>
<property name=”dataSource” ref=”dataSource” />
</bean>
2,注解配置事物
<aop:aspectj-autoproxy/>
<bean id=”transactionManager” class=”org.springframework.jdbc.datasource.DataSourceTransactionManager”>
<property name=”dataSource” ref=”dataSource” />
</bean>
<tx:annotation-driven transaction-manager=”transactionManager” proxy-target-class=”true” />
对应的service实现类的方法上写@Transactional(readOnly = false) 楼主的这个方法是向数据库插入
二者进行比较的方法:<tx:method name=”insert*” propagation=”REQUIRED”/> —-》》》<tx:method name=”insert*” read-only=”true” propagation=”REQUIRED”/>
xml配置成只读,注解配置成read-only=”false”,这时数据并不能插入数据库
二者配置对换后,可以插入。
3,为什么会这样?