最近的项目中用到了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的)