spring 的事务控制 (spring + Ibatis)

最近的项目中用到了spring + Ibatis的这么一种组合进行的项目开发。

对于一般的mvc三次框架,就拿异常的处理来说,一般是dao层之间将各种异常直接进行抛出。

throws exception就好了,在service中进行相应的捕捉,处理下异常进行个性化后在进行抛出,最终

在action也就是说框架层进行最终的处理。

 

下面对事务给个说明:

<!--ibais的一个配置-->

 

<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">

<property name="configLocation">

<value>conf/sqlmap/sqlmap-config.xml</value>

</property>

</bean>

 

<!--使用的缓冲池,当然相应的配置可以导入相应的properties文件-->

<bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource" destroy-method="close">

<property name="driver">

<value>${Proxool.Driver}</value>

</property>

<property name="driverUrl">

<value>${Proxool.Url}</value>

</property>

<property name="user">

<value>${Proxool.UserName}</value>

</property>

<property name="password">

<value>${Proxool.Password}</value>

</property>

<property name="maximumActiveTime"> 

     <value>${Proxool.maximumActiveTime}</value> 

     </property> 

<property name="houseKeepingSleepTime"> 

     <value>${Proxool.houseKeepingSleepTime}</value> 

     </property> 

     <property name="prototypeCount"> 

     <value>${Proxool.prototypeCount}</value> 

     </property> 

     <property name="maximumConnectionCount"> 

     <value>${Proxool.maximumConnectionCount}</value> 

     </property> 

     <property name="minimumConnectionCount"> 

     <value>${Proxool.minimumConnectionCount}</value> 

     </property> 

     <property name="trace"> 

     <value>${Proxool.trace}</value> 

     </property> 

     <property name="verbose"> 

     <value>${Proxool.verbose}</value> 

     </property> 

     <property name="alias"> 

     <value>${Proxool.Alias}</value> 

     </property> 

     <property name="simultaneousBuildThrottle"> 

     <value>${Proxool.simultaneousBuildThrottle}</value> 

     </property> 

</bean>

 

<!--下面的就是我们一般要配置的事务的一个管理-->

<bean id="transactionManager"

class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource">

<ref local="dataSource" />

</property>

</bean>

 

<bean id="txProxyTemplate" lazy-init="true" abstract="true"

class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

<property name="transactionManager">

<ref local="transactionManager" />

</property>

<property name="transactionAttributes">

<props>

<prop key="insert*">PROPAGATION_REQUIRED</prop>

<prop key="update*">PROPAGATION_REQUIRED</prop>

<prop key="delete*">PROPAGATION_REQUIRED</prop>

<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>

</props>

</property>

</bean>

 

<!--配置一个Dao,简单点直接写上byName-->

<bean id="userDao"  class="cn.com.lambert.dao.impl.UserDaoImpl" singleton="true" autowire="byName"/>

 

<!--配置个service,其实这里就进行了一个事务的代理,事务的一个控制-->

<bean id="userService" parent="txProxyTemplate">

<property name="target">

<bean class="cn.com.lambert.service.impl.UserServiceImpl" autowire="byName" />

</property>

</bean>

 

 

到这里这么一个配置就可以了,事务已经起作用了。有这么几个小点,当时我也是查了网上的很多东西,自己也试验的不少:

1 对事务的一个控制一般是在service层上

2 在service中捕获异常,进行处理再抛出时,这个异常要为RuntimeException异常,自己写个异常类来继承他就好了,

   我当时是直接抛出的exception,怎么事务都不起作用(换了RuntimeException就好了,或许是哪里的问题,请看到的

   哥们,如果知道,能抽点时间给我个说明,先谢过。不过我现在抛出RuntimeException是OK的)

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值