JavaWeb
文章平均质量分 64
WannaRunning
这个作者很懒,什么都没留下…
展开
-
浅谈Guava Cache的参数使用
这个方法是用来重新加载缓存的,通常这个方法是配合refreshAfterWrite参数设置一起使用的,如果没有设置refreshAfterWrite参数则不会触发这个方法逻辑,只有再判断缓存写入时间超出refreshAfterWrite的值时才会调用reload方法执行刷新缓存的逻辑。当执行get操作没有命中缓存或者判断缓存已经超出expireAfterWrite设置的时间即缓存过期时,会调用load方法进行回源逻辑,获取到新的数据并建立缓存。这个方法执行时是加锁的,并发访问一个没有缓存的key会阻塞。原创 2023-12-20 20:30:35 · 896 阅读 · 0 评论 -
浅谈Maven依赖冲突与依赖管理
以上方法虽然治标,但是不治本。如果想依赖冲突不发生,我们需要提前建立一定的规范,团队一起遵守,才能有效避免该类问题。应用项目中使用统一管理基础依赖,定义统一的版本,如常用中间包,工具包,日志包。二方包中不要引入无关的依赖,做到尽量少的依赖。团队开发中,比较常见情况是二方包继承公共的父 pom,从而导致继承许多无相关的依赖,这种情况可以单独管理。二方包做好向下兼容,不要随意改动现有类名,方法名,字段名。项目应用上线之前,将snapshot替换成正式版本。虽然snapshot。原创 2023-06-03 20:32:07 · 582 阅读 · 0 评论 -
Maven多模块父项目Pom发布到Maven私服
一个父项目下Father面有3个子项目A、B、C。A和B是JAR包服务,C是接口sdk。当C提供给外部使用时对方也需要Father这个父POM(因为C指定了Father作为parent),这时候需要把Father父POM上传的私服供对方下载。下面两种方式可以灵活控制deploy的模块,避免不需要上传的模块也上传到私服上去。原创 2023-05-27 14:03:10 · 1772 阅读 · 0 评论 -
RestTemplate的ParameterizedTypeReference
RestTemplate的exchange方法返回值是ResponseEntity类型的返回值,具体返回值是用泛型定义的,但是如果返回值类型里面本身也有复杂类型泛型则必须要指定清楚,否则解析不出来。可以使用ParameterizedTypeReference这个类型定义返回值类型ParameterizedTypeReference reference = new ParameterizedTypeReference<BaseResponse<CancelOrderResponse>原创 2022-04-29 15:57:47 · 2752 阅读 · 0 评论 -
基于Callable或DeferredResult实现SpringMvc异步模式
SpringMVC的异步请求模式是Spring3.2就推出了,它是基于基Servlet3.0规范实现的,而此规范是2011年推出的,距现在已经有近10的历史了,可谓是非常非常成熟的一种技术规范了。SpringMVC的异步与同步的区别之前有写过关于对tomcat处理HTTP请求的理解的文章。提到tomcat中合理配置maxThreads参数(请求处理线程的最大数量)可以提高tomcat性能。但是当maxThreads参数因为CPU等条件限制到达最佳数值不能再增加时,提高单个线程的处理请求的速度又.原创 2021-09-15 20:51:01 · 152 阅读 · 0 评论 -
组件封装-获取泛型的类型的方式
在做一些组件封装的时候,例如最近接触的基于Redis存储封装的延迟队列消息组件,为了实现组件能够接受来自各种业务方不同的队列消息数据,组件中就可以使用泛型来定义消息主体数据的类型。在消费消息时又需要把序列化后的消息数据反序列化为对应的java类型的对象。队列消费者功能一般是基于回调机制实现,启动时会把消费监听实例注册进来。如果要在回调消费实例的消费方法时传递反序列化后的消息对象,就需要在延迟队列组件中实现消息的反序列化操作。这里就需要获取消息类型中定义的消息主体数据的泛型类型,然后反序列化为对象类型的对原创 2021-08-14 23:45:01 · 252 阅读 · 0 评论 -
@Aspect中AOP的通知类型
AOP的使用场景越来越多,例如之前的文章Spring中AOP应用——数据字段渲染,还有SpringBoot多数据源配置和使用都使用到了AOP,这里整理一下两篇文章技术实现中涉及到的AOP的通知类型:环绕通知和后置通知。@AfterReturning 后置通知方法无返回值 方法有参数,是目标方法执行的返回值,推荐参数类型定义为object类型, 参数名自定义但要与注解中的returning属性对应。@AfterReturning(value = "@annotation(com.fk.原创 2021-08-09 20:23:02 · 230 阅读 · 0 评论 -
Spring项目中基于Aspect的AOP实现数据字段渲染
业务场景:有一些表中的信息,例如门店名称,产品名称等数据存在变动的可能性,但是很多地方又要使用到这些信息。通常有两种方式使用这些信息保证数据实时性,在查询时对字段所在的表连表查询,但是仅仅为这种数据连表的成本太高了。 把字段冗余到各种表结构中,但是这种实现就无法保证字段数据的实时性了,一旦冗余就变成了快照信息。这篇文章要写的内容是第三种方式:基于注解动态渲染指定的数据字段。实现思路基于AOP的实现思想,在合适的时机对数据对象进行处理,处理逻辑通过特定注解字段的值做条件(对应连表查原创 2021-08-09 20:05:37 · 286 阅读 · 0 评论 -
Spring中的AOP——事务管理的实现和事务失效
其实Spring并不是直接管理事务,而是提供了多种事务管理器,他们将事务管理的职责委托给Hibernate或者JTA等持久化机制所提供的相关平台框架的事务来实现。Spring事务管理器的接口是org.springframework.transaction.PlatformTransactionManager,通过这个接口,Spring为各个平台如JDBC、Hibernate等都提供了对应的事务...原创 2019-11-29 18:28:47 · 298 阅读 · 0 评论 -
登录中的图片验证码功能实现
添加kaptcha依赖<dependency> <groupId>com.github.axet</groupId> <artifactId>kaptcha</artifactId> <version>0.0.9</version></dependency>自定义配置kaptcha的Producer@Configurationpublic class KaptchaConfig {原创 2020-12-09 08:44:09 · 530 阅读 · 0 评论 -
HttpClient发送Post请求————StringEntity 和 UrlEncodedFormEntity 的区别
一直用hutool的工具类做http调用,今天有空看了一下apache的httpclient,在实现带参数的post请求的时候看到有两个entity可以作为参数,再分别看了两个类在这做一下笔记。首先说StringEntityStringEntity extends AbstractHttpEntity implements Cloneable继承于AbstractHttpEntity...原创 2019-03-29 16:21:04 · 43264 阅读 · 5 评论 -
基于自定义注解实现拦截器
上一篇文章写了怎么实现自定义注解https://blog.csdn.net/qq_29569183/article/details/109310967在个拦截器中解析并使用注解@Target({ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)public @interface ApiIdempotent {}下面代码主要分析下如何分析注解1.handler转换为HandlerMethod 对象HandlerMe.原创 2020-10-27 15:43:28 · 546 阅读 · 0 评论 -
JavaWeb——过滤器和拦截器
过滤器Filter依赖于servlet容器,基于函数回调实现。是在请求进入容器之后,还未进入Servlet之前进行预处理。它可以对几乎所有请求进行过滤,但是一个过滤器实例只能在容器初始化时调用一次。使用场景:在过滤器中修改字符编码(CharacterEncodingFilter)、在过滤器中修改HttpServletRequest的一些参数拦截器依赖于web框架,例如SpringMVC框架。基于Java的反射机制实现,属于面向切面编程(AOP)的一种运用。拦截器是在请求进入ser原创 2020-10-27 09:47:16 · 642 阅读 · 0 评论 -
数据库datetime类型使用注解做转换
使用注解实现在不更改java数据类型的情况下转换时间类型数据的格式1.使用jackson包的注解-@JsonFormat,默认的springmvc消息转换器会生效注意时区属性设置timezone = "GMT+8" @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date receiveTime;2.使用fastJson包的注解-@JSONField @JSONField(...原创 2020-07-02 14:03:40 · 1185 阅读 · 0 评论 -
SpringBoot——Filter过滤器
过滤器的实现要实现javax.servlet包下的filter接口:配置方式分为注解方式和xml配置方式:Springboot中肯定是使用注解方式:@WebFilter注解1,@WebFilter()注解标注是一个filter2,value等同于xml配置的url-pattern,是过滤路径。dispatcherTypes 标识拦截的类型,默认为请求类型(REQUEST),此外还有...原创 2019-12-06 18:53:37 · 273 阅读 · 0 评论