Java Springboot Async使用

 异步函数调用不会阻塞主线程,主线程自动继续往下执行,只需要在函数上打上标记@Async

@Service
public class AsyncSetting {
    Logger logger = LoggerFactory.getLogger(AsyncSetting.class);
    @Async
    @Transactional
    public void SettingCommandModeStatusSelect(LogService logService, EquipmentService equipmentService, EntityManager entityManager, SettingStatus settingStatus)
    {
        logger.info("settingStatus CommandId="+settingStatus.getCommandId()+" 执行查询任务开始!");
        try
        {
            while(true) {
                UserHttpClient userHttpClient = new UserHttpClient();
                String json = userHttpClient.QueryDeviceCommand(settingStatus.getDeviceId(), startTime,endTime);
                JsonToSettingCommand jsonToSettingCommand = new JsonToSettingCommand();
                EmnuSettingStatus emnuSettingStatus = jsonToSettingCommand.dataConvert(json,settingStatus);
                //成功,超时,过期,取消,失败,发生错误
                if((emnuSettingStatus == EmnuSettingStatus.DELIVERED) || (emnuSettingStatus == EmnuSettingStatus.SUCCESSFUL) || (emnuSettingStatus == EmnuSettingStatus.TIMEOUT)|| (emnuSettingStatus == EmnuSettingStatus.EXPIRED)||
                        (emnuSettingStatus == EmnuSettingStatus.FAILED)|| (emnuSettingStatus == EmnuSettingStatus.CANCELED)|| (emnuSettingStatus == EmnuSettingStatus.ERROR))
                {
                    try {
                        UserDefinedServer userDefinedServer = new UserDefinedServer();
                        Long elapsedTime = settingStatus.getElapsedTime() - (settingStatus.getCorrectionTime()/1000);
                        if(userDefinedServer.updateSettingModeByTableNameBySettingId(entityManager, "tb_setting_mode", settingStatus.getCommandId(), emnuSettingStatus.getCode(),elapsedTime)) {
                            logger.info("settingStatus CommandId=" + settingStatus.getCommandId() + " " + emnuSettingStatus.getMsg() + " 写入数据库成功!");
                            logService.addLog(Str.DebugLevel.Info, "AsyncSetting", "settingStatus CommandId=" + settingStatus.getCommandId() + " " + emnuSettingStatus.getMsg() + " 写入数据库成功!");
                        }
                        else
                        {
                            logger.info("settingStatus CommandId=" + settingStatus.getCommandId() + " " + emnuSettingStatus.getMsg() + " 写入数据库失败!");
                            logService.addLog(Str.DebugLevel.Info, "AsyncSetting", "settingStatus CommandId=" + settingStatus.getCommandId() + " " + emnuSettingStatus.getMsg() + " 写入数据库失败!");
                        }
                        break;
                    }catch (Exception ex)
                    {
                        logger.error("settingStatus CommandId="+settingStatus.getCommandId()+" "+emnuSettingStatus.getMsg()+" 写入数据库失败!");
                        logService.addLog(Str.DebugLevel.Error,"AsyncSetting","settingStatus CommandId="+settingStatus.getCommandId()+" "+emnuSettingStatus.getMsg()+" 写入数据库失败!");
                        break;
                    }
                }
                else
                {
                }
                logger.info("settingStatus CommandId="+settingStatus.getCommandId()+" json="+json);
                Thread.sleep(60*1000);//1分钟查询一次命令执行状态
            }
        }
        catch (Exception ex)
        {
            logger.error("settingStatus CommandId="+settingStatus.getCommandId()+" 执行查询任务失败!"+ex.toString());
            logService.addLog(Str.DebugLevel.Error,"AsyncSetting","settingStatus CommandId="+settingStatus.getCommandId()+" 执行查询任务失败!");
        }
        logger.info("settingStatus CommandId="+settingStatus.getCommandId()+" 执行查询任务结束!");
    }
}

前端调用

//注入
@Autowired
private AsyncSetting asyncSetting;

@Transactional
    @ResponseBody
    @RequestMapping("SendMode")
    public ResReturnInfo SendMode(String device_id,String workmode,String reserved0,String reserved1,String now,String retry,HttpSession session)
{
 asyncSetting.SettingCommandModeStatusSelect(logService,equipmentService,entityManager,settingStatus);//无返回参数,有返回参数还没用过
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花开花落的个人博客

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值