JAVA异步调用ApplicationEvent

发布于:2024-06-28 ⋅ 阅读:(22) ⋅ 点赞:(0)

业务执行完成后,需发送文件

异步调用好处

1.解耦
2.提高系统的并发性能和响应速度

/**
 * 对接财务中台,文件数据推送时的event
 *      审单后推送指定的一些文件
 */
@Getter
@Setter
@ToString
public class FinFileEvent extends ApplicationEvent {

    private MpBusiOrder busiOrder;

    public FinFileEvent(Object source) {
        super(source);
    }

    public FinFileEvent(Object source, MpBusiOrder busiOrder){
        super(source);
        this.busiOrder = busiOrder;
    }
}


/**
 * 推送文件时的监听器
 */
@Component
@Slf4j
@RequiredArgsConstructor
public class FinFileEventListener implements ApplicationListener<FinFileEvent> {

    private final MpBusiOrderService mpBusiOrderService;

    @Override
    public void onApplicationEvent(FinFileEvent finFileEvent) {
        MpBusiOrder busiOrder = finFileEvent.getBusiOrder();
        log.info("-----审单后推送指定文件到财务中台开始,订单ID:{}-----",busiOrder.getId());
        // 推送订单和费用数据到财务中台
        Result<FinResponse> orderAndFeeToFin = mpBusiOrderService.pushFileToFin(busiOrder);
        log.info("审单后推送指定文件到财务中台响应结果:{}", JSON.toJSONString(orderAndFeeToFin));
        log.info("-----审单后推送推送指定文件到财务中台结束,订单ID:{}-----",busiOrder.getId());
    }
}

调用异步执行方法

@Service("mpDocMblRefService")
@Slf4j
public class MpDocMblRefServiceImpl implements MpDocMblRefService {
    // 注入SpringBoot容器
    @Autowired
    private ApplicationContext applicationContext;

    @Override
    public String event( @PathVariable String str ){
        // 容器推送一个事件, 推送自定义事件
        applicationContext.publishEvent(new FinFileEvent(this, mpBusiOrder));
        return str;
    }
}