Java
文章平均质量分 77
许你一个盒
个人博客主页:http://zhenxuexu.github.io
展开
-
FastJson 读取超大json文件引起OOM问题排查与解决
背景最近工作有一个需求,需要读取一个约2GB的json文件(存储了约3千万个json对象的集合),解析其中的每个json对象,并进行一些数据转换,最后把转换后的json对象存储到es中。json文件格式大概是这样的:[ { lng: 116.22 lat: 22.00, count: xxxx }, { lng: 116.22 lat: 22.00, count: xxxx }原创 2021-05-23 13:45:02 · 8309 阅读 · 3 评论 -
Spring Boot——读取属性文件的多种方法
前言在程序开发中,为了减少程序中的“硬编码”,我们通常会将一些信息放在属性文件中,再读取到程序中。Spring 提供了多种便利的方法帮助我们从属性文件中读取数据。一、属性文件加载程序默认加载application.yml(或application.properties)属性文件。如需要加载其它属性文件使用@PropertySource注解:例如: 加载user.properties文件@...原创 2018-11-03 20:03:08 · 611 阅读 · 0 评论 -
Spring Boot——通过profile配置不通过环境下的属性
前言在应用开发过程中,不同开发环境中,应用的配置各不相同,比如开发环境、测试环境和生产环境中的数据库连接等信息。当我们使用单个配置文件配置不同环境中的参数时,需要频繁的改变配置文件较为麻烦。在Spring中我们可以给不同环境配置不同配置文件,运行时只需配置profile参数便可切换配置文件一、不同环境配置文件可以将一些固定不变的配置信息设置在该文件中,例如:mybatis的相关信息。其他根据...原创 2018-11-03 00:28:02 · 355 阅读 · 0 评论 -
Mybatis插入数据返回递增主键
一、数据库增加自增长字段1、 PostgreSQL 数据库方法一: 将自动增长字段设置为Serial类型,该字段会在数据插入后自动增长,Seria类型的字段,数据库会自动创建一个序列,序列名默认为:表名_字段名_seq。方法二: 先创建序列名称,然后在新建表中为字段指定序列就可以了,该列需要int类型创建序列的语法:CREATE [ TEMPORARY | TEMP ] SEQUENCE...原创 2018-12-20 22:47:52 · 1113 阅读 · 0 评论 -
利用反射+策略模式优化过多的if else 代码
前言最近刚看完《设计模式之禅》,在写代码前总是想着能不能尝试用上一些设计模式。前几天看到一篇公众号推文利用策略模式来优化过多的if else代码,正好符合目前我面临的一个场景,作者使用一个枚举类来维护所有的策略,这样的话,没增加一个策略,都要去枚举类里增加相应的枚举常量,不太符合“开闭原则”。同时,随着策略的增加,这个枚举类源码的理解性也会变得越来差,也比较难维护。我通过注解+反射和策略模式做了...原创 2019-03-24 21:25:10 · 2374 阅读 · 0 评论 -
Java实现QPS、吞吐率限制
滚动阅读全文业务场景在一个项目中需要频繁调用一个第三API接口来实现业务功能,但是这个第三方接口有QPS和吞吐率的限制,如果超过限制将请求失败;故我们需要在我们的业务功能中加上吞吐率(吞吐率 < QPS)的限制, 当达到限制时让当前的请求等待到下一个可执行时间段执行。吞吐率实现吞吐率的限制是当前时段内(1S内)最多能处理的任务数量,超过限制必须等待;这个有点类似生产者-消费者模式...原创 2019-04-14 09:42:22 · 5154 阅读 · 0 评论 -
Spring Bean 初始化之InitializingBean, init-method 和 PostConstruct
概述从接口的名字上不难发现,InitializingBean 的作用就是在 bean 初始化后执行定制化的操作。Spring 容器中的 Bean 是有生命周期的,Spring 允许在 Bean 在初始化完成后以及 Bean 销毁前执行特定的操作,常用的设定方式有以下三种:通过实现 InitializingBean/DisposableBean 接口来定制初始化之后/销毁之前的操作方法;通...转载 2019-05-11 14:07:25 · 814 阅读 · 0 评论 -
Java动态追踪技术探究
来源:美团技术团队 作者:高杨引子在遥远的希艾斯星球爪哇国塞沃城中,两名年轻的程序员正在为一件事情苦恼,程序出问题了,一时看不出问题出在哪里,于是有了以下对话:“Debug一下吧。”“线上机器,没开Debug端口。”“看日志,看看请求值和返回值分别是什么?”“那段代码没打印日志。”“改代码,加日志,重新发布一次。”“怀疑是线程池的问题,重启会破坏现场。”长达几十秒的沉默之后:“据说,排查问题...转载 2019-05-27 22:30:04 · 388 阅读 · 0 评论 -
为什么ConcurrentHashMap不需要加锁?
我们知道,ConcurrentHashmap(1.8)这个并发集合框架是线程安全的,当你看到源码的get操作时,会发现get操作全程是没有加任何锁的,这也是这篇博文讨论的问题——为什么它不需要加锁呢?ConcurrentHashMap的简介我想有基础的同学知道在jdk1.7中是采用Segment + HashEntry + ReentrantLock的方式进行实现的,而1.8中放弃了Seg...转载 2019-05-27 22:37:39 · 831 阅读 · 0 评论