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