SpringBoot + Springmvc集成guava
添加guava框架,实现异步处理。
一、添加依赖
<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>18.0</version>
</dependency>
二、注册为组件Bean
import com.google.common.eventbus.AsyncEventBus;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;/*** web 配置类** @author Creator*/
@Configuration
public class WebConfig implements WebMvcConfigurer {/*** AsyncEventBus注册*/@Beanpublic AsyncEventBus asyncEventBus() {// 创建一个核心3线程,最大10线程的线程池,配置DiscardPolicy策略,抛弃当前任务ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3,10,60, TimeUnit.SECONDS,new ArrayBlockingQueue<Runnable>(10),new ThreadPoolExecutor.DiscardPolicy());return new AsyncEventBus(threadPoolExecutor);}}
三、添加事件处理监听器
import com.google.common.eventbus.AsyncEventBus;
import com.google.common.eventbus.Subscribe;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;/*** 异步监听处理器*/
@Component
public class AsyncEventListener {/*** 日志*/private final static Logger logger = LoggerFactory.getLogger(AsyncEventListener.class);@Autowiredprivate AsyncEventBus asyncEventBus;@Autowiredprivate ILoginLogService loginLogService;/*** 注册这个监听器*/@PostConstructpublic void register(){asyncEventBus.register(this);}/*** 具体业务处理(此处比如向库中添加登录日志)* sysLoginLogPO: 登录日志表对应实体(替换成自己的传参实体即可)*/@Subscribepublic void addLoginLog(SysLoginLogPO sysLoginLogPO) {logger.info("添加登录日志:sysLoginLogPO=" + sysLoginLogPO);// 执行具体添加日志操作loginLogService.insert(sysLoginLogPO);}/*** 其他需要异步的业务方法*/@Subscribepublic void XXX(XXXXPO xxxxpoPO) {logger.info("日志:xxxxpoPO=" + xxxxpoPO);// 执行具体添加日志操作 TODO}
}
四、业务层调用
@Autowiredprivate AsyncEventBus asyncEventBus;/*** 业务处理方法(业务封装)*/public void doAddLoginLog(){SysLoginLogPO sysLoginLogPO = new SysLoginLogPO();// 提交异步处理, 会执行AsyncEventListener中的 addLoginLog 方法,根据参数类型匹配asyncEventBus.post(sysLoginLogPO);}
五、guava同spring集成
可以参考 https://blog.csdn.net/yxp20092010/article/details/46537333
注意:上面链接的这个文章实现出来的是默认的同步,如果需求要使用异步,那么参考如下修改:
EventBusAdapter extends EventBus 一定要改为继承 AsyncEventBus 类,
然后添加一个构造方法,如下:
public class EventBusAdapter extends AsyncEventBus implements InitializingBean {private List<EventAbstract> eventBusListener;// 默认构造方法public EventBusAdapter (Executor executor, List<EventAbstract> eventBusListener) {super(executor);this.eventBusListener = eventBusListener;}@Overridepublic void afterPropertiesSet() throws Exception {for(EventAbstract eventAbstract : eventBusListener){this.register(eventAbstract);}}}
spring配置修改:
<!-- spring thread pool executor -->
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"><!-- 线程池维护线程的最少数量 --><property name="corePoolSize" value="5" /><!-- 允许的空闲时间 --><property name="keepAliveSeconds" value="200" /><!-- 线程池维护线程的最大数量 --><property name="maxPoolSize" value="10" /><!-- 缓存队列 --><property name="queueCapacity" value="20" /><!-- 对拒绝task的处理策略 --><property name="rejectedExecutionHandler"><bean class="java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy" /></property>
</bean><!-- EventBusListener 定义 -->
<util:list id="eventBusListener" value-type="com.qyou.EventAbstract"><bean class="com.qyou.SendFailMailHandler "/><bean class="com.qyou.SendSuccessSMSHandler "/>
</util:list><!-- EventBusAdapter适配器 -->
<bean id="eventBusAdapter" class="com.qyou..EventBusAdapter"><constructor-arg name="eventBusListener" ref="eventBusListener"/><constructor-arg name="executor" ref="taskExecutor"/>
</bean>
SpringBoot + Springmvc集成guava相关推荐
- SpringBoot 快速集成 JWT 实现用户登录认证
前言:当今前后端分离时代,基于Token的会话保持机制比传统的Session/Cookie机制更加方便,下面我会介绍SpringBoot快速集成JWT库java-jwt以完成用户登录认证. 一.JWT ...
- Java项目:嘟嘟图片展览馆管理系统(java+Springboot+SpringMVC+JPA+Jsp+maven+mysql)
源码获取:博客首页 "资源" 里下载! 一.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe(IntelliJ IDEA,Eclisp ...
- springboot springmvc 抛出全局异常解决方法
springboot springmvc 抛出全局异常解决方法 参考文章: (1)springboot springmvc 抛出全局异常解决方法 (2)https://www.cnblogs.com/ ...
- springboot项目集成docker
文章目录 一.docker常用命令 0.拉取镜像到本地仓库 1.查看所有镜像 2.创建一个新的容器并运行,返回的是容器的ID -- CONTAINER ID: 3.查看运行中的docker实例 4.查 ...
- SpringMvc 集成 shiro 实现权限角色管理-maven
2019独角兽企业重金招聘Python工程师标准>>> SpringMvc 集成 shiro 实现权限角色管理 1.项目清单展示 2.项目源码解析 1)spring-context ...
- springboot的jsp应该放在哪_在springboot中集成jsp开发
springboot就是一个升级版的spring.它可以极大的简化xml配置文件,可以采用全注解形式开发,一个字就是很牛. 在springboot想要使用jsp开发,需要集成jsp,在springbo ...
- springboot+mybatis集成自定义缓存ehcache用法笔记
今天小编给大家整理了springboot+mybatis集成自定义缓存ehcache用法笔记,希望对大家能有所办帮助! 一.ehcache介绍 EhCache 是一个纯Java的进程内缓存管理框架,属 ...
- Springboot/Cloud集成Sentinel 和 入门实战
文章目录 一.Springboot/Cloud集成Sentinel 1. spring-cloud-alibaba依赖 2. 引入 Sentinel starter 3. 配置application. ...
- springMVC集成缓存框架Ehcache
概述 Ehcache算是当前比较流行的缓存框架,使用缓存可以极大的缓解服务器和数据库的压力,提高访问效率,提高服务器的并发能力.接下来我们看怎么把缓存在spring mvc种使用起来. 详细 代码下载 ...
最新文章
- Headfirst JSP 01 (概述)
- Android中的日期控件DatePicker和DatePickerDialog
- UVA Mapping the Swaps
- java oca_OCA的Java拼图游戏第3部分
- C++11标准库 - array 1
- 微信公众号开发 包括服务器配置、java web项目搭建、tomcat手动发布web项目、微信开发所需的url和token验证 2017.12.2...
- Linux如何查看信号宏定义,转 LINUX 调试宏定义
- windows找不到文件gpedit.msc_u盘插入电脑在windows却找不到u盘的解决办法【详解】...
- VC6.0编译错误解决方法集锦
- SQL的bit列名转换成access是/否数据类型,True无效的问题
- 状态机finite-state machine学习笔记2——按键消抖初步(1)
- C语言种根号怎么表示 比如(1-x)的二分之一次方
- 计算机中模拟和数字信号,模拟信号和数字信号的区别是什么
- Android DRM
- 我的挣扎 与 TBtools 的开发
- 百度网盘和百度云有什么区别
- 记录从指尖悄悄流逝的时间
- Spark:reduceByKey与groupByKey进行对比
- 从零开始手写VIO第三章作业(含关键点细节及思维过程)
- Python自动化办公——生成Excel入库统计表