ssh框架下的事物控制与匿名内部类

a864473066 2016-11-09 11:10:21
applicationContext.xml文件中事物控制的配置代码:

<!-- Bean代理事务 -->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>*Dao</value>
<value>*Service</value>
<value>*ServiceImpl</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>

<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager" />
<!-- 配置事务属性 -->
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop><!-- 支持现在的事务,如果没有就建立一个新的事务 -->
<prop key="requiresNew*">PROPAGATION_REQUIRES_NEW</prop><!-- 建立一个新的事务,如果现存一个事务就暂停它 -->
</props>
</property>
</bean>


这段代码的意思是:类名后缀为Dao,Service,ServiceImpl的类都会被加入事物控制中。
<value>*Dao</value>
<value>*Service</value>
<value>*ServiceImpl</value>


如果我在一个service类中添加一个匿名内部类,那么这个匿名内部类会不会被加入进事物控制中呢?

代码:

@Service("paymentExtWebService")
public class PaymentExtWebService extends AbstractService {
...
public void savePayMentBillCode(final List<PaymentExt> paymentExtList) throws ServiceException {
try {
for(PaymentExt paymentExt:paymentExtList) {
paymentExt.setDataStatus(BusinessConstant.ExternalDataStatus.SAVE);
paymentExtDao.save(paymentExt);
}
//创建另一个线程去执行复杂的保存操作。
new Thread(new Runnable() {
public void run() {
try {
for (PaymentExt paymentExt : paymentExtList) {
paymentDataService.outerSetlBizType(paymentExt,null);
}
} catch (Exception e) {
e.printStackTrace();
logger.info(e.getMessage());
throw new ServiceException("多线程-保存报文信息异常!" + e.getMessage());
}
}
}).start();
} catch (Exception e) {
e.printStackTrace();
logger.info(e.getMessage());
throw new ServiceException("保存报文信息异常!" + e.getMessage());
}
}
...
}


通过build文件夹查询class文件可以看到匿名内部类的类名:PaymentExtWebService$1.class

...全文
521 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
a864473066 2016-11-09
  • 打赏
  • 举报
回复
有木有人,是分太少了么。
a864473066 2016-11-09
  • 打赏
  • 举报
回复
很奇怪的是:paymentDataService.outerSetlBizType(...) paymentDataService类是加入了事务控制中的所有的操作在方法结束时提交,匿名线程没有事务控制,也无所谓啊。 到底是怎么回事呢?
a864473066 2016-11-09
  • 打赏
  • 举报
回复
之所以加内部类是因为,接口在接收大量报文时需要很长时间才能返回响应报文,现场人员需要优化响应速度。于是我加入线程将复杂的保存操作让内部线程去执行。 之后就报错了: nested exception is org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [com.iss.itreasury.paymentmanage.paymentext.entity.PaymentExt#1806594059] 全是在update,get的时候报的异常!

8,906

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