Spring MVC 通过session 创建执行任务队列

本文详细介绍了如何在SpringMVC框架中通过创建DataSendTask类来封装并发任务,并利用任务队列实现事务隔离及任务统一执行。通过控制层的方法addSendTask、doSendTasks及doSendTask,有效地管理并发任务流程。

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

任务,在Spring MVC 框架中,一个server 方法内创建多个 任务(可能会有落地数据的操作),通过任务队列的形式可以使事务隔离开,也可以将多个任务包装起来,在需要的地方统一执行

1.增加队列实体相关方法

public class DataSendTask {
	public static final class DataSendTaskType{
		public static String sendUser_insert = "sendUser_insert";
		public static String sendUser_update_1 = "sendUser_update_1";//1个参数
		public static String sendUser_update_2 = "sendUser_update_2";//2个参数
		public static String sendUser_delete = "sendUser_delete";
		public static String sendCompany_insert = "sendCompany_insert";
		public static String sendCompany_update_1= "sendCompany_update_1";//1个参数
		public static String sendCompany_update_2= "sendCompany_update_2";//2个参数
	}
	private String taskType; //任务类型
	private Long channelId;
	private Long userId;
	private Long companyId;
	
	public DataSendTask(String taskType, Long channelId, Long userId, Long companyId){
		this.taskType = taskType;
		this.channelId = channelId;
		this.companyId = companyId;
		this.userId = userId;
	}
	
	public String getTaskType() {
		return taskType;
	}
	public void setTaskType(String taskType) {
		this.taskType = taskType;
	}
	public Long getChannelId() {
		return channelId;
	}
	public void setChannelId(Long channelId) {
		this.channelId = channelId;
	}
	public Long getUserId() {
		return userId;
	}
	public void setUserId(Long userId) {
		this.userId = userId;
	}
	public Long getCompanyId() {
		return companyId;
	}
	public void setCompanyId(Long companyId) {
		this.companyId = companyId;
	}
}



2.在control 层写下以下3个方法,备用

 /**
     * @param 增加一条下发任务
     */
    public static void addSendTask(DataSendTask task) {
        HttpServletRequest request = BaseController.getRequest();
        HttpSession session = request.getSession();
        List<DataSendTask> tasks = (List<DataSendTask>) session.getAttribute(DATA_SEND_TASKS);
        if (tasks == null) {
            tasks = new ArrayList<DataSendTask>();
        }
        tasks.add(task);
        session.setAttribute(DATA_SEND_TASKS, tasks);
    }


    /**
     * @param task 执行下发任务
     */
    public static void doSendTasks() {
        HttpServletRequest request = BaseController.getRequest();
        HttpSession session = request.getSession();
        List<DataSendTask> tasks = (List<DataSendTask>) session.getAttribute(DATA_SEND_TASKS);
        if (tasks != null) {
            for (int i = 0; i < tasks.size(); i++) {
                DataSendTask task = tasks.get(i);
                //doSendTask(task); //执行任务逻辑根据需求写
            }
        }
        session.removeAttribute(DATA_SEND_TASKS);
    }

    /**
     * @param task 执行下发任务 仅供测试逻辑
     */
    protected static void doSendTask(DataSendTask task) {
        String type = task.getTaskType();
        Long channelId = task.getChannelId();
        Long companyId = task.getCompanyId();
        Long userId = task.getUserId();
        if (DataSendTaskType.sendCompany_insert.equals(type)) {
            DataSendService.sendCompany_insert(companyId, channelId);
        } else if (DataSendTaskType.sendCompany_update_1.equals(type)) {
            DataSendService.sendCompany_update(companyId);
        } else if (DataSendTaskType.sendCompany_update_2.equals(type)) {
            DataSendService.sendCompany_update(companyId, channelId);
        } else if (DataSendTaskType.sendUser_delete.equals(type)) {
            DataSendService.sendUser_delete(userId);
        } else if (DataSendTaskType.sendUser_insert.equals(type)) {
            DataSendService.sendUser_insert(userId, channelId);
        } else if (DataSendTaskType.sendUser_update_1.equals(type)) {
            DataSendService.sendUser_update(userId);
        } else if (DataSendTaskType.sendUser_update_2.equals(type)) {
            DataSendService.sendUser_update(userId, channelId);
        }
    }

3. 具体实现和调用

@RequestMapping("/submitMemberRegisteredVInfo")
	@BSPJournal
	@DomainSecurity(domain = "BSP_MEMBER_V_CHECK")
	public String SubmitMemberRegisteredVInfo(HttpServletRequest request, MemberVViewForm memberVViewForm) throws Exception {
		String VIEW_PAGE=  "/memberV/viewMemberRegisteredVInfo";
	  //1 . 此处调用的server 里面会 调用增加任务方法 	
	  memberVViewForm = memberVService.SubmitMemberRegisteredVInfo(memberVViewForm);
	  //2 . 执行 1.的server 里面的任务队列	
	  ControllerUtil.doSendTasks();
	  return VIEW_PAGE;
	}
server

	public MemberVViewForm SubmitMemberRegisteredVInfo(
			MemberVViewForm memberVViewForm) {

  			Long channelId = OpenUtil.getChannelIdByRegisterSource(mumMemberBaseInfo.getRegisterSource());
  		   //增加下发任务到队列 
  			ControllerUtil.addSendTask(new DataSendTask(DataSendTaskType.sendCompany_insert, channelId, null, mumMemberBaseInfo.getId()));
		return memberVViewForm;
	}

----------------------------------定义一个数组字典,并且立即使用方法---------------------------

public static String getCheckStatus(String statusKey) {
    Map<String, String> statusMap = new HashMap<>();
    statusMap.put(Constants.COMPANYA_STATUS_TYPE1, "草稿");
    statusMap.put(Constants.COMPANYA_STATUS_TYPE2, "待审核");
    statusMap.put(Constants.COMPANYA_STATUS_TYPE4, "已审核-不符");
    statusMap.put(Constants.COMPANYA_STATUS_TYPE9, "已审核-符合");
    return statusMap.get(statusKey);
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值