关于Spring事务的一个问题

使用HttpClient 调取一个微服务的接口,返回json格式,数据量较大,我拿到数据后作格式化处理。html

调用时报出 一个超时,还有一个 JTA transaction unexpectedly rolled back,后来一步一步debug看,微服务的接口返回时要达到九秒多才返回,而我这边没有等到它返回数据,就直接结束事务往下执行了数据库

由此我想到多是事务超时,json

1·因而我加大了HttpClient的超时时间,---很差使微服务

2·加大我事务的时间----也不行优化

后来想到我只是一个读的操做,根本不须要事务,而个人项目里面是开启了全局事务,我不能去把全局的事务时间改了而影响到别的操做,就用了@Transactional这个注解debug

@Transactional

而这个注解里面的参数比较多,具体用到哪个,我认为个人这个接口只是调取数据而后作显示,并无去操做数据库,并不须要加入Spring的事务中,而数据库的事务根本不涉及更无可谈htm

看了这篇帖子   https://www.cnblogs.com/yepei/p/4716112.html  里面有这么一个描述blog

  • TransactionDefinition.PROPAGATION_NOT_SUPPORTED:以非事务方式运行,若是当前存在事务,则把当前事务挂起。

首先我肯定不须要事务,其次个人接口里是有事务的,可以符合我需求的,我看到只有这个,因而加在业务层接口上这一句接口

@Transactional(propagation= Propagation.NOT_SUPPORTED)

后来看到说能够加上只读,可是只读事务用于客户代码只读但不修改数据的情形,只读事务用于特定情景下的优化,我是有拿到数据作处理,因此此处不适用加只读事务

@Transactional(propagation= Propagation.NOT_SUPPORTED,readOnly = true)

总结:

        归根结底其实就是事务超时的缘由,其实并非一个大的Bug,只是这里面不少小细节本身没有留意到,记一下长个记性