自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(213)
  • 收藏
  • 关注

原创 Guava RateLimiter 源码分析

Guava RateLimiter基本使用学东西时我们应该尽量去看官网、看源码、看官方给出的单元测试。比如Guava RateLimiter,从RateLimiter类的源码注释中可以看到,官方给出的典型应用场景与使用:As an example, imagine that we have a list of tasks to execute, but we don't want to submit more than 2 per second: final RateLimiter rateLi

2020-09-02 16:31:08 149

原创 tomcat和dubbo对于JDK线程池的修改

文章目录预备知识概述Tomcat线程池源码分析ThreadPoolExecutorTaskQueueDubbo线程池源码分析参考资料预备知识计算任务的分类CPU密集型:需要线程长时间进行的复杂的运算,这种类型的任务需要少创建线程,过多的线程将会频繁引起上文切换,降低任务处理处理速度。IO密集型:由于线程并不是一直在运行,可能大部分时间在等待 IO 读取/写入数据,增加线程数量可以提高并发度,尽可能多处理任务。JDK线程池,java.util.concurrent.ThreadPoolE

2020-08-18 16:16:32 495

原创 第三方库shiro-redis所引起的内存泄露问题分析

现象线上某系统运行不到一周,响应速度变慢,并且多次重启,排查时发现CPU占用到100%,但这段时间系统并发量并未改变,数据库、缓存等也没发现异常。排查过程1、top指令查看哪个进程占用CPU高发现确实是该系统的java进程。2、使用 top -Hp 进程id 看哪个线程,然后利用jstack命令查看对应线程一直在干什么很经典的排查线上CPU 100%问题的操作步骤,注意要转十六进制 .最终发现是GC操作占用CPU。3、此处怀疑是某处有内存泄露,使用jmap -histo:live 进程i

2020-07-29 16:18:23 1665

原创 Error: Could not find or load main class ***

双亲委托模型类加载器的双亲委派模型在JDK 1.2时期被引入,并被广泛应用于此后几乎所有的Java程序中,但它并不是一个具有强制性约束力的模型,而是Java设计者们推荐给开发者的一种类加载器实现的最佳 实践。优点Java中的类随着它的类 加载器一起具备了一种带有优先级的层次关系。例如: java.lang.Object,java.lang.String 在程序的各种类加载器环境中都能够保证是同一个类,保证安全若加载了别人写的java.lang.String,别人想干啥干啥源码分析

2020-07-11 15:06:58 214

原创 JDK各个版本特性速览

