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

任务,在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);
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JeeSpringCloud是一个基于SpringBoot2.0的后台权限管理系统,界面简洁美观敏捷开发系统架构。核心技术采用Spring、MyBatis、Shiro没有任何其它重度依赖。 互联网云快速开发框架,微服务分布式代码生成的敏捷开发系统架构。项目代码简洁,注释丰富,上手容易,还同时集中分布式、微服务,同时包含许多基础模块和监控、服务模块。模块包括:定时任务调度、服务器监控、平台监控、平台设置、开发平台、单点登录、Redis分布式高速缓存、会员、营销、在线用户、日志、在线人数、访问次数、调用次数、直接集群、接口文档、生成模块、代码实例、安装视频、教程文档 代码生成(单表、主附表、树表、列表和表单、redis高速缓存对接代码、图表统计、地图统计、vue.js)、dubbo、springCloud、SpringBoot、mybatis、springspringmvc。 功能 用户管理:用户是系统操作者,该功能主要完成系统用户配置。 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。 岗位管理:配置系统用户所属担任职务。 菜单管理:配置系统菜单,操作权限,按钮权限标识等。 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。 字典管理:对系统中经常使用的一些较为固定的数据进行维护。 参数管理:对系统动态配置常用参数。 通知公告:系统通知公告信息发布维护。 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 登录日志:系统登录日志记录查询包含登录异常。 在线用户:当前系统中活跃用户状态监控。 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 代码生成:前后端代码生成(单表、主附表、树表、列表和表单、增删改查云接口、redis高速缓存对接代码、图表统计、地图统计、vue.js) ,并生成菜单和权限直接使用。 系统接口:根据业务代码自动生成相关的api接口文档。 连接池监视:监视当期系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 在线接口文档:使用swager生成在线文档。 ActiveMQ队列:提供ActiveMQ队列,处理批量发送大数据量邮件、大数据量日志文件。 工作流:功能包括在线办公、我的任务、审批测试、流程管理、模型管理。 CMS:功能包括内容管理、内容管理、统计分析、栏目设置、首页。 dubbo:代码生成直接生成dubbo对接代码。 服务器Down机邮件监控:通过定时任务监控服务器是否Down机,并发送通知邮件。 服务器监控:通过sigar进行服务器图形化监控。 异常邮件监控:全局拦截系统异常,并发送通知邮件。 单点登录:使用shior和Redis、共享session方式实现单点登录。 Redis分布式高速缓存:代码生成直接生成Redis对接代码。 特性: JeeSpringCloud基于SpringBoot+SpringMVC+Mybatis+Redis+SpringCloud+Vue.js微服务分布式代码生成的敏捷开发系统架构。项目代码简洁,注释丰富,上手容易,还同时集中分布式、微服务,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块。成为大众认同、大众参与、成就大众、大众分享的开发平台。JeeSpring官方qq群(328910546)。代码生成前端界面、底层代码(spring mvc、mybatis、Spring boot、Spring Cloud、微服务的生成)、安全框架、视图框架、服务端验证、任务调度、持久层框架、数据库连接池、缓存框架、日志管理、IM等核心技术。努力用心为大中小型企业打造全方位J2EE企业级平台ORM/Redis/Service仓库开发解决方案。一个RepositoryService仓库就直接实现dubbo、微服务、基础服务器对接接口和实现。 努力用心为大中小型企业打造全方位J2EE企业级平台开发解决方案。 Spring Boot/Spring cloud微服务是利用云平台开发企业应用程序的最新技术,它是小型、轻量和过程驱动的组件。微服务适合设计可扩展、易于维护的应用程序。它可以使开发更容易,还能使资源得到最佳利用。 微服务/集群(nignx) 支持REST风格远程调用(HTTP + JSON/XML):基于非常成熟的Spring Boot框架,在Spring Boot Spring Cloud中实现了REST风格(HTTP + JSON/XML)的远程调用,以显著简化企业内部的跨语言交互,同时显著简化企业对外的Open API、无线API甚至AJAX服务端等等的开发。 事实上,这个REST调用也使得Dubbo可以对当今特别流行的“微服务”架构提供基础性支持。 另外,REST调用也达到了比较高
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值