- 浏览: 1436777 次
- 性别:
- 来自: 广州
最新评论
-
raymond.chen:
谢谢您的分享
使用Ngrok解决通过外网访问内网web应用 -
wangyudong:
速度有点慢,不过在也找到了一个开源的holer,配置一个key ...
使用Ngrok解决通过外网访问内网web应用 -
a1006458222:
...
Axis2的部署和应用 -
偷师来了:
不好意思 这样的博客我觉得就灭有必要分享出来了 命令大家都会看 ...
Consul框架介绍 -
lliiqiang:
怎么直接删除文件夹啊?固定的几个文件可以删除,不固定的呢?需要 ...
Flex AIR —— 文件读写
文章列表
Spring常用的PointcutAdvisor
NameMatchMethodPointcutAdvisor
RegexpMethodPointcutAdvisor
AspectJExpressionPointcutAdvisor
DefaultPointcutAdvisor
Spring常用的Pointcut
NameMatchMethodPointcut
JdkRegexpMethodPointc ...
Spring的拦截器
- 博客分类:
- springboot
- Spring
Spring的拦截器主要分两种,一个是HandlerInterceptor,一个是MethodInterceptor。
HandlerInterceptor拦截器
HandlerInterceptor是springMVC项目中的拦截器,它拦截的目标是请求的地址,比MethodInterceptor先执行。实现一个HandlerInterceptor拦截器可以实现HandlerInterceptor接口,也可以继承HandlerInterceptorAdapter类。
自定义拦截器:
public class CustomInterceptor implem ...
Spring的动态代理
- 博客分类:
- Spring
AOP是Spring的重要组成部分,而AOP正是通过代理实现的。如果代理对象实现了接口,则默认使用jdk动态代理,也可强制使用cglib代理,如果未实现接口则只能使用cglib代理。
JDK动态代理: https://chenjumin.iteye.com/blog/2437314, ...
spring retry框架的使用
- 博客分类:
- Spring
spring retry是从spring batch独立出来的一个功能,主要实现了重试和熔断。
重试策略:
NeverRetryPolicy:只调用RetryCallback一次,不重试
SimpleRetryPolicy:重试n次,默认3次,也是RetryTemplate模板默认的策略。很常用
ExceptionClassifierRetryPolicy:可以根据不同的异常,执行不同的重试策略,很常用
TimeoutRetryPolicy:在n毫秒内不断进行重试,超过这个时间后停止重试
CircuitB ...
ThreadLocal的使用范例
- 博客分类:
- Java
ThreadLocal用于保存某个线程的共享变量。
ThreadLocal在每个线程中对该变量会创建一个副本,即每个线程内部都会有一个该变量,且在线程内部任何地方都可以使用,线程之间互不影响。
值的存取过程: ThreadLocal --> Current Thread --> ThreadLocalMap<ThreadLocal, Value> --> ThreadLocalMap.Entry<ThreadLocal, Value>
防止ThreadLocal的弱引用问题(会出现内存泄露):
使用完线程共享变量后, ...
反射工具包Reflections的使用
- 博客分类:
- Java
Reflections 通过扫描 classpath,索引元数据,允许在运行时查询这些元数据,也可以保存收集项目中多个模块的元数据信息。
maven依赖包:
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.9.11</version>
</dependency>
public class ReflectionsTest {
...
Spring BackOff退避算法
- 博客分类:
- Spring
Spring的util包提供了退避算法的实现,BackOff接口和BackOffExecution接口,还有两种具体的策略实现,ExponentialBackOff和FixedBackOff。
FixedBackOff 固定时间间隔重试
每次的间隔时间一样,累计间隔次数达到设定值时,下次BackOff返回-1
long interval = 1000; //重试间隔
long maxAttempts = 10; //最大重试次数
BackOff backOff = new FixedBackOff(interval, maxAttempts);
Back ...
Starter的工作原理:
1、Spring Boot在启动时扫描项目所依赖的jar包,寻找包含spring.factories文件的jar包。
2、读取spring.factories文件获取配置的自动配置类XXXAutoConfiguration。
3、将自动配置类下满足条件(@ConditionalOnXxx)的Bean加入到IOC容器中
编写pom.xml文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="htt ...
使用@ControllerAdvice和@ExceptionHandler两个注解实现Controller层的全局异常统一处理。
特别介绍:
用@ModelAttributes注解标注的方法用于将属性值收集到一个Model类中,并应用到所有的Controller上。
GlobalExceptionHandler类源码:
@ControllerAdvice
//@RestControllerAdvice //全部异常处理返回json时可以使用此Advice
public class GlobalExceptionHandler {
public ...
使用方式:
1、借助 @Import 注解类,创建ImportBeanDefinitionRegistrar的子类,手动构造BeanDefinition对象并注册到容器
2、借助BeanFactoryPostProcessor接口类,通过ClassPathBeanDefinitionScanner类扫描并注册类到容器
3、借助 @Import 注解类,创建ImportBeanDefinitionRegistrar的子类,通过ClassPathBeanDefinitionScanner类扫描并注册类到容器
一、通过创建 ImportBea ...
使用Guava的SimpleTimeLimiter类可以实现调用方法超过指定时间后还没返回时中断调用的逻辑。
/**
* 基于代理模式实现
*/
private static void test1() {
ExecutorService executorService = Executors.newCachedThreadPool();
TimeLimiter timeLimiter = new SimpleTimeLimiter(executorService);
UserService userService = timeLimiter
.newPr ...
常用的限流算法有漏桶算法和令牌桶算法:
漏桶算法(Leaky Bucket):请求进入到漏桶中,漏桶以一定的速率漏水。当请求过多时,水直接溢出。
令牌桶算法(Token Bucket):以一定速率向桶中放入令牌,如果有请求时,请求会从桶中取出令牌,如果能取到令牌,则可以继续完成请求,否则等待或者拒绝服务。
Guava的RateLimiter类基于令牌桶算法实现流量限制。获取令牌的方式有两种:阻塞等待令牌或者取不到立即返回失败。
Guava有两种限流模式,一种为稳定模式(SmoothBursty:令牌生成速度恒定),一种为渐进模式(Smoot ...
ListenableFuture是对JDK的Future的封装和增强,为Future添加回调机制。 JDK8也新增了CompletableFuture类实现了相同的功能,范例见 https://chenjumin.iteye.com/blog/2437228 ,建议用JDK8自带的CompletableFuture类。
public class ListenableFutureTest {
private static int threadCount = 5; //线程数
private static AtomicInteger count = new AtomicInt ...
Redis客户端之Lettuce的使用
- 博客分类:
- 缓存技术
Lettuce是一个可伸缩的线程安全的Redis客户端,支持同步、异步和响应式模式。多个线程可以共享一个连接实例,而不必担心多线程并发问题。它基于Netty框架构建,支持Redis的高级功能,如Sentinel,集群,流水线,自动重新连接和Redis数据模型。
Jedis在实现上是直连Redis-Server,多线程环境下非线程安全,需要通过连接池来使用Jedis。
Maven需要添加以下依赖包:
<dependency>
<groupId>biz.paluch.redis</groupId>
<artifactId>l ...
CyclicBarrier是一个同步辅助类,允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。因为该barrier在释放等待线程后可以重用,所以称它为循环的barrier。
CyclicBarrier支持一个可选的Runnable命令,在一组线程中的最后一个线程到达之后(但在释放所有线程之前),该命令只在每个屏障点运行一次。
public class CyclicBarrierTest {
private static CyclicBarrier barrier;
private static int threadCount = ...