JDK 1.5很重要的一个版本。更新了Java内存模型(JMM)增强volatile语义增强final语义泛型For-Each循环注解枚举JUC包lock接口JDK 1.6Desktop类和SystemTray类JAXB2实现对象与XML之间的映射StAXCompiler API轻量级 Http Server API插入式注解处理API(Pluggable Annotation Processing API)用Console开发控制台程序对脚本语言的支持(如

2020-06-18 15:33:55 265

原创 spring cloud版本由1.5.x升级到2.x所遇到的坑

众所知周,spring cloud 1.5版本与2.x版本差异很大,官方没有做向下兼容,导致大家对于升级spring cloud版本都非常慎重。此处,首先推荐阅读官方给出的迁移手册 Spring Boot 2.0 Migration Guide虽然是英文的,但建议还是好好读读。预备知识废话一下:升级操作前务必要对spring, spring boot, spring cloud版本、各自...

2020-04-30 16:13:56 1217 1

原创 spring项目部署linux时读取字体失败导致绘图时输出乱码

现象spring项目部署linux时读取字体失败导致绘图时输出乱码,比如说调用Graphics2D graphic绘图时用到字体,却输出乱码。原因字体文件找不到,比如说开发环境是windows,可能是使用“微软雅黑”字体,是正常的,但部署到线上(往往是linux),就会是乱码。解决1、找到项目所需字体,上传到linux服务器中,并放到指定位置先说结论:我个人不推荐这样做!!!比如说这...

2020-04-27 23:41:36 852 2

原创 spring-boot以jar包方式时读取resource或是template文件

现象以jar包方式部署系统,想读取resource或是template下面的文件时,报 File Not Found我遇到的情况是,整个项目达成了一个包,在开发环境(windows + idea)读取文件没问题,但在预发布环境(centos, 打成一个jar部署),则报错。使用jar -xvf xxx.jar命令解压jar后,大体结构如下:BOOT-INFMETA-INForg...

2020-04-26 23:22:50 2920

原创 连接redis时出现 “ERR Client sent AUTH, but no password is set” 异常的原因及解决办法

现象使用redis-cli连接redis时,报错:ERR Client sent AUTH, but no password is set异常信息类似:redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the poolat redis.clients.util.Po...

2020-04-11 23:42:34 1614

原创 git使用技巧-快速回退远端分支到某个指定版本

先使用git log获取想要回退版本的commit id,假定此处为82d9cab12731870bd04327464e501479da3a87e2然后通过git reset 82d9cab12731870bd04327464e501479da3a87e2将git本地版本回滚到指定commit。然后通过git push -f将本地更新强制推送到远端。...

2020-03-25 09:07:13 633

原创 mysql source命令导入大文件时失败的解决方法

方法:1、将大文件分成多个小文件2、检查mysql的max_allowed_packet参数配置,命令如下:show variables like '%max_allowed_packet%';适当调大该参数,比如在启动mysql client端时,通过加参数的方式,在客户端调整该参数mysql --max_allowed_packet=32M更多修改方法参见官方文档:B.4.2....

2020-03-18 10:09:37 836

原创 spring boot启动失败不输出日志

spring boot启动失败,没有任何错误日志输出,只输出了如下信息:可能的原因:1、日志配置文件没有配好解决:修改日志等级,找到logback-boot.xml文件,找到<root level="INFO"> </root>,修改日志等级,添加标准输出<root level="INFO"> <appender-ref ref="STD...

2020-03-14 15:01:03 8117

原创 mybatis plus配置多数据源时批量接口调用失败以及解决方案

表现仅配置单个数据源时,mybatis plus的save/saveBatch接口调用正常配置多个数据源、动态切换时,mybatis plus的save接口调用正常,saveBatch调用失败,报错如下org.apache.ibatis.exceptions.PersistenceException: ### Error flushing statements. Cause: org.a...

2020-03-09 15:25:54 9736 2

原创 spring中使用mybatis plus连接sqlserver

本文主要关注如何使用mybatis/mybatis plus连接SQL Server数据库,因此将省略其他项目配置、代码。框架选择应用框架:spring bootORM框架:mybatis plus(对于连接数据库而言,mybatis和mybatis plus其实都一样)数据库连接池:druidpom依赖此处仅给出我的配置,mybatis/druid请依据自己项目的需要进行选择。方便...

2020-03-03 10:03:39 6911 3

原创 mysql中判断字段是否包含数字或者是否为纯数字

文章目录各种场景判断字段是否包含数字使用like模糊查询包含某个数字使用mysql原生函数FIND_IN_SET查询包含某个数字使用regexp正则匹配纯数字使用regexp正则匹配字段值不包含数字参考资料各种场景判断字段是否包含数字select name from text where name regex '[0-9]'使用like模糊查询包含某个数字select * from t...

2020-02-26 09:50:42 12156 1

原创 Mybatis-Plus select不列出全部字段,只查询部分字段

mybatis-plus select查询语句默认是查全部字段,有两种方法可以指定要查询的字段假定表结构如下:CREATE TABLE `user` ( `id` bigint(20) NOT NULL COMMENT '主键', `name` varchar(30) DEFAULT NULL COMMENT '姓名', `age` int(11) DEFAULT NULL COM...

2020-02-01 11:27:57 26457 12

原创 mybatis plus常见用法-不用xml实现自定义查询

找到两种方法:1、采用mybatis注解的方式参见:MyBatis Plus 自定义查询语句DAO层:@Select("select b.bomName, " + "b.bomProductType, b.bomMaterial, " + "o.customerID AS bomID, " + "o.ordersDataNo AS qrCode, " + "s.delive...

2020-02-01 11:27:13 7371 1

原创 Java中日期格式化yyyyMMdd和YYYYMMdd的区别

Java中日期格式化yyyyMMdd和YYYYMMdd的区别示例代码: public static void main(String[] args) { //YYYY 是表示:当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,那么这周就算入下一年。 //2019-12-29至2020-1-4跨年周 Calendar calendar...

2020-01-16 14:43:40 16514

原创 shell脚本执行方式

shell脚本执行方式一个规范的Shell脚本在第一行会指出由哪个程序(解释器)来执行脚本中的内容,这一行内容在Linux bash的编程一般为:#!/bin/bash或#!/bin/sh注意在Shell中如果一行的第一个字母是#,则是注释,但是上面两个是写在第一行,所以不是脚本注释行,如果写在某个命令之后,则变成注释行。sh为bash的软链接,大多数情况下,脚本的开头使用“#...

2019-12-24 09:41:32 119

原创 mysql 常用函数整理

mysql 常用函数整理文章目录mysql 常用函数整理字符串操作字符串拼接 concat去掉无用空格 trim截取字符串获取前缀 left获取后缀 right截取字符串 substring_index截取字符串 substring参考资料字符串操作字符串拼接 concatselect id, name, concat('-', name, '-') from t_student;去...

2019-12-20 19:12:03 172

原创 mybatis/mybatis plus的实体类字段名称与数据库字段匹配失败的解决办法

问题数据库表字段名称类似这样然而根据SQL逆向生成的实体类,变量名只可能是这样:注:此处使用工具http://java.bejson.com/generator/生成的实体类。实际运行时会发现,实体类与数据库表字段绑定失败、匹配不到字段,原因在于mybatis/mybatis plus匹配变量时按照ext_attr4去找,而数据库中则是ext_attr_4。解决由于我遇到的情况,...

2019-12-18 10:03:39 6738 1

原创 Java中如何判断文件类型

目前看到的有两种方式:根据文件后缀根据文件魔数根据文件后缀满足一般需要,但如果文件后缀被手工修改,则可能判断错误。JDK中已经提供了现成的接口用于根据文件名判断:URLConnection.guessContentTypeFromName("xxx.com/api/yyy.jpg")根据文件魔数魔数概念就不在此赘述,此种方式会通过读取文件二进制字节流的方式,获取文件开头的几个...

2019-12-09 09:57:56 1937

原创 java根据URL获取输入流以及下载文件

代码取自:JAVA根据URL网址获取输入流/** * 根据地址获得数据的输入流 * @param strUrl 网络连接地址 * @return url的输入流 */ public static InputStream getInputStreamByUrl(String strUrl){ HttpURLConnection conn = null; ...

2019-12-05 10:15:19 9127

原创 idea中调整阿里巴巴java编码规约插件(p3c)的提醒颜色

阿里巴巴java编码规约插件调整提醒颜色idea的默认主题以白色为主,导致阿里插件(p3c)的部分提醒很不醒目。到p3c项目下询问后,得到如下答复:参见https://github.com/alibaba/p3c/issues/610尝试后果然提示效果好很多,参加下图。调整前后的对比效果:...

2019-11-23 17:56:41 632

原创 spring boot连接mysql 8时报errorCode 0, state 08001错误

spring boot连接mysql 8时报errorCode 0, state 08001错误现象spring boot 启动时,连接mysql 8数据库报错errorCode 0, state 08001。原因1. spring boot项目中,pom文件中配置的mysql驱动版本与mysql数据库版本不一致此时修改pom文件中的版本即可,可以使用下面的配置:……<grou...

2019-11-23 17:31:35 48021 3

原创 Spring Boot 上传文件报错 The temporary upload location [xxx] is not valid

Spring Boot 上传文件报错 The temporary upload location [xxx] is not valid问题导入excel文件时,偶发bug:org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested excepti...

2019-11-23 17:11:59 217

原创 git cherry-pick挑选某个commit应用到当前分支

git cherry-pick挑选某个commit应用到当前分支git cherry-pick可以挑选某个分支的一个或多个commit,将其应用到当前分支上。命令格式git cherry-pick <commit id>查询commit id 的查询可以使用git log查询(查询版本的历史),最简单的语法如下:git log如果想查找已经被删除的某次commit,则可...

2019-11-17 22:32:19 362

原创 spring boot 多个包启动失败-添加多个包扫描

spring boot 多个包启动失败-添加多个包扫描表现:启动时提示如下信息:因为项目需要,将代码结构调整为:com.xxxxxyyXxxxApplication这种组织结构,注意,此处时同一个项目(没有拆分成多个maven模块),有多个包保存不同功能模块的代码。此时启动项目,报错如下:Error starting ApplicationContext. To disp...

2019-11-12 19:39:20 395

原创 git使用技巧-stash保存现场,恢复现场

git stash命令:保存现场、恢复现场功能:将git 工作区中的数据暂存起来,保存现场,以及后续的恢复现场,类似于函数调用的保存现场、恢复现场使用场景:正在开发一个代码,编写到一半,需要将代码恢复到某个版本修复某个bug上,但已经编写的工作又想保留用法git stash # 保存当前现场。git stash list # 查看当前stash缓存的内容## 编辑其他内容,编辑...

2019-11-08 14:07:53 421

原创 git使用技巧-撤销修改

撤销修改丢弃工作区的修改git checkout --文件名称把暂存区的修改撤销掉(unstage),重新放回工作区git reset HEAD 文件名称已经commit到版本库,想撤回本次commit前提:没有推送到远端git reset --hard HEAD^或者git reset --hard commit_id...

2019-10-31 10:05:47 113

原创 git tag查看以及推送到远端

查看taggit showgit tag -l "v1.5" //加上筛选条件创建taggit tag 版本号git tag -a v1.5 -m "my version 1.5" //加上备注信息git tag -a v1.5 //会打开默认文本编辑器git tag -s v1.5 -m 'my signed 1.5 tag' //用 GPG 来签署标签推送到远端git p...

2019-10-24 19:15:41 1253

原创 分布式id生成-雪花算法实现资源汇总

讲分布式Id生成的文章很多,其中雪花算法也提到过多次,本文不再赘述,只是给出资源汇总,仅供参考。snowflake-snowflake-2010twitter原版,scala编写,地址:https://github.com/twitter-archive/snowflakejava版本snowflake代码源地址 参见https://github.com/beyondfengyu/Sn...

2019-10-22 18:10:31 179

原创 elasticsearch启动时报错:error=’Cannot allocate memory’ (errno=12)

elasticsearch启动时报错:Java HotSpot™ 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000e5330000, 449642496, 0) failed; error=‘Cannot allocate memory’ (errno=12)There is insufficient memory for...

2019-10-22 14:47:15 976

原创 mybatis xml常用写法-传入数组list

需求:xml中传入参数中包含一个list,需要在where中拼接in语句假设查询person表,参数类型为XXXVo,XXXVo中包含一个List对象,保存了状态列表,此时可以参考如下查询<select id="queryXXX" parameterType="XXXVo" resultMap="XXXResult"> select * from person ...

2019-10-19 11:22:37 5519 1

原创 极客时间-java并发编程实战听课笔记(2) 可见性、原子性和有序性问题:并发编程Bug的源头

java并发编程实战听课笔记(2) 可见性、原子性和有序性问题:并发编程Bug的源头为何会出现并发问题根源为了加速程序执行速度、提高资源利用率,有了各种技术,而这些技术也带来了不同的副作用:CPU有缓存,缓存导致可见性问题操作系统有进程、线程,分时复用CPU,线程切换带来了原子性问题编译优化,带来有序性问题CPU缓存带来的可见性问题如果是单核CPU时代,CPU有缓存,没什么影响...

2019-09-27 09:24:44 549 1

原创 google guava使用教程系列(3)- 前置条件检查

原文地址:[https://github.com/google/guava/wiki/PreconditionsExplained])(https://github.com/google/guava/wiki/PreconditionsExplained)简而言之,guava提供了一系列检查参数的方案,个人感觉一般,实际业务场景中对于参数判断自己写可能比这种封装更方便。官方举的例子:chec...

2019-09-26 22:11:53 253

原创 【听课笔记】java分布式锁

课程链接课程:https://url.163.com/VD8java锁synchronized在jdk 1.5以后,优化了,使其性能并不是像很多帖子说的那样,“非常重”JUC lock方法说明lock()获取锁,如果锁被暂用则一直等待tryLock()如果获取锁的时候锁被占用就返回false,否则返回truetryLock(long time, Ti...

2019-09-18 17:01:37 75

翻译 google guava使用教程系列(1)-String相关

注意:本文档基于google guava 28 wikiJoiner连接器将字符串拼接Joiner joiner = Joiner.on("; ").skipNulls();return joiner.join("Harry", null, "Ron", "Hermione");返回Harry; Ron; HermioneskipNulls()方法是直接忽略null,使用useFo...

2019-09-14 16:10:05 194

原创 【听课笔记】java分布式锁

课程链接课程:https://url.163.com/VD8java锁synchronized在jdk 1.5以后,优化了,使其性能并不是像很多帖子说的那样,“非常重”JUC lock方法说明lock()获取锁,如果锁被暂用则一直等待tryLock()如果获取锁的时候锁被占用就返回false,否则返回truetryLock(long time, Ti...

2019-09-14 08:57:33 116

原创 【听课笔记】java分布式锁

课程链接课程:https://url.163.com/VD8java锁synchronized在jdk 1.5以后,优化了,使其性能并不是像很多帖子说的那样,“非常重”JUC lock方法说明lock()获取锁,如果锁被暂用则一直等待tryLock()如果获取锁的时候锁被占用就返回false,否则返回truetryLock(long tim...

2019-09-13 06:45:30 84

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除