工作总结 之 spring 异步调用问题

本文介绍了在SpringBoot中遇到的服务器间数据同步效率问题,并探讨了两种解决方案:HTTP客户端异步调用和使用SpringBoot的@Async注解。通过详细步骤展示了如何在Service层应用@Async实现异步调用,解决了Controller层调用无效和无法注入ServiceImpl的问题,从而提升了数据同步的效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:

遇到两个服务器需要数据同步 而同步时候比较浪费时间 ,如果按以前的方式 等同步完毕以后在执行下面数据会导致效率极慢
采用了异步调引方式

1.首先想到的是 httpclient 调用异步

具体参考
HttpClient详细使用示例

2.研究发现太复杂了 ,想了想自己使用的springboot,而异步调用这个是很常见的问题,于是发现@Async方式

具体参考
使用SpringBoot的@Async实现异步调用方法,以及自己开启新线程异步调用

3.遇到的问题 :

1:问题

 开始数据同步方法写到一个公用的controller 里面让其他controller 调用  当设定@Async注解时候  发现其他service里调用此方法没有效果

2.解决方式:

仔细研究发现@Async必须写到service层才可以生效

3.问题

调用 @autoword serviceImpl 实现类 没有成功

4.解决方式:

必须调用service 类 因为impl是动态生成的 不具有调用行

最后结果`

service

public interface SyncService {
    void dataLink(Object mapLink, String url);
}

serviceImpl

@Service
public class SyncServiceImpl implements SyncService {
    @Override
    @Async
    public void dataLink(Object mapLink, String url) {
        Map<String, Object> map = new HashMap<>();
        map.put("loginAccount", Constant.loginAccount);
        map.put("accountPassword", Constant.accountPassword);
        String res = HttpUtil.sendPost(urlLogin, map, null);
        JSONObject resObj = JSONObject.parseObject(res);
        System.out.println(resObj.getJSONObject("data").getString("token"));
        Map<String, Object> map2 = new HashMap<>();
        String jsonObject = JSONObject.toJSONString(mapLink, SerializerFeature.WriteNullStringAsEmpty);
        map2.put("copyrightObj", jsonObject);
        System.out.println(jsonObject);
        String res2 = HttpUtil.sendPost(url, map2, resObj.getJSONObject("data").getString("token"));
        System.out.println(url + "------------------" + res2);
    }
}

需要调用的service 加

 @Autowired
    SyncService syncService;

调用方法

   syncService.dataLink(copyrightDetailPrdArticleInfo, Constant.journal);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值