我在一个工程里找到的 ,跑的没问题,可以用。但是我要在里面加东西,事物加不上,看了原来工程的事物配置跟迷茫了,求解。原来工程配置如下:
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager" />
<!-- 配置事务拦截器bean -->
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value></value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager" />
<!-- 配置事务拦截器bean -->
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value></value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
改这个就行了<prop key="*">PROPAGATION_REQUIRED</prop>key属性确定代理应该给哪个方法增加事务行为。这样的属性最重要的部份是传播行为。有以下选项可供使用:
PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED--如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。
我的疑问 transactionManager这个bean楼主好像没有在其它地方引用啊!难道spring的声明型事务不用在其它地方引用?
class="org.springframework.orm.hibernate3.HibernateTransactionManager" />在工程里没有任何地方引用,也没有注入datasource 。但是删除的话起到报错。我也不清楚人家是怎么搞的,我是在他的工程里加了些东西,但是我加的怎么加事物把我难住了。因为看原来工程的事物配置读不明白,所以求解
public void deleteImage(int id, String userid) {
BkImage image = bkImageDAO.findById(id);
Common.deleteFile(image.getPath());
bkImageDAO.delete(image);
}
就是我的一些service方法里有多个 更新,删除,新增等操作的时候我怎么给他加上事物,我写的dao 是用的getHibernateTemplate()这个写的,感觉spring自己给加上事物了 , 请教 一下,我这改怎么写啊
<prop key="delete*">PROPAGATION_REQUIRED,PROPAGATION_SUPPORTS,PROPAGATION_REQUIRES_NEW</prop>
<prop key="update*">PROPAGATION_REQUIRED,PROPAGATION_SUPPORTS,PROPAGATION_REQUIRES_NEW</prop>这几种,你网上搜下如何配置。
事物只要dao加了就行了,至于你那个问题不知道你添加的东西要不要和transactionAttributes关联,很久没用spring,忘的差不多了
在servise 层 加上事物 ,dao 就不用加了好像 ,我看这么弄了也没出啥问题
这段事务是使用代理,事务拦截器实现的,主要侧重点
<bean
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value></value>
</list>
</property>
、、、、、
上面的list中的value是需要代理的类,类的中方法就会被事务拦截,从而实现事务一致性处理。
而list中可以使用通配符形式,比如*service,或者*DAO等等。如果自己要添加新的类,必须注意这点,不然事务不起作用