![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
xupeng874395012
这个作者很懒,什么都没留下…
展开
-
修改单例属性引发的血案
背景最近接触的一些系统中遇到一个问题,一个交易的服务对外提供了支付和退款两种能力,但是发现运行时交易的服务走了退款。原因是spring容器管理的一个对象service 属性运行时被改变,导致上下流程对不上的问题,多业务链路并发时引发运行时属性错乱,导致 支付和退款行为混淆下面是大体代码样例。记录下问题原因样例1、定义一个核心支付服务public interface CoreService { public BaseResult trade(TradeParam tradeParam);原创 2021-02-25 17:58:22 · 513 阅读 · 0 评论 -
fastjson定制序列化插件
背景在日常的开发过程中,对象序列化成JSON字符串的能力是很常用的,但是在实际使用过程中,或多或少的会有一些定制化的诉求,常规一些的序列化支持 fastjson提供了现成的序列化信息,直接指定使用即可 参考类 com.jd.fastjson.serializer.SerializerFeature。我的实际使用诉求是在序列化的过程中完成数据的脱敏工作,以保障诸如手机号 邮箱之类信息不被泄露,以下推荐两个可定制序列化插件 ,可以完成在序列化过程中针对key和value的定制处理。针对key的定制处理c原创 2020-10-30 10:08:54 · 403 阅读 · 0 评论 -
gson 反序列化后整形变浮点问题
public static void main(String[] args) { GsonBuilder builder = new GsonBuilder(); builder.setDateFormat("yyyy-MM-dd HH:mm:ss"); builder.registerTypeAdapter(new TypeToken<Map<String,Object>>(){}.getType(),new MapTypeAdapt原创 2020-07-23 21:12:11 · 1797 阅读 · 2 评论 -
Gson Map 处理问题笔记
情况描述 序列化 一个map对象使用Gson转换成字符串的时候,默认是处理成了空字符串,需要指定 java.lang.reflect.Type 的类型 这样才能序列化成功 反序列化 反序列化的时候指定的类型如果是Map接口类型 ,这个时候反序列化的时候会出现异常(com.google.gson.JsonParseException) 把指定类型调整为Map的实现类后可以反序列化成功。...原创 2018-07-13 11:03:12 · 561 阅读 · 0 评论 -
java 反射
java 的反射是一种运行时的自我识别技术,工作在运行时阶段,可以动态的创建对象、调用方法、获取该类的信息并进行动态处理、 从程序集中获取类型等。在我们开发过程中有着很大的应用, 对我个人而言,在开发共有的组件化的服务的时候总会使用反射解决动态化问题。本文简单的整理了下反射经常会用到的一些方法,后续再工作过程中应该会继续完善,也欢迎读者留言帮我完善反射知识,共同进步。基本实验对象package原创 2017-09-21 17:13:38 · 310 阅读 · 0 评论 -
Serializable 序列化接口
Serializable 诞生于JDK1.1版本 java对象实现此接口并生成 private static final long serialVersionUID = -4825372023936626648L;序列号 在对象初始化之前jvm就已经完成了给该静态常量赋值工作。在目前多应用远程调用很常见的情况下,经常会出现因为序列号不一致导致的序列化问题,直接的效果就是调用失败原创 2017-09-19 16:41:22 · 302 阅读 · 0 评论 -
fastJson序列化和反序列化 中空字符串的处理
json在我们开发的过程中被大量的使用,有的时候我们需要在序列化和反序列化的时候对某些字段或者某种类型的值做特殊对待。比如有时候没有值的数值类型默认值是0,或者序列化的时候为了节省空间把空值给过滤掉,还有的用于restful的接口的时候会需要把空字段序列化出来,反序列化的时候也需要出来等等。 我这边的总结来源场景是restful接口的,目的是在任何处理的过程中都要带着空字符串的属性key原创 2017-06-23 12:08:20 · 11428 阅读 · 0 评论 -
使用Jackson的@JsonFormat注解时出现少八个小时
使用Jackson的@JsonFormat注解时出现少八个小时 比如数据库存的日期是2015-01-05,转成json则变成了2015-01-04 解决办法: @JsonFormat(pattern=”yyyy-MM-dd”) public Date getRegistDate() { return this.registDate; } 改成 @JsonFormat(patt转载 2017-03-13 14:28:51 · 1237 阅读 · 0 评论 -
springboot+springfox+Swagger 实现项目的restful文档的自动生成
本文不做赘述,只是简单的知道读者如何快速的使用第一步 在springboot项目的启动根目录也就是springboot的启动类同包下创建类ApplicationSwaggerConfig代码如下import org.springframework.context.annotation.Configuration;import springfox.documentation.swagger2.ann原创 2017-03-16 11:10:32 · 1193 阅读 · 0 评论 -
fastjson序列化数据为空的字段如何处理的问题
背景:今天同事遇到一个问题,接口返回数据的时候空数据字段的属性直接被过滤掉了,基于当前问题的解决过程做些手札 解决步骤 1、首先定位问题所在,确定是json数据序列化输出的时候过滤了属性值为空的字段。 2、检查当前系统源码中的json序列化输出的默认方案是什么,源码在哪。实现方案是什么样子的。我们的系统是基于webx的实现的 源码定位阶段参考了Webx Json输出源码这篇文章,这个地方是当原创 2016-12-27 12:22:20 · 10611 阅读 · 0 评论 -
字符串模板替换
1、使用正则便打算来替换 public static String renderString(String content, Map<String, String> map){ Set<Map.Entry<String, String>> sets = map.entrySet(); for(Map.Entry<Stri...原创 2019-02-15 11:02:23 · 602 阅读 · 0 评论 -
全局唯一ID生成服务设计
一般在一些支撑大规模复杂业务中,都会有生成全局唯一的业务ID的诉求,本文就此ID生成服务的诉求来展开在实际业务系统中,一般会对ID生成服务有哪些要求,下面我们简单介绍几点全局唯一:在限制周内必须保证不能重复系统高可用:在特殊情况下 尽最大可能保证系统可用高并发高性能:此类基础服务,支持业务众多,一般调用量都比较大,同时要求性能很高使用简单:在当下的大环境中一般提供一个RPC服务输出可读...原创 2019-04-11 14:21:16 · 891 阅读 · 0 评论 -
sun.misc.Unsafe 笔记
858 /** 859 * Atomically update Java variable to <tt>x</tt> if it is currently 860 * holding <tt>expected</tt>. 861 * @return <tt>true...原创 2019-04-11 16:25:26 · 162 阅读 · 0 评论 -
RateLimiter 笔记
关于谷歌的RateLimiter限流的使用工具类记录package org.limit.example;import com.google.common.util.concurrent.RateLimiter;import java.util.concurrent.ConcurrentHashMap;/** * @Title: RateLimiterUtil * @Package...原创 2019-04-12 14:31:07 · 800 阅读 · 0 评论 -
DBCP连接池 操作sql超时控制
jdbc.url connectTimeout=5&amp;socketTimeout=5&amp;autoReconnect=true<sqlMapConfig> <settings cacheModelsEnabled="false" enhancementEnabled="true" lazyLoadingEna...原创 2019-04-09 16:20:06 · 1323 阅读 · 0 评论 -
类加载器与双亲委派模型
java类如何加载双亲委派自定义一个java.lang.String是否可以被加载起来原创 2019-04-09 16:21:28 · 99 阅读 · 0 评论 -
定制MVC
MVC(模型(model)-视图(view)-控制器(controller)的缩写)要定制一个MVC ,首先要了解MVC的关系 这张图片是百度百科上使用的,通过如图我们可以得到以下几点用户输入 业务处理 数据模型 输出视图从一个HTTP请求的过程中来谈这个问题的时候。 输入输出就是一些列的报文,服务器端负责解析请求报文,而浏览器负责解析响应报文。 再业务处理的过程中,请原创 2019-04-09 16:23:05 · 165 阅读 · 0 评论 -
系统熔断
最近看这方面的信息 简单了解了下 写下随笔背景介绍基于服务拆分之后,各类远程调用横行的年代, 我们很容易出现的系统层级情况就是一个业务支撑需要N多服务,简单说下,图网上有的是就不贴了。假设有三层应用调用 A-B-C ,A对外提供列表服务,需要N个B和M个C,同时B也需要X个C,我们假设一个调用链路中的某个C系统故障 ,那A或者B 调用C时 就会被hold住,从而无法正常响应, 以此为例 A机...原创 2019-05-09 16:24:52 · 894 阅读 · 0 评论 -
tomcat如何支持web应用引发的思考
此文属于基于现有工作经验的一个思考 ,纯属YY设想,无实际源码实现参考依据思考命题tomcat是如何支持一个web系统启动并且正常提供服务的现状我们开发一个web系统,然后部署到tomcat容器中,就可以正常提供服务了,比如Hellow Word我们访问http://localhost:80/ 就可以看到了,这就是一个最简单的web服务思考1、不管是从系统日志还是从访问地址上看,我们...原创 2019-05-09 17:21:42 · 155 阅读 · 0 评论 -
前后台时间类型数据的处理
前台传递给后台在web项目的controller中使用如下代码 @InitBinder public void initBinder(WebDataBinder binder) { SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd"); date原创 2017-06-26 13:49:35 · 4048 阅读 · 0 评论 -
java 的基本(内置)数据类型
java基本类型四个整数类型(byte、short、int 、long) 两个浮点类型(float、double) 一个字符类型(char) 一个布尔类型(boolean)byte内存中8位 有符号(256个数字) 占1字节 最小值是-128(-2^7) 最大值是127(2^7-1) 默认值是0short内存中占16位 有符号 占2个字节 最小值是-32768(-2^15)原创 2017-06-13 11:11:19 · 478 阅读 · 0 评论 -
transient
在开发过程中,我们总会遇到在一个对象序列化的时候,某些字段是不能进行序列化的,比如密码信息等等,这个时候我们可以使用transient关键字来修饰当前这个属性,这时候该字段就不会参与序列化的过程了。原创 2017-07-12 11:31:42 · 230 阅读 · 0 评论 -
org.apache.commons.lang.StringUtils方法讲解
简单介绍下isNotEmpty和isNotBlank的区别 测试代码如下 String emptyTest = " "; String blackTest = "a b"; System.out.println(StringUtils.isNotBlank(emptyTest)); System.out.print原创 2017-03-14 17:05:19 · 3140 阅读 · 0 评论 -
ThreadLocal
ThreadLocal线程绑定,管理单一无状态资源,存储直到当前线程销毁不解决并发访问的问题,在并发场景应用此类作为数据存储会存在问题,比如说用当前类去做服务器端的用户信息存储的时候,并且有10个用户同时登陆当前系统,这个时候每一个操作人的操作过程服务器端通过threadlocal获取到的用户对象都有可能是这10个登录人中的其中一个,会引起数据混乱ThreadLocal原创 2017-03-14 13:24:23 · 316 阅读 · 0 评论 -
java spi基本demo
在项目的配置文件目录下/src/test/resources 创建/META-INF/services 在这个文件夹下创建com.demo.intf.SpiService文件 文件的内容com.demo.intf.impl.SpiServiceImpl 操作完成之后执行下面的测试代码public class PopTest { @Test public void test()原创 2017-03-23 16:00:52 · 614 阅读 · 0 评论 -
工作中的多线程随笔
如何开发线程安全的Servlet 1、实现 SingleThreadModel 接口 Public class Concurrent Test extends HttpServlet implements SingleThreadModel { ………… } 2、同步对共享数据的操作 Public class Concurrent Test extends HttpServlet { ………原创 2016-12-28 16:03:16 · 275 阅读 · 0 评论 -
String方法调用面试题引发的思考
public class TestString { public void fun(String str) { str = " 张三 "; } public static void main(String args[]) { TestString t = new TestString(); String str = " 李四 "原创 2016-12-23 16:00:00 · 742 阅读 · 3 评论 -
collection和map
这部分的文本摘自其他网络博客 Collection接口,包含list和set子接口 Collection和Map接口之间的主要区别在于:Collection中存储了一组对象,而Map存储关键字/值对。 在Map对象中,每一个关键字最多有一个关联的值。 Map:不能包括两个相同的键,一个键最多能绑定一个值。null可以作为键,这样的键只有一个;可以有一个或多个键所对应的 值为null。当ge原创 2016-12-23 14:59:43 · 323 阅读 · 0 评论 -
spring jdbc是如何实现驼峰和下划线的自动映射的
今天在看写代码的时候突然发现,在类和数据库字段之间没有做过任何的映射关系,但是数据会自动的映射好 以下是spring代码的具体实现直接贴代码 讲述映射实现的过程 关注下BeanPropertyRowMapper这个类protected void initialize(Class<T> mappedClass) { this.mappedClass = mappedClass;原创 2016-11-03 14:07:43 · 11311 阅读 · 0 评论 -
自定义注解在拦截器中的应用
java自定义注解 Java注解是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能。 注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用。包含在 java.lang.annotation 包中。在自定义注解拦截器的开发过程中 1、@Retention(RetentionPolicy.RUNTIME) 指定该注解可以被反射获取到 2、@Target原创 2016-09-06 12:08:36 · 853 阅读 · 0 评论 -
json-lib 的maven dependency
项目中要用到json-lib,mvnrepository.com查找它的dependency时结果如下: xml 代码<dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <转载 2017-03-25 09:59:17 · 370 阅读 · 0 评论 -
Stringbuffer的线程安全是怎么实现的
public synchronized StringBuffer append(String str) { toStringCache = null; super.append(str); return this; }直接通过synchronized 关键字来实现同步操作原创 2017-05-23 10:11:26 · 14636 阅读 · 3 评论 -
hashMap 分析
hashMap的get和set方法的简单处理如图:原创 2017-05-23 09:57:33 · 328 阅读 · 0 评论 -
java 中String 经常会使用到的方法
目前大部分的情况下,程序员的开发过程中有好多的代码是通过idea的提示完成的,以至于很多的方法我们天天用,但是却不知道怎么写,成了最熟悉的陌生人,一旦失去了开发工具,我们的能力就被处处受限。因而在闲暇之余,把经常用的方法写写整理下。public class StringMethod { public static void main(String[] args) { Strin原创 2017-07-12 11:01:42 · 296 阅读 · 0 评论 -
JAVA字符串格式化-String.format()的使用
常规类型的格式化String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处。format()方法有两种重载形式。format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串。format(Locale l转载 2017-06-02 16:05:02 · 392 阅读 · 0 评论 -
SimpleDateFormat 时间格式化规范
因为同事问到了这个问题,当时我也没有很明确的答案,然后写了下测试然后做下笔记,防止自己忘记,也希望可以为跟我拥有同样疑惑的朋友解惑。关于 SimpleDateFormat 的非线程安全问题及其解决方案 感觉这篇文章说的还不错,就一起整理到这里了代码执行时间 2017-05-17 17:28测试代码如下public class SimpleDateFormatTest { public st原创 2017-05-17 17:34:30 · 646 阅读 · 0 评论 -
Apache POI 导出Excel笔记
本文主要记录问题和解决方案,操作的的教程有时间再整理背景 导出数据的部门内容要指定Excel的格式,方便使用者筛选、分析、统计等 工作中的坑 导出工作基本接近尾声了,但是存在一种现状,导出的数值类型的数据信息,在Excel中是以文本呈现的,但是编辑当前单元格数据之后就变成正常的了,变化过程如下:10000---》10,000.00有个同事提出在Excel中以文本写入的资源在呈现的时候就会出现这原创 2017-05-25 18:18:45 · 529 阅读 · 0 评论 -
javamock生成对象
import java.lang.reflect.Field; import java.lang.reflect.ParameterizedType; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.M原创 2017-05-23 20:02:38 · 2209 阅读 · 0 评论 -
基于模板动态组装数据
对象的动态构建 import java.util.Iterator;import java.util.Map;import java.util.Set;import org.springframework.cglib.beans.BeanGenerator;import org.springframework.cglib.beans.BeanMap;public class原创 2017-05-23 20:01:51 · 854 阅读 · 0 评论 -
CountDownLatch 使用示例
简单介绍下使用CountDownLatch 的使用方法 CountDownLatch 是在开始指定线程数,然后通过 latch.countDown();终止一次线程数-1,最后执行完成通过 调用 latch.await(); 在这个方法之后,所有的线程都执行完毕。 我的使用场景是异步的数据组装。下面贴出一些简单的实例代码,基于此代码可以参考 CountDownLatch 的使用packa原创 2017-05-23 18:42:17 · 428 阅读 · 0 评论