1

我正在学习春季交易管理。
我用过Spring3.0和oracle 10g进行练习。
以下是我的春季交易配置

 <aop:config>
      <aop:pointcut expression="execution(* com.spring.*.service.impl.*.*(..))" 
                    id="serivcePointcut"/>
      <aop:advisor advice-ref="txAdvice" pointcut-ref="serivcePointcut"/>
</aop:config>

<tx:advice id="txAdvice" transaction-manager="transactionManager">
     <tx:attributes>
         <tx:method name="get*" read-only="true"/>
         <tx:method name="find*" read-only="true"/>
         <tx:method name="*"/>
    </tx:attributes>
</tx:advice.

我只是想检查通过get*方法插入任何记录是否会抛出异常,因为只读已被标记为true。所以我通过getCustomer()方法插入了一条记录。但是猜猜插入记录而不是抛出异常是什么。

在日志中,我可以看到为 com.spring.customer.service.impl.CustomerServiceImpl 创建的事务。甚至日志显示将 jdbc 连接设置为只读。

谁能解释我哪里出错了?

4

1 回答 1

0

TransactionDefinition的 javadoc说:

这只是作为实际事务子系统的提示;它不一定会导致写访问尝试失败。无法解释只读提示的事务管理器在请求只读事务时不会抛出异常。

Connection的 javadoc说:

将此连接置于只读模式,作为对驱动程序启用数据库优化的提示。

简而言之,如果您的代码确实是只读的,则使用 readOnly 可能会提高性能。但这不会阻止您在此类事务中执行写入操作。

于 2012-12-01T13:46:22.843 回答