使用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
首先我肯定不须要事务,其次个人接口里是有事务的,可以符合我需求的,我看到只有这个,因而加在业务层接口上这一句接口
@Transactional(propagation= Propagation.NOT_SUPPORTED)
后来看到说能够加上只读,可是只读事务用于客户代码只读但不修改数据的情形,只读事务用于特定情景下的优化,我是有拿到数据作处理,因此此处不适用加只读事务
@Transactional(propagation= Propagation.NOT_SUPPORTED,readOnly = true)
总结:
归根结底其实就是事务超时的缘由,其实并非一个大的Bug,只是这里面不少小细节本身没有留意到,记一下长个记性