![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
springboot
胡峻峥
快乐的程序员
展开
-
Java分布式IP限流和防止恶意IP攻击方案
前言限流是分布式系统设计中经常提到的概念,在某些要求不严格的场景下,使用Guava RateLimiter就可以满足。但是Guava RateLimiter只能应用于单进程,多进程间协同控制便无能为力。本文介绍一种简单的处理方式,用于分布式环境下接口调用频次管控。如何防止恶意IP攻击某些暴露的接口呢(比如某些场景下短信验证码服务)?本文介绍一种本地缓存和分布式缓存集成方式判断远程IP是否为...原创 2020-03-29 19:35:38 · 1726 阅读 · 1 评论 -
Springboot国际化信息(i18n)解析
国际化信息理解国际化信息也称为本地化信息 。 Java 通过 java.util.Locale 类来表示本地化对象,它通过 “语言类型” 和 “国家/地区” 来创建一个确定的本地化对象 。举个例子吧,比如在发送一个具体的请求的时候,在header中设置一个键值对:"Accept-Language":"zh",通过Accept-Language对应值,服务器就可以决定使用哪一个区域的语言,找到相...原创 2019-09-14 23:35:27 · 11266 阅读 · 1 评论 -
基于zookeeper实现分布式配置中心(二)
上一篇(基于zookeeper实现分布式配置中心(一))讲述了zookeeper相关概念和工作原理。接下来根据zookeeper的特性,简单实现一个分布式配置中心。配置中心的优势1、各环境配置集中管理。2、配置更改,实时推送,jvm环境变量及时生效。3、依靠配置变更,动态扩展功能,减少二次上线带来的成本。4、减少开发人员、运维人员修改配置带来的额外开销。...原创 2019-06-06 16:33:00 · 452 阅读 · 0 评论 -
Springboot源码——应用程序上下文分析
前两篇(Spring MVC源码——Root WebApplicationContext和Spring MVC源码——Servlet WebApplicationContext)讲述了springmvc项目创建上下文的过程,这一篇带大家了解一下springboot项目创建上下文的过程。SpringApplication引导类SpringApplication类用于启动或者引导spr...原创 2019-05-13 01:18:16 · 353 阅读 · 0 评论 -
线程池优化之充分利用线程池资源
一、前言 最近做了电子发票的需求,分省开票接口和发票下载接口都有一定的延迟。为了完成开票后自动将发票插入用户微信卡包,目前的解决方案是利用线程池,将开票后插入卡包的任务(轮询分省发票接口,直到获取到发票相关信息或者轮询次数用完,如果获取到发票信息,执行发票插入微信卡包,结束任务)放入线程池异步执行。仔细想一想,这种实现方案存在一个问题,线程池没有充分的利用。为什么没有充分的利用?下面详细的分...原创 2019-04-06 23:11:07 · 557 阅读 · 0 评论 -
Spring异步调用原理及SpringAop拦截器链原理
一、Spring异步调用底层原理 开启异步调用只需一个注解@EnableAsync@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Import(AsyncConfigurationSelector.class)public @interface EnableAsync { ...原创 2019-03-18 17:34:30 · 585 阅读 · 0 评论 -
Spring BPP中优雅的创建动态代理Bean
一、前言 本文章所讲并没有基于Aspectj,而是直接通过Cglib以及ProxyFactoryBean去创建代理Bean。通过下面的例子,可以看出Cglib方式创建的代理Bean和ProxyFactoryBean创建的代理Bean的区别。二、基本测试代码 测试实体类,在BPP中创建BppTestDepBean类型的代理Bean。@Componentpublic stat...原创 2019-03-03 00:55:05 · 211 阅读 · 0 评论 -
转载:ThreadPoolExecutor 源码阅读
前言 之前研究了一下如何使用ScheduledThreadPoolExecutor动态创建定时任务(Springboot定时任务原理及如何动态创建定时任务),简单了解了ScheduledThreadPoolExecutor相关源码。今天看了同学写的ThreadPoolExecutor 的源码解读,甚是NB,必须转发一下。读了一下 ThreadPoolExecutor 的源码(JDK 11...转载 2019-02-12 14:18:04 · 207 阅读 · 0 评论 -
Springboot定时任务原理及如何动态创建定时任务
一、前言 上周工作遇到了一个需求,同步多个省份销号数据,解绑微信粉丝。分省定时将销号数据放到SFTP服务器上,我需要开发定时任务去解析文件。因为是多省份,服务器、文件名规则、数据规则都不一定,所以要做成可配置是有一定难度的。数据规则这块必须强烈要求统一,服务器、文件名规则都可以从配置中心去读。每新增一个省份的配置,后台感知到后,动态生成定时任务。二、Springboot引入定时任务核心配...原创 2019-02-07 22:06:08 · 11681 阅读 · 7 评论 -
SpringSecurity整合JWT
一、前言 最近负责支付宝小程序后端项目设计,这里主要分享一下用户会话、接口鉴权的设计。参考过微信小程序后端的设计,会话需要依靠redis。相关的开发人员和我说依靠Redis并不是很靠谱,redis在业务高峰期不稳定,容易出现问题,总会出现用户会话丢失、超时的问题。之前听过JWT相关的设计,决定尝试一下。二、什么是JWT JSON Web Token(JWT)是一个开放标准(RFC ...原创 2019-01-19 23:55:59 · 1079 阅读 · 0 评论 -
SpringMvc接口中转设计(策略+模板方法)
一、前言 最近带着两个兄弟做支付宝小程序后端相关的开发,小程序首页涉及到很多查询的服务。小程序后端服务在我司属于互联网域,相关的查询服务已经在核心域存在了,查询这块所要做的工作就是做接口中转。参考了微信小程序的代码,发现他们要么新写一个接口调用,要么新写一个接口包裹多个接口调用。这种方式不容易扩展。由于开发周期比较理想,所以决定设计一个接口中转器。二、接口中转器整体设计 ...原创 2019-01-10 18:43:34 · 839 阅读 · 0 评论 -
RedisCacheManager设置Value序列化器技巧
CacheManager基本配置 请参考博文:springboot2.0 redis EnableCaching的配置和使用RedisCacheManager构造函数/** * Construct a {@link RedisCacheManager}. * * @param redisOperations */@SuppressWarnings("rawtypes"...原创 2018-12-10 15:46:28 · 2321 阅读 · 0 评论 -
高效使用hibernate-validator校验框架
一、前言 高效、合理的使用hibernate-validator校验框架可以提高程序的可读性,以及减少不必要的代码逻辑。接下来会介绍一下常用一些使用方式。二、常用注解说明限制 说明 @Null 限制只能为null @NotNull 限制必须不为null @AssertFalse 限制必须为false @AssertTrue 限制必须为tr...原创 2018-11-13 19:15:42 · 1224 阅读 · 0 评论 -
springmvc controller动态设置content-type
springmvc RequestMappingHandlerAdapter#invokeHandlerMethod 通过ServletInvocableHandlerMethod#invokeAndHandle调用目标方法,并处理返回值。 如果return value != null,则通过returnvalueHandlers处理,内部会调用MessageConverter...原创 2018-11-10 11:15:37 · 9249 阅读 · 0 评论 -
log4j平稳升级到log4j2
一、前言 公司中的项目虽然已经用了很多的新技术了,但是日志的底层框架还是log4j,个人还是不喜欢用这个的。最近项目再生产环境上由于log4j引起了一场血案,于是决定升级到log4j2。二、现象 虽然生产环境有多个结点分散高并发带来的压力,但是消息中心上一周好多接入方接入,导致并发量一下就增多了,导致服务卡死。在堆栈信息中看到大量的BLOCK异常,如下。"http-nio-...原创 2018-11-09 20:45:58 · 3133 阅读 · 0 评论 -
spring注解工具类AnnotatedElementUtils和AnnotationUtils
一、前言 spring为开发人员提供了两个搜索注解的工具类,分别是AnnotatedElementUtils和AnnotationUtils。在使用的时候,总是傻傻分不清,什么情况下使用哪一个。于是我做了如下的整理和总结。二、AnnotationUtils官方解释 功能 用于处理注解,处理元注解,桥接方法(编译器为通用声明生成)以及超级方法(用于可选注解继承)的常规实用程序方...原创 2018-10-20 08:42:31 · 8498 阅读 · 3 评论