![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 55
Richy Liu
非淡泊无以明志,非宁静无以致远
展开
-
IDEA 代码注释模版
公司SVN提交代码时,检查代码注释比不能少于20%,好吧,凑一下字数。* * @author liuwr * @createTime $DATA$ $TIME$ * @desc $DESC$ * $VAR1$$params$ * @return $returns$ * <p> * Modification History: * Date Author Version Description * -------------原创 2022-04-06 16:06:25 · 429 阅读 · 0 评论 -
使用Semaphore模拟排队蹲坑
使用Semaphore模拟排队蹲坑什么是Semaphore怎么使用Semaphore使用Semaphore模拟排队蹲坑大概流程:原代码输出结果什么是SemaphoreSemaphore 翻译成字面意思为 信号量,Semaphore 可以控制同时访问的线程个数,通过acquire() 获取一个许可,release() 释放一个许可。如果没有许可就将进行等待状态。流程如下图所示。怎么使用Semaphore1:创建一个Semaphore,在构造函数里指定许可总数量。 Semaphore holes=n原创 2021-09-24 12:46:35 · 291 阅读 · 0 评论 -
文档工具- 利用Swagger反向工程输出API接文档
背景文档与设计正常的流程是:服务接口文档 ->服务设计开发。但是,经常性的接口有改动,开发人员不会再去修改文档,导致接口与文档对应不上。当然,真正的原因是领导要检查项目产出。需要使用反向工程快速输出文档。因为Api的数量有点大(有500多个),并且这种事情基本上每个项目都要做一次。那就整个工具快速导出吧。流程获取swagger ApiDoc点击以下图所示链接,获了ApiDoc报文。Api 报文如下,有点长,我们先把它复杂出来。工具使用1:工具是使用SpringMVC开发的一个接原创 2021-03-28 12:13:34 · 429 阅读 · 1 评论 -
SpringCloud 之 Feign最佳实现
我心目中的Feign是这样子的,上蓝图。为什么要这样子呢?1:习惯了这样子的调用方式,不想改变了。。2:避免提供者与消费都云配置访问的方式,并者是一致的。消费者与提供者不好沟通。那么要怎么云实现呢?**1:**创建独立的接口层项目。消费者与提供者项目引用接口项目。如下图**2:**在接口项目,创建接口。如下, 把访问方式的注解都加在这里,包括路径,参数。@RestControllerpublic interface IController1 { @RequestMapping(原创 2021-03-23 23:37:30 · 269 阅读 · 0 评论 -
SpringCloud-Eureka集群实践
SpringCloud-Eureka集群实践整体思路一、Eureka服务器注册中心配置二、服务提供方配置三、服务消者 配置四、运行五、固障测试关掉Eureka注册中心2再次关掉服务提供方2再次关掉Eureka注册中心1(两个提供方都关掉了)整体思路1:两台Eureka服务,相互注册。2:两台服务提供方,分别注册到两台Eureka服务器。3:两台服务消费者,分别指定两台Eureka服务器。代码框架代码放git共享 https://github.com/RichyLiu0/EurekaTest原创 2021-03-20 11:48:29 · 162 阅读 · 4 评论 -
Java项目多开
有时候为了模拟集群,并发等需要,经常在有一个应用多开的情况。那要怎么做呢?一:首先你需要多份配置文件。把配置文件拷配多份,然后修改端口等配置信息。二:在IDEA步骤1:步骤2:复制启动文件,并配置相关参数。步骤3:直接启动。...原创 2021-03-18 15:08:48 · 630 阅读 · 2 评论 -
基于nfs文件服务器方案
基于nfs文件服务器方案背景nfs 网络拓扑服务端配置1:安装nfs2:启动3:服务端配置4:客户端配置PS背景应用为实现负载均衡,高可用。同一个应用需要部署多台服务器。不同节点的应用需要实现数据共享。其中,数据可以过通数据库实现,文件可以则通过 nfs 实现。nfs 网络拓扑如下图所示,nfs服务端为文件服务器。客户端为为多台应用部署的服务器,为nfs客户端。服务端配置1:安装nfs服务端与客户端都要安装,命令如下:yum install nfs-utils2:启动service原创 2020-12-15 10:36:53 · 371 阅读 · 2 评论 -
mybatis mapper 文件不要有 -- 或 #的注释
mybatis mapper 文件在未尾不要有注释代码原因:1:日志产生的代码可读性差(很多日志支持得并不好,并不会换行),拿出来的语句甚至不能直接使用。2:mybatis 插件sql解释支持问题。比如 mybatis plus 分页插件的解释,直接在后面加 limit 语句(正确逻辑应该是加 回车 再加 “limit n , m”)。以下是我在生产系统发现的。 <select id="getPages" resultType="com.ly.mp.swcas.main.entities.原创 2020-10-12 22:18:20 · 511 阅读 · 0 评论 -
MyBatis 分页查询优化实例(用好子查询,事关功倍)
序如下图所示的这种列表应该是系统里最常见的了。随着数据的增长,查询的速度也将越来越慢,那就需要优化了。数据库使用的是mysql, 分页命名用的是mybatis plus 的paging插件。优化的手段加上条件限制,像这个页面应该加上时间范围限制,只能查一个月的或者一年的数据。SQL查询优化。今天重点是讲怎么去优化SQL。SQL优化一:优化前1:Mapper 代码 <select id="getPages" resultType="com.ly.mp.swcas.main原创 2020-09-12 16:13:32 · 3800 阅读 · 0 评论 -
web导出百万数据的方案
序 业务要求系统一次性把业务数据导出来。 系统的为了稳定性考虑,限制数据的导出上限为10000,避免数据库卡死,网络卡死,页面无响应等问题。 实际上系统不支持大数据量导出,给业务带来了很大的麻烦。 本文将针对大数据导出进行方案分析现实现。分析目前做的系统的架构大致如下。从框架来看,每一个层之前的交互都有超时间。1:DB超时时间为60秒。2:Biz与Service层是通过dubbo的,超时时限为120秒。有包大小的限制 8M。另外还有断路器。3:nginx的超时为60秒。以上原创 2020-09-07 15:24:10 · 2079 阅读 · 2 评论 -
HashMap的灵活应用 —— group by
序写了一段代码,感觉很简捷,高效,所以把它记录下来。业务:1:拿到一个供应商通知的信息(集合)。2:根据供应商进行分组,把供应对应的数据发给供应商(一封邮件)。实现public RestResult CreateNotice(Date dStart, Date dEnd) throws ParseException { RestResult rs= new RestResult(1,"执行成功"); List<OldPartBack> lst = m原创 2020-08-14 17:17:07 · 385 阅读 · 0 评论 -
mysql编码问题 Incorrect string value
错误:批量插入数据,部署报错,如下:Incorrect string value: ‘\xE7\xA8\x8B\xE5\xBA\x8F…’ for column ‘course’ at row 1原因:数据表字段对应的编码是gbk,java mysql数据库连接字符串配置的是utf-8。因为utf8长度比gbk长,理论上是不能转换成gbk的,所以报错了。ps:UTF-8: Unicode TransformationFormat-8bit,允许含BOM,但通常不含BOM。是用以解决国际上字符的一原创 2020-08-04 14:00:35 · 605 阅读 · 0 评论 -
webservice cxf客户端自定义参数
序WebService真是烦,为了不想写那些烦人的适配代码,使用了CXF 生成的客户端,但遇到要填自定义参数的时候,却无从入手。。。经过几天的研究,各种尝试,解读原码。终于把问题解决,项目终于可以顺序进行下去了。。遇到的问题1:SAP 提供的webService 要求输入账号验证信息,如下图所示,但是使用生成的CXF客户端却没有一个属性可以配置。问题解决整个代码如下(已经脱敏):实现的是一个定时把需要地接的数据,通过webservice 发送到目标系统。package com.ly.mp.s原创 2020-07-28 00:07:23 · 859 阅读 · 0 评论 -
java wsdl 参数必填设置
原来的wsdl<xs:complexType name="SyncPartTraceProcess"><xs:sequence><xs:element minOccurs="0" name="OrderMasterData" type="tns:partTraceWrap"/></xs:sequence></xs:complexType><xs:complexType name="partTraceWrap"><xs原创 2020-07-16 09:22:38 · 2250 阅读 · 0 评论 -
webservice 实例 创建与 调用
webservice 实例 创建与调用 序webservice 选型配置代码webservice 接口层接口实现实体webservice 挂靠配置启动服务测试服务测试:测试地址客户端生成环境配置代码生成序对接SAP系统,指定要用webservice 做对接。不然打死也不用webservice,感觉webService也实现不怎么流行了, 过程中遇到了不少问题。就java webservice而言,框架就有不下十种。网上的教程更是五花八门,零零碎碎,并且很多误导。 本博将记录下项目里用的webservi原创 2020-06-26 09:19:26 · 733 阅读 · 0 评论 -
AOP-通用的API日志实例
AOP-通用的API日志实例 序分析方案AOP实现最后序最近项目里整了一个通用的API日志。感觉挺不错的,整理一下分享出来。接口大概时间图如下:分析除了【业务处理】,其它的处理都与业务无关。可以考虑把通用的部分抽离出来,【业务处理】单独处理。可以用两种方案去处理。方案**1:**使用抽象类。提供一个方法,从【开始】处理到【结束】。【业务处理】设一个抽像方法(无实现)。每个接口都继承抽象类。接口类重写抽业务处理抽象方法。**2:**使用AOP,开发人员只管【业务处理】。通过AOP的方式在【业原创 2020-06-23 01:43:49 · 1162 阅读 · 0 评论 -
Java对象创建与销毁过程 笔记
什么是java对象包括java的基础类型、自定义Class 定义的变量。对象的创建过程举个例子,Object o= new Object() 的创建过程是怎么样的呢?如下图所示。首先,申请空间。创建对象。已创建对象地址指向变量。对象的结构对象的结构一般分为三部分:Mark World。mark wold存储了对象的锁信息,偏向锁状态,分代代年龄,Hash Code等信息...原创 2020-04-04 09:05:22 · 1047 阅读 · 1 评论 -
Java GC原理 笔记
GC的基础知识1.什么是GCGC 的全称是Garbage Collection,垃圾回收。JAVA虚拟机引入自动内存回收机制后。开发人员只管使用内存,无需关注内存的清除工作,使编程变得更简单,JAVA开发的系统更加健壮。2 什么是垃圾方法执行完后,方法内定义的变量for , each while 执行完当前轮循后, 循环里的变量2.如何定位垃圾引用计数(Referenc...原创 2020-04-03 10:48:58 · 1025 阅读 · 2 评论 -
通用的报表缓存设计(Spring AOP + Redis)
通用的报表缓存设计项目背景现状态方案代码实现注解AOP缓存(关键)通用的条件实体通用的结果实体业务调用(部分)测试结果:第一次第二次测试结果项目背景1:用户群体大,2:业务计算量大,计算逻辑复杂。现状态1:主面页面,嵌套多个报表,部分报表加载时间长。2:项目已经临近开发完成,准备移交测试。3:如果压力测试必然会死得很难看。方案针对目前的情况,我准备了一个优化方案1:使用Redi...原创 2020-03-24 15:09:56 · 2927 阅读 · 6 评论 -
JAVA 浮点类型的坑
背景今天在项目里踩到了个坑,就是浮点类型的四则运算后,发现结果不是预期的。上代码:public class DateTypeApplication { public static void main(String[] args) { System.out.println(2.43 +0.031); }}预期结果:2.461实际结果:2.4610000...原创 2020-03-17 23:39:24 · 1577 阅读 · 0 评论 -
基于Spring JDBC的ORM
史上最简单的ORM框架前言代码实体注解主键注解数据访问层分页实体层PS应用EntityDAO前言翻了以前搭的框架,发现了一段不错代码,基于Spring JDBC的一套ORM。跟大家分享一下。感觉很适合学习。如果有不懂的地方,给我留言代码实体注解package jum.utility.Comments;import java.lang.annotation.Documented;im...原创 2020-03-13 22:49:35 · 1551 阅读 · 2 评论 -
代码重构实战之(1)日期转换转换方法
@TOC前言这个代码是我负责的项目拿出来的,这个方法是框架里的一个基础类里的方法。主要作用是:把字符串转成日期。代码引入public static java.util.Date formatDate(String strValue) throws ParseException { Pattern pattern1 = Pattern.compile("^\\d{4}-\\d{2}-\\...原创 2020-03-12 00:55:06 · 1592 阅读 · 3 评论 -
IDEA 代码分析工具
IDEA 代码分析功能分析工具使用步骤总结分析工具使用步骤1) 打开 Analyze->Inspect Code.2)选择分析范围,如下图所示。3)分析结果如下4)以我项目的情况,我一般只关注 java里面的问题。展开折叠内容,可以一个一个查查,一些类型是可以全部处理。比如1:接口方法定义成public类型的。2:定义了变量从未使用的。具体情况具体分析吧。总结感觉...原创 2020-03-04 15:51:16 · 8189 阅读 · 1 评论 -
Spring MVC日期格式的一些问题以及思考
Spring MVC日期格式的一些问题以及思考前言问题的根源经历与思考第一步第二步第三步第四步总结前言感觉java的日期类型的设计真地很糟糕,另外很多框架对日期的支持也不太完善,我是这么认为的。所以在使用的过程中遇到很多问题。问题的根源1:日期类型包括涉及到时区,不同地区对应不同格式。2:不同的业务需求,需要的时间精度不同。3:相同地区,多种不同的时间格式。如 2020-01-01跟...原创 2020-03-03 23:46:42 · 336 阅读 · 0 评论 -
Spring MVC 传参类型
服务层代码import io.swagger.annotations.Api;import io.swagger.annotations.ApiOperation;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.*;...原创 2020-02-29 13:43:04 · 1686 阅读 · 0 评论 -
java程序发布经验分享
java程序发布经验分享布署难题解决方案Shell脚本Shell脚本解释总结布署难题在日常的开发工作中,程序的不可避免的,但却又是经常出会问题的环节。比如:1:配置文件提交的问题,开发环境的配置与生产的不一致。开发团队不知道生产的配置长什么样子。2:打包时不小心提交多的配置文件,容易造成配置文件覆盖。3:布署步骤多,容易漏掉,或者执行顺序不对。4:布署的人多而杂。以上是我总结了团队的...原创 2020-02-25 15:35:25 · 170 阅读 · 0 评论 -
Java ThreadLocal应用
Java ThreadLocal应用定义简单实例输出结果结果分析定义使用ThreadLocal定义的变量,为每一个线程都提供一个线程独立的副本。简单一点,一个线程一个单例。简单实例import java.util.Random;public class ThreadLocalTestMain { public static void main(String[] args) thr...原创 2020-02-19 23:47:46 · 143 阅读 · 1 评论 -
双检查 单例模式
单例模式的双检查应用场景代码引入解释应用场景多线程创建单例,避免并发重复创建对象。代码引入public class DoubleCheckSingleton { private volatile static DoubleCheckSingleton _obj; // 标识1 private DoubleCheckSingleton(){} public ...原创 2020-02-19 16:59:51 · 325 阅读 · 0 评论 -
Mybatis 调用 带返回值 的存储过程
Mybatis Plus 调用Oracle存储 返回索引 Cursor什么要写这篇博客存储过程Mapper.xmlEntityMapper.javaBiz什么要写这篇博客mybatis 调用oracle 存储过程,返回一个表。这样的景场用得比较少,我用了mybatis这么长时间,还第一次这么用。尝试过程也是比较痛苦,网上资料少不说,很多配置拿下来,也是跑不起来。。最后自己不停地跟据myba...原创 2020-02-16 23:42:31 · 1507 阅读 · 0 评论 -
煮方便面谈 CountDownLatch
CountDownLatch使用 多线程 控制CountDownLatch用法解释:代码参数:实例:代码实现:CountDownLatch用法解释:CountDownLatch要是控制多线程操作时,等待多线程执行完后,再执行下去。举个例子,冲泡面,需要以下3个步骤A:装水到电锅,打开电源,等3分钟B:拆方便盒,放调味料C:倒开水到方便面盒。其中A跟B是可以同时进行的,C则需要依赖A,...原创 2020-02-16 00:14:07 · 2214 阅读 · 0 评论 -
Java公平锁与非公平锁
Java公平锁与非公平锁定义实例非公平锁之synchroized实现非公平锁之ReentrantLock实现公平锁 ReentrantLock实现性能测试性能测试场景测试结果结论定义当程序使用多线程里,难免有多线程争夺资源的情况。而资源只能被一个线程独占使用,至于资源怎么分配,就涉及到非公平锁与公平锁了。非公平锁:非公平锁的资源的分配是随机的,看谁先抢到就给谁。可能会出现一个线程长期霸占资源...原创 2020-02-10 22:02:26 · 1764 阅读 · 0 评论 -
Java悲观锁与乐观锁
Java悲观锁与乐观锁锁的目的实例悲观锁实现乐观锁实现总结锁的目的多线程编程如有共用资源的使用时,需要保证数据安全,资源需要同步处理。处理资源的手段可以有:互斥同步与非阻塞同步。实现分别对应:悲观锁与乐观锁。实例开20个线程进行计数,每个线程计算到10000。分别使用悲观锁与乐观锁来实现。悲观锁实现悲观锁是主要使用synchronized实现,通过锁住对应的对象,独占资源的方式。de...原创 2020-02-09 16:30:53 · 4897 阅读 · 0 评论