
java
文章平均质量分 57
java_大胡子
这个作者很懒,什么都没留下…
展开
-
mybatis/mybatis plus lambda会话缓存失效(1)
mybatis会话缓存失效了怎么办原创 2022-12-20 08:53:17 · 439 阅读 · 0 评论 -
mybatis-plus下_databaseId的使用
根据mybatis官方文档(https://mybatis.org/mybatis-3/zh/configuration.html)和百度搜到的各种文档,给的配置都是如下:第一步配置mybatis配置文件,第二步在mapper里指定databaseId。原创 2022-09-28 18:00:22 · 6942 阅读 · 0 评论 -
让Redis jackson序列化带上class类路径信息的配置方法
先放配置 @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory, Jackson2ObjectMapperBuilder builder) { ObjectMapper objectMapper = new ObjectMapper(); builder.configure(objectMapper);原创 2021-11-27 14:03:16 · 7775 阅读 · 0 评论 -
【正则表达式】简单的匹配要不要上正则
结论:不要需求写一个判断字符串是否满足占位符格式的方法 ,占位符格式是常见的 ${}三种写法// 第一种 public static String translatePlaceHolder(String before){ if(null == before){ return before; } if(Pattern.matches("^\\$\\{.*\\}$",before)){ return b原创 2021-11-23 14:26:21 · 235 阅读 · 0 评论 -
Could not read JSON jackson无法序列化SimpleGrantedAuthority异常
前言用Spring Security时需要用到一个基础类,UserDetails,这个类要求有一个接口是getAuthorities,这个接口返回的默认值是HashSet,这个SimpleGrantedAuthority没有无参构造函数,所以在反序列化的时候会报错。解决方案添加自定义反序列化器@JsonDeserialize(using = CustomAuthorityDeserializer.class)private Collection<GrantedAuthority> au原创 2021-10-11 16:22:27 · 2108 阅读 · 0 评论 -
深入解析为什么Spring boot的Configuration注解的子类方法可以覆盖父类bean实现
前言今天想给spring security框架服务之间校验权限的功能加一个免服务内部校验,找到了全局方法权限配置的配置类GlobalMethodSecurityConfiguration。看到了类和方法上的两句话一个开启全局方法的配置,子类可以通过继承他来自定义默认值,但是必须要在子类上定义EnableGlobalMethodSecurity注解子类可以override这个方法来提供一个不同的方法拦截器最后实现效果是,定义一个类,只要继承这个类,这个类不用定义成Configuration,也原创 2021-09-29 17:17:34 · 1883 阅读 · 1 评论 -
Spring源码解析:run源码的几个关键节点
Spring源码的入口大家都知道,是run,但是点进去之后发现里面方法弯弯绕绕,不知道是遵循什么样的规则或者设计思路去实现的。其实在Spring里有一个类已经写清楚了run的关键节点,就是SpringApplicationRunListener类。下载源码,进去看他的方法注释,就可以看到它把整个run方法的周期都罗列清楚了public interface SpringApplicationRunListener { // 1 当run第一次启动时立即调用,非常早期的初始化 void start原创 2021-09-25 15:01:48 · 434 阅读 · 0 评论 -
微服务场景下的异常处理设计
主要解决的问题异常在系统内部的应用和处理异常在服务之间的应用和处理异常在网关和前端交互中的处理异常定义异常是高级语言出现的定义,它用于强制程序员在编码中处理它。这里有个难懂的概念,什么是强制处理。在C语言中没有异常机制,判断一个程序是否执行顺利需要通过方法的返回值来判断,如果是1则表示执行完成,0表示执行错误。在这种机制下,如果程序员在调用方法时没有去判断1/0,而继续执行后续的编码,系统也是会“错误”地运行下去。在java中,遇到异常必须抛出或者catch,否则代码编译不通过,这样就强制程原创 2021-09-16 09:52:10 · 1834 阅读 · 0 评论 -
spring security oauth2 TokenEnhancer加强token不生效
问题在AuthorizationServerConfigurerAdapter.configure(AuthorizationServerEndpointsConfigurer endpoints)方法中配置了endpoints.tokenEnhancer();但是没有生效。要加强token是因为原始token信息带的太少,需要附加一些额外信息给调用方解决看了一下config里面,配置的tokenEnhancer实际上是给TokenService用的。security默认生成一个DefaultT原创 2021-08-28 18:15:52 · 2634 阅读 · 0 评论 -
Spring Security,Can‘t configure antMatchers after anyRequest
前提项目启动的时候报了这个错,系统用的是spring security oauth2,配置的是ResourceServerConfigurerAdapter,然后报错无法运行一般问题的解决方案一般问题的解决方案就是和报错名称一样,不要在antMatchers后面定义anyRequest,因为这个http配置是顺序读取加载的,anyRequest表示剩下的所有的。所以配置要写成http.authorizeRequests()antMatchers().permitAll().anyRequest()原创 2021-08-26 17:59:21 · 3657 阅读 · 0 评论 -
设计模式之包装器/wapper/装饰模式的应用
简介装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。在很多博文里会引入Decorator角色,觉得把简单问题复杂化了。等下看一下Request的应用就知道实际用起来比类图简单的多。源码中的应用以RequestWrapper为例,这是一个十分有代表性的类。在debug的时候经常会发现,request套了一个又一个,因为他们一直在互相wrapper。点到最后才看到request的参数。每一原创 2021-08-11 18:38:09 · 369 阅读 · 0 评论 -
AQS的setState和compareAndSetState的区别
cas是用于复合操作state的情况,与是否线程竞争无绝对关系,线程竞争的情况下如果不是复合操作也可以用setStatecas释义cas是一个用于减少多线程切换时带来的开销的一种处理方式,通过先比较再交换的方式来尝试获得锁。一般用于轻量同步的情况。当配合循环使用的时候可以实现非阻塞的获取锁。以下摘自百度百科compare and swap,解决多线程并行情况下使用锁造成性能损耗的一种机制,CAS操作包含三个操作数——内存位置(V)、预期原值(A)和新值(B)。如果内存位置的值与预期原值相匹配,那么原创 2021-05-30 21:08:50 · 1140 阅读 · 0 评论 -
从源码注释看java多线程的几种状态,以及几种状态的模拟
概述java定义的多线程主要有如下几种状态:创建、运行、阻塞、等待、限时等待、结束public enum State { /** * Thread state for a thread which has not yet started. */ NEW, /** * Thread state for a runnable thread. A thread in the runnable原创 2021-05-29 08:48:46 · 277 阅读 · 1 评论 -
设计模式之责任链模式,以tomcat中的过滤器为例
概述由一组处理器依次处理某个数据,在处理过程中可能对数据进行修改。详细因为大家相对的对Filter最熟悉,这里类图以filter为例了。实际Spring下的Filter会比这个复杂的多,中间隔了很多GenericFilterBean、OncePerRequestFilter等类,这里是简化图图中包含三类角色:被处理的对象:request和response,被处理的对象可以是一个可以是多个,Filter中是这一对过滤器链:负责如下事情存储所有需要执行的过滤器过滤器链的开始过滤通过遍历判断原创 2021-05-16 22:42:57 · 393 阅读 · 0 评论 -
设计模式之工厂模式,以通知为例
概述工厂模式解耦了调用方与被调用方。最大的例子就是Spring。我们以信息推送为例子,因为一般service都只有一个实现类,很难体会区别。而信息推送有的系统用手机,有的用app,有的用多端集成,所以是可能有多种实现的,包括spring的cache实现类,session存储类等等,这类非service类型一般都有多套实现类。信息推送类结构图如下:在有Spring之前,我们一个信息推送类的引入方式是,在所有需要推送信息的类里加一个如下代码:private MsgSender msgSender原创 2021-05-16 18:26:14 · 261 阅读 · 0 评论 -
记一次解决spring boot cache结合redis使用json序列化的问题
描述系统使用了redis,为了方便用了spring boot cache的注解,但是redis默认序列化方式是jdk。看了网上很多解决方案都没能解决问题,很多地方都是用的redistemplate。结果存的还是jdk序列化。解决看了一下redis源码,RedisCacheConfiguration类中有一个配置redis的代码和目前redis情况很相似,所以认定是修改这里。如果不定义配置类的话,配置入口在这里,根据红框注解得知,需要自定义cacheManager 的bean原创 2021-02-18 10:36:13 · 851 阅读 · 2 评论 -
spring boot加web监听器 ServletContextListener
首先 需要继承ServletContextListenerpublic class ParamInitListener implements ServletContextListener然后在启动类上加上@ServletComponentScan注解之前看到往上的教程都这么写,没有写注解后面如果不是同包下要加上路径,搞了好多天没搞好。。@ServletComponentScan(...原创 2018-07-20 09:10:42 · 4283 阅读 · 4 评论