JAVA
文章平均质量分 56
Gogym
热爱生活,热爱技术。
展开
-
logback 的详细配置与需要注意的细节
logback是在java中是用得非常多的日志框架。网上相关介绍也非常多。本篇意不在于logback如何配置,在于提醒在配置过程中容易出现的错误。如何配置也唠叨一下吧:1、导包,用1.2.3的版本<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-core --><dependency> <groupId>ch.qos.logback</groupId>原创 2021-05-18 16:14:59 · 1939 阅读 · 3 评论 -
java NIO的空轮询bug 以及Netty的解决办法
这个bug是指java的NIO在linux下selector.select()时,本来如果轮询的结果为空并且不调用wakeup的方法的话,这个selector.select()应该是一直阻塞的,但是java却会打破阻塞,继续执行,导致程序无限空转,造成CPU使用率100%这个bug只出现在linux系统下,因为linux下NIO底层使用的是epoll来实现的,而java的epoll实现存在bug,导致selector出现了这种轮询为空却唤醒的情况。windows下NIO是使用的poll来实现select.转载 2021-01-28 11:38:06 · 1175 阅读 · 0 评论 -
java 通过main方法调试maven项目
有时候我们为了快速调试或者验证某些方法。可能需要直接使用Main方法去执行。当我们使用main方法去调试maven项目时,可能会遇到这么一个问题,就是pom.xml里面到依赖无法引进来。运行时出现依赖找不到的错误。这篇文章记录一下怎么解决这个问题,方面我们调试。直接看代码吧举个例子,用maven工程调试logback日志的打印。一、首先看看pom.xml,非常简单,就几个依赖。<?xml version="1.0" encoding="UTF-8"?><proj原创 2021-01-15 16:41:26 · 897 阅读 · 1 评论 -
java 概率工具类,比如随机立减优惠概率
开发中经常会计算概率。比如支付场景,支付100元立减0.1~1元,要在其中设置不同的概率,比如设置90%是立减0.1元,这个时候就需要用到概率工具类。废话少说,看代码,直接用:import java.util.*;import java.util.Map.Entry;/** * 随机数工具类 * * @author gogym * @version 2017年8月30日 * @see ProbUtil * @since */public final class Pr.原创 2020-08-13 11:47:41 · 1060 阅读 · 0 评论 -
解决websocket 报 Could not decode a text frame as UTF-8 的问题
当你使用websocket传输数据时,偶尔可能会出现下面的错误websocket Could not decode a text frame as UTF-8网上很多其他文章一上来就介绍什么是websocket,数据协议等等,对解决问题没有多大帮助。有一些文章说要改开头数字10000001等等,很多同学不知所云。下面说说个人的经验,不一定对,希望对大家有个帮助。首先如果你使用的是相对成熟的websocket框架的话,一般不会出现这个问题。而出现这个问题的原因,绝大部分是客户端和服务原创 2020-07-28 11:03:46 · 6690 阅读 · 6 评论 -
java 自定义高性能的ArrayList集合
java本身有很多集合可以用,比如 ArrayList,LinkedList、copyonwritearraylist等等。这些集合各有不同的使用场景,性能也有些差异。日常来说足够用了。本文是介绍通过数组实现ArrayList。相比jdk提供的ArrayList,性能会好一些,胜在简洁,使用方式与jdk提供的一致。直接下面看看代码吧以下代码,拿来即用/** * Licensed to the Apache Software Foundation (ASF) under one or m.原创 2020-07-28 10:29:48 · 345 阅读 · 0 评论 -
java ThreadPool线程池的使用,线程池工具类
实际上java已经提供线程池的实现ExecutorService。为了更方便的使用和管理。这里提供一个线程池工具类,方便大家的使用。直接看看代码:使用public static void main(String[] args) { //实例化一个固定数目的线程池。具体参考类的构造方法 ThreadPool threadPool=ne...原创 2020-03-30 09:24:20 · 1015 阅读 · 0 评论 -
java AES对称加密,微信aes解密,对应js aes加解密
AES是对称加密算法,顾名思义就是加密和解密的密钥是同一个。更多的详情可以先百度了解一下,这里不多介绍了。直接看代码如何使用。为了更好的兼容不同的算法,先添加一个辅助包 <dependency> <groupId>org.bouncycastle</groupId> <artifactId...原创 2020-03-30 09:10:43 · 690 阅读 · 0 评论 -
getty 又双叒叕更新啦,一个长得有点像netty的网络框架
getty 又双叒叕更新啦!!!本次更新主要是添加了UDP的支持。。。getty是基于java nio(俗称nio1)封装了UDP,借助getty本身的架构设计,getty udp的性能表现也非常不错基于getty良好的设计模式,getty udp的使用方式与tcp差别不大。唯一的区别就是需要指定socketChannel为UDP。默认不指定是TCP需要指定UDP的消息编解...原创 2019-12-18 16:55:45 · 877 阅读 · 0 评论 -
java spring boot 完全纯代码配置mybatis,解放xml
Mybatis是一个使用广泛的ORM框架,相信大家都使用的很熟练的。但绝大部分朋友应该都使用XML进行配置。在springboot中,为了方便或者减少xml文件的数量,也可以选择完全通过代码来配置mybatis。下面就来说说如果通过java代码配置mybatis。配置起来也非常简单,只需一个类,而且不容易出错。首先把原来配置mybatis的xml文件删除,然后添加下面这个类:通过spr...原创 2019-10-29 08:50:21 · 1271 阅读 · 0 评论 -
mysql解决mysql-connector-java 6+ 插入数据库时差问题
使用mysql-connector-java 6.x版本后。new Date()插入数据库的时间与国内时间有14个小时的时差。原因是mysql-connector-java 6.x版本后默认使用UTC(协调世界时)。这个时间与国内东8区时间有14个小时的时差。解决方法如下:在数据库连接URL后添加&serverTimezone=PRC PRC是可以当做是中华人民...原创 2019-10-18 08:33:06 · 464 阅读 · 0 评论 -
利用Thumbnails,java图片压缩,转换工具类
Thumbnails是谷歌的一个图片压缩处理开源库。利用这个库可以非常容易的做图片处理。这里整理了一些方法。直接看代码吧。先添加jar支持<!-- https://mvnrepository.com/artifact/net.coobird/thumbnailator --> <dependency> <groupId>net.coobird...原创 2018-11-10 10:23:50 · 2960 阅读 · 0 评论 -
socket.io 在java与微信小程序上的应用
最近有一个这样的功能场景。用户操作完成后。服务器主动通知另一个客户端显示结果。这里涉及一个服务器推的这么一个东西。需要实现这么一个功能,对比了几个实现方式。最终选择了socket.io。1、commet,最初想到这个功能要求不高,想简单的通过commet方式实现就算了。但考虑到commet已经是比较老旧的做法了,其中有很多弊端,所以放弃了。2、netty。netty是非常棒的java ...原创 2018-11-09 19:00:56 · 3435 阅读 · 0 评论 -
okhttp在java中的使用
OkHttp 库的设计和实现的首要目标是高效。这也是选择 OkHttp 的重要理由之一。OkHttp 提供了对最新的 HTTP 协议版本 HTTP/2 和 SPDY 的支持,这使得对同一个主机发出的所有请求都可以共享相同的套接字连接。如果 HTTP/2 和 SPDY 不可用,OkHttp 会使用连接池来复用连接以提高效率。OkHttp 提供了对 GZIP 的默认支持来降低传输内容的大小。OkHtt...原创 2018-08-02 15:50:06 · 5485 阅读 · 1 评论 -
解决spring cloud Feign远程调用服务,添加headers解决拦截器拦截问题
使用spring cloud 做saas服务器时,经常会通过Feign调用远程服务。有时候我们的远程服务可能做了某些权限验证。需要验证header或者token什么的。如果某没有token,可能会被阻止调用。那如何添加token呢。如果每个方法都手动设置headers,那未免太麻烦。可以通过一个切面,自动帮我们添加请求header。直接上代码:@Configurationpublic class...原创 2018-06-12 08:51:28 · 14920 阅读 · 2 评论 -
java mybatis 多数据源,动态数据源 使用
做项目,有时候需要一个工程里配置多个数据源。网上也有很多啦。我这里写一个比较全,实现相对优雅的方式吧。使用mybatis的时候,可以不用多个DAO。一个DAO全部搞定直接上代码:1、先添加需要的数据源配置# 数据源,默认配置Druidspring.datasource.type=com.alibaba.druid.pool.DruidDataSourcespring.datasource.dr...原创 2018-04-27 11:03:25 · 827 阅读 · 1 评论 -
解决 java.io.FileNotFoundException: file:/usr/project/xxx.jar!/BOOT-INF/classes!/conf/config.js
使用spingboot开发,在工程根目录中添加了一个配置文件,在IDE中通过this.getClass().getResource("")来获取文件的路径,没有任何的问题。在打成jar后运行,结果不能读取到文件。在jar里面对应的class路径下可以看到该文件,确定是有打包进去的。此时通过 this.getClass().getResource("");方法无法正确获取文件。用 InputStre...原创 2018-04-24 08:45:47 · 18714 阅读 · 4 评论 -
自定义注解,mybatis通过拦截器执行insert、update sql自动添加当前时间。
开发过程中,会经常执行insert、update语句。大部分数据库表结构都有类似create_time这样的时间列,用于记录创建时间。很多朋友通常会为这个列设置一个默认值、或者通过代码setTime()去设置。这样做是没有问题的。这里主要提供注解的方式去达到这个目的。有利于提高开发效率。1、先添加两个自定义注解类:import java.lang.annotation.Eleme...原创 2019-04-11 08:58:14 · 9400 阅读 · 0 评论 -
Java8 lambda表达式10个示例
例1、用lambda表达式实现Runnable我开始使用Java 8时,首先做的就是使用lambda表达式替换匿名类,而实现Runnable接口是匿名类的最好示例。看一下Java 8之前的runnable实现方法,需要4行代码,而使用lambda表达式只需要一行代码。我们在这里做了什么呢?那就是用() -> {}代码块替代了整个匿名类。1234567// Java 8之前:new Threa...转载 2018-04-13 09:15:16 · 524 阅读 · 0 评论 -
java 代码实现encodeURIComponent和decodeURIComponent,解决空格转义为加号的问题。
java自带有一个 java.net.URLDecoder和java.net.URLEncoder。通过这两个类,可以调用encode()或者decode()方法对字符串进行URL编码。那既然有了,为什么还要自己实现一套呢?主要原因是Jdk中并没有提供encodeURIComponent和decodeURIComponent的方法。这两个方法作用其实跟encode()和decode(...原创 2018-11-16 15:51:42 · 21345 阅读 · 1 评论 -
log4j2 的配置与使用
简单说一下log4j2的改进,引用一下百度上的:1、丢数据这种情况少,可以用来做审计功能。而且自身内部报的exception会被发现,但是logback和log4j不会。2、log4j2使用了disruptor技术,在多线程环境下,据说性能高于logback等10倍以上。3、(garbage free)之前的版本会产生非常多的临时对象,会造成GC频繁,log4j2则在这方面上做了优化,减少...原创 2018-12-01 17:30:18 · 1474 阅读 · 0 评论 -
spring boot 解决Tomcat 报 The valid characters are defined in RFC 7230 and RFC 3986 的问题
tomcat 8.0以后对请求URL做了严格的过滤就是严格按照 RFC 3986规范进行访问解析,而 RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])。这可能会遇到一个问题,比如参数中传了一段j...原创 2018-12-18 17:09:35 · 15673 阅读 · 13 评论 -
java、android可用的rtp封包解包h264
做直播,音视频通讯。经常需要通过rtp协议封装音视频数据来发送。网上找到的基本都是c或c++版本的,没有JAVA版本的。就算千辛万苦找到一篇java版本的,要么不能用,要么就是一些片段,要么有封包没解包。很是蛋疼,本人也是这样,刚开始不太熟悉rtp协议,不太明白怎么封包组包,痛苦了几天,终于搞出来了,分享给有需要的朋友,希望对你们有所帮助。直接看代码吧。不多说了。首先看看关原创 2017-05-27 15:59:42 · 15220 阅读 · 44 评论 -
getty 一个完全基于java 实现的aio框架
目录前言说说写这个框架的原因:说说getty的特点:说说getty的性能和稳定性:如何使用:插件的使用:未完待续。。。githup地址:https://github.com/gogym/getty码云地址:https://gitee.com/kokjuis/getty前言1、getty只是本人空闲时间随手写的一个网络通讯框架,虽然本人认为这份代码写的还凑...原创 2019-10-01 19:48:20 · 2821 阅读 · 0 评论 -
netty4 使用SSL 安全连接,简单明了
netty是一个非常优秀的nio框架,就不多介绍啦,这里主要介绍如何在netty中开启ssl。这里使用的版本是 netty4 ,netty4内部已经实现了标准的 jdk ssl 以及openssl。很方便的就能使用。ssl的一些介绍,为何要用ssl就不累述了,百度一大堆。咱们讲究实战,直接上代码吧:一、首先肯定要导入相关的jar:<dependency> <...原创 2019-08-13 17:10:42 · 6962 阅读 · 2 评论 -
java使用中Protobuf3 Any类型转json (解决Cannot find type for url: type.googleapis.com)
Protobuf是谷歌出品的一个数据协议框架,跟json相比,有独特的优点,这里不多说。Protobuf3相比Protobuf2有很多改进。其中一个就any类型。有点类似java的泛型。也添加了Protobuf与json的互转,非常方便如何转换json:先添加jar支持,protobuf 转json的工具类在protobuf-java-util这个包中,通过maven引用进来 &...原创 2019-07-03 09:52:05 · 5220 阅读 · 2 评论 -
mybatis 通过拦截器打印完整的sql语句以及执行结果
开发过程中,如果使用mybatis做为ORM框架,经常需要打印出完整的sql语句以及执行的结果做为参考。虽然mybatis结合日志框架可以做到,但打印出来的通常都是sql和参数分开的。有时我们需要调试这条sql的时候,就需要把参数填进去,这样未免有些浪费时间。此时我们可以通过实现mybatis拦截器来做到打印带参数的完整的sql,以及结果通过json输出到控制台。直接看代码和使用方...原创 2019-04-02 15:05:27 · 8525 阅读 · 6 评论 -
JAVA采用 Luhm 校验算法来生成条码(银行卡号),防止被篡改
开发过程中,经常会生成一段条码来做为一个标识,比如生成几个商品的条码。但如果只是简单的使用几个随机数来标记,没有任何的校验过程,有时可能不太安全。这里介绍一个简单使用的条码校验方法。这样如果条码被修改过,就无法通过校验,从而达到提高安全性的目的。这里主要使用Luhm 校验算法。Luhm 校验算法广泛用在银行卡号的生成,校验等场景上,这里不多说了。简单介绍校验的过程:1、从最后一位数字开...原创 2019-02-19 16:24:44 · 1524 阅读 · 0 评论 -
解决通过阿里云SLB多层代理后,spring boot工程获取不到客户端真实IP的问题
现在很多服务都部署到阿里云上,免不了使用SLB做负载均衡,然后又通过了nginx等代理。如果这个时候你想获取客户端访问的真实ip,你会发现一直拿到的是127.0.0.1 下面一起来解决这个问题。现在来解决一下:首先:配置一下SLB监听。确定获取真实IP已经开启,一般默认都是开启的,如图:二、配置nginx转发ip信息,基本都有这段配置:proxy_set_header Ho...原创 2018-12-18 17:37:21 · 3147 阅读 · 1 评论 -
zuulGateway 通过filter统一修改返回值
使用spring cloud有时候我们给客户端返回内容的时候,往往需要添加一些额外的东西。比如加密,多添加一个返回值等等。当然可以在方法里面处理,但如果方法很多,需要统一处理的,就很不方便了,这时候可以通过zuulGateway的filter来统一处理。直接看代码,很简单:import java.io.InputStream;import java.nio.charset.Charset;...原创 2018-04-08 11:55:46 · 7382 阅读 · 0 评论 -
zuulGateway网关添加路由异常熔断
zuulGateway是spring cloud中很不错的组件,使用频率很高。使用过程中偶尔可能遇到服务路由异常的情况,如果没有异常熔断,可能会造成应用无响应,严重甚至造成系统雪崩。所以一般需要加上熔断机制。直接看代码,很简单:/* * 文件名:ServerFallback.java 版权:Copyright by www.poly.com 描述: 修改人:gogym 修改时间:2018年1月3...原创 2018-04-08 11:43:20 · 1834 阅读 · 0 评论 -
RESTful API 处理有点的URL获取不到的问题
使用RESTful风格的URL。但是在处理带点的URL时,后台不能正确拿到,如 localhost:8080/file/1234.jpg 这个URL。后台只拿到 1234 ,拿不到.jpg这个后缀。原因:Spring将点号看作扩展分隔符号,相当于/,因此拿不到。解决方案:RequestMapping中使用/{path:.+}这种匹配模式即可正确拿到(path是参数名称),其他情况以此类推例如:@...原创 2018-03-13 12:30:38 · 1974 阅读 · 0 评论 -
JVM原理和优化
JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境.1.创建JVM装载环境和配置2.装载JVM.dll3.初始化JVM.dll并挂界到JNIENV(JNI调用接口)实例4.调用JNIEnv实例装载并处理class类。在我们运行和调试Java程序的时候,经常会提到一个JVM的概念.JVM是Java程序运行的环境,但转载 2017-07-05 11:35:49 · 394 阅读 · 0 评论 -
JAVA、android常用时间处理方法及类似微信微博发表时间显示
代码是常用的时间处理类。以及类似微信微博发表时间显示,如:刚刚、20秒前、30分钟前、2小时前、3天前,星期三等这种显示。代码比较简单,直接看看就好了。package com.kokjuis.travel.utils;import java.text.DateFormat;import java.text.ParseException;import java.text.Pa原创 2017-06-12 14:12:45 · 973 阅读 · 0 评论 -
Redis单机及其集群的搭建
一、单机版redeis1.安装包下载http://download.redis.io/releases/ 下载redis的压缩包,并放在/usr/soft文件夹下2.解压压缩包: tar -zxf redis-3.0.7.tar.gz3.安装这里安装redis在/usr/local/redis文件夹中进入安装包:cd /usr/soft/转载 2017-06-30 15:35:24 · 707 阅读 · 0 评论 -
netty4 UDP的使用
网上很多关于netty的都是TCP的使用,这些写一下UDP的使用,其实也很简单。这里不介绍TCP协议和UDP协议有什么区别了,网上很多。这里要说明的一点是netty的TCP和UDP使用有点不一样:1、netty TCP是每个客户端连接过来都有一条连接,而netty UDP没有连接,只监听端口。2、netty TCP可以在Channel获取远程客户端的ip和端口号,而netty UD原创 2017-06-02 17:53:26 · 17971 阅读 · 21 评论 -
netty4 tcp与protobuf3的整合使用。
netty是一个非常棒的NIO框架就不介绍了。protobuf是google提供的一个开源序列化框架,也是一个非常棒的东西。这里不介绍这两个框架了,想要了解的朋友网上一搜一大把。本文主要介绍 protobuf3与netty4 在tcp协议里的整合使用。个人认为netty与protobuf是绝配的组合。配合使用非常棒,框架提供了粘包拆包等工具类。特别是你要实现如及时通讯功能的时候,能让你原创 2017-06-02 16:56:15 · 6876 阅读 · 3 评论 -
关于netty UDP不能发送大于2048字节包的问题
刚开始对netty udp不太熟的朋友可能会遇到这么一个问题,在使用netty udp发送数据的时候,如果你的包比较大,或者超过2048字节的时候,经常会接收不全或者丢包了。比如发送一个4096字节的DatagramPacket包到服务器,你会发现只接收到2048或者更少的字节。是什么原因呢?下面说一下个人的见解:udp理论上支持最大发送64K的包,那为什么netty udp不能发送大原创 2017-06-05 10:10:11 · 7468 阅读 · 1 评论 -
android采集视频格式转换算法
//-----------下面是常用的格式转换方法----------------------------- //yv12 转 yuv420p yvu -> yuv,yuv420p就是I420格式,使用极其广泛 private void swapYV12toI420(byte[] yv12bytes, byte[] i420bytes, int width, int heigh原创 2017-05-27 15:15:30 · 1347 阅读 · 0 评论 -
redis与java spring的整合使用
redis是什么不用介绍了,很多朋友都清楚,至于怎么安装和配置redis,这里就不说了。看看怎么和spring整合在一起使用吧。要在JAVA中使用redis。需要添加两个jar包:jedis-2.7.2.jar、commons-pool2-2.2.jar。(可以到网上下载,版本可以和这里不一样)工程中先添加一个redis的属性配置文件:redis.propert原创 2017-05-17 12:24:24 · 673 阅读 · 0 评论