ThreadLocal正确使用姿势,避免再掉坑

原创 2021-07-20 17:53 阅读(15)次
今天为了不改变方法的参数,使用ThreadLocal在线程内传值,一不小心就掉坑里了,发现数据错乱了,原因是:我的业务要求不是所有线程都要执行ThreadLocal.set动作,但是所有线程都要执行ThreadLocal.get,而我没执行ThreadLocal.remove动作。造成get的时候会取到上一条的数据,于是就数据错乱了,这里记录一下,怕自己又忘记了。 贴一下正确姿势代码: ```java public class SendMessageRetryTheadLocal { private static ThreadLocal sendMessageLogStor...

json转List<T>数组泛型如何转

原创 2021-07-08 16:18 阅读(19)次
json转List数组泛型如何转? 我们可以使用fastjson,如下代码: ```java List cacheList = JSON.parseObject(deviceListJson, new TypeReference>() {}); ``` 如上代码是想把json转成数组,Ape是我们的实体类。 pom就不贴了

fastjson转字符串时保留null空字段

原创 2021-06-16 10:42 阅读(44)次
在使用fastjson时,有时我们需要将对象转成json字符串,但你会发现转换后的字符串中会少了null值的字段。 那fastjson转字符串后如何保留null空字段呢? 最直接的代码如下: ```java String jsonStr = JSON.toJSONString(object, SerializerFeature.WriteMapNullValue); ```

java enum枚举转list和Map

原创 2021-06-10 15:08 阅读(81)次
java中如何将枚举的定义转成list或者Map,让我们更好的操作枚举值? 思路是使用枚举的values()方法,将枚举定义转成对应你想要的数据类型。 分享代码如下,其中AlarmType中定义了很多枚举值: ```java public class EnumToListAndMap { public enum AlarmType{ OVER_SPEEDING_ALARM("overSpeedingAlarm","超速行驶预警"), DEVICE_IDLE_ALARM("deviceIdleAlarm","设备空闲预警"), UNLOCK_ALAR...

如何清空或初始化quartz定时相关表时报外键引用错误

原创 2021-06-02 18:18 阅读(86)次
清空quartz定时相关表时会报外键引用错误 表列表如下: ![](http://img.classinstance.cn/20210602/1622626914839.jpg) 外键引用错误就需要根据外键关系删除定时表数据,有外键关联的表和顺序如下: qrtz_cron_triggers qrtz_triggers qrtz_job_details qrtz_fired_triggers 清空表和删除表顺序执行如下语句: ```sql DELETE from qrtz_cron_triggers ; DELETE from qrtz_triggers ; ...

spring boot或spring cloud项目中使用系统环境变量问题

原创 2021-05-25 18:08 阅读(105)次
#### 前言 项目开发过程中有时候需要用环境变量来解决一些复杂配置的问题,比如同一个服务要部署多个实例,但这些实例需要使用不同的配置时,这些就可以用环境变量来解决,这不管是原始的部署方式或使用k8s部署方式都是可以使用环境变量来解决这种问题。 下面我们分享下开发和部署时怎么设置环境变量 #### 代码示例 先上示例代码,比如我们要在bootstrap.yml中读取env_test这个环境变量,如下配置: ```yaml env: test: ${env_test} ``` 如果你遇到spring boot项目bootstrap.yml配置无法生效,可以看看我...

bootstrap.yml配置报错:Could not resolve placeholder 'xx' in value

原创 2021-05-25 17:20 阅读(80)次
今天在bootstrap.yml加了一个配置,一直读取不到,一直报如下错误: ``` java.lang.IllegalArgumentException: Could not resolve placeholder 'env.test' in value "${env.test}" ``` bootstrap.yml配置如下: ```yaml env: test: 1 ``` 代码如下: ```java @Component public class EnvConfig { @Value("${env.test}") private S...

java Md5工具类获取字符串的Md5值

原创 2021-05-14 10:02 阅读(75)次
java如何获取字符串的Md5值? 具体代码如下: ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class Md5Utils { public static String getMd5(String str) throws NoSuchAlgorithmException { byte [] bytes = str.getBytes(); StringBuffer sb = n...

java List间计算并集、差集、交集以及去重

原创 2021-05-14 09:39 阅读(94)次
Java中如何计算两个List的并集、差集、交集? 并集和交集我们都很清楚,但其中这里说的差集是什么意思呢?指的是集合listA与listB差集,准确来说是用listB去删除listA中存在listB中的元素。 Java集合中针对这三个场景提供了三个方法。 - 并集使用list.addAll()方法; - 差集使用list.removeAll()方法; - 交集使用list.retainAll()方法; 其中removeAll和retainAll都会根据对象的equals方法来比对对象是否相等,要正确的使用这两个方法需要注意对象的类是否要重写equals和hashCode方...

LinkedBlockingQueue实现定长队列自动出队与读取队列

原创 2021-04-23 16:10 阅读(120)次
我要实现一个存储请求状态的队列缓存,需要用到LinkedBlockingQueue,实现定长队列自动出队,另外还要实现不出队的情况下读取队列数据。 代码如下: ```java LinkedBlockingQueue queue = new LinkedBlockingQueue(3); queue.offer(1); queue.offer(2); queue.offer(3); boolean offer = queue.offer(4); if(offer == false)...

解决java.lang.OutOfMemoryError: unable to create new native thread

原创 2021-04-08 10:40 阅读(97)次
#### 异常问题 项目并发测试一个功能时报创建不了本地线程,如下: ``` Caused by: java.lang.OutOfMemoryError: unable to create new native thread at java.lang.Thread.start0(Native Method) at java.lang.Thread.start(Thread.java:717) at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:957) at ...

postgresql数据库表分区字段有必要创建索引么?

原创 2021-04-08 09:45 阅读(99)次
postgresql数据库表分区后,分区字段有必要创建索引么? 昨天项目上线前进行性能并发测试,发现一个简单请求单并发要1分多钟,我进行代码跟踪了下,最终定位到如下SQL语句代码: ```xml select min(collect_time) from A ``` 我才想起来这个是我写的,当时是认为A表用collect_time字段做了分区,应该不用给collect_time字段做索引了,而且A表中已经有6个索引字段了,生怕创建太多索引而影响写入性能。 但性能测试环境中A表有6亿数据,上面这个查询就显的力不从心。于是...

java使用snakeyaml库读取和操作yml文件

原创 2021-03-11 16:17 阅读(114)次
随着spring boot项目的流行,现在已有很多项目在使用yml文件来配置我们的项目。其中也有一些中间件比如elasticearch配置文件都在用yaml文件来配置。 有时我们会有一些需求,比如动态配置,动态读取yml文件来操作我们的配置文件,那么这时就需要解析yml文件了。 那java中如何读取和操作yml文件呢?答案是snakeyaml库。 引入jar包: ```xml org.yaml snakeyaml 1.25 ``` 下面分享一些资料: 官方api与文档: https://bitbucket.org/aso...

maven jar包 搜索网址分享

原创 2021-03-10 19:40 阅读(150)次
我们java程序员开发时通常用maven引入jar包的形式导入工具库包。有时为了升级某个jar包时却不知道这个jar包有什么版本的,这时我们就需要去网络上搜索了。 ![](http://img.classinstance.cn/20210311/1615451463582.jpg) 这里分享几个网站,大家可以从上往下搜索你想要的jar包。 #### mvnrepository http://mvnrepository.com/ #### maven.org http://search.maven.org/ #### sonatype.org https://re...

maven修改jar包版本不生效解决办法

原创 2021-03-10 16:18 阅读(755)次
今天在maven中修改一个jar包版本,想升级版本,却一直不生效。 pom文件如下: ```xml org.eclipse.jgit org.eclipse.jgit 5.1.3.201810200350-r ``` 在当前工程查看这个jar包的版本是改过来了,从4.1变成了5.1。 如下图所示: ![](http://img.classinstance.cn/20210310/1615363943882.jpg) 但是在另一个工程中引用这个工程时,这个jar包的...

Thumbnails使用方法(java图片处理工具类)

转载 2021-03-09 14:10 阅读(116)次
本文链接:https://blog.csdn.net/qq_25508039/article/details/82257436 #### 介绍 我们在java开发时,使用Thumbnails工具类能帮助我们对图片进行很好的处理,Thumbnails对图片的操作进行了很好的封装,往往很复杂的步骤能用一行代码就完成。 Thumbnails支持: - 1. 指定大小进行缩放 - 2. 按照比例进行缩放 - 3. 不按照比例,指定大小进行缩放 - 4. 旋转 - 5. 水印 - 6. 裁剪 - 7. 转化图像格式 - 8. 输出到OutputStream - 9. 输出到B...

java中BufferedImage转成 base64字符串

原创 2021-03-08 17:14 阅读(1062)次
java中BufferedImage转成base64字符串,代码如下: ```java /** * BufferedImage转成 base64 * @param bufferedImage * @param imageFormatName * @return * @throws IOException */ public static String getBufferedImageToBase64(BufferedImage bufferedImage,String imageFormatName...

java下载图片

原创 2021-03-08 17:10 阅读(104)次
如何在后端代码中,使用java下载图片? 代码分享如下: ```java /** * 下载图片 * @param url * @return */ public static BufferedImage downLoad(String url) { // 获得Http客户端 CloseableHttpClient httpClient = HttpClientBuilder.create().build(); // 创建Get请求 HttpGet ht...

图片的base64字符转成BufferedImage

原创 2021-02-23 17:43 阅读(198)次
图片的base64字符转成BufferedImage 代码如下: ```java import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.Base64; import java.util.Base64.Decoder; public class ImageUtils { /** * base64 编码转换为 ...

java使用BufferedImage放大或缩小图片

原创 2021-02-23 11:32 阅读(356)次
BufferedImage可以用来简单编辑图片:包括裁剪、放大、缩小等。 下面贴的是利用BufferedImage做图片放大或缩小代码: ```java String imageBase64 = "xxxxxx";//图片base64字符串 BufferedImage image = ImageUtils.base64ToBufferedImage(imageBase64); int width = image.getWidth(); int height = image.getHe...

java使用guava cache实现本地缓存

原创 2021-02-04 15:39 阅读(559)次
在高并发的场景中我们不希望所有请求都打到数据库中,以免压垮数据库,这时我们就可能会使用本地缓存来实现解决并发性能问题,当然我们也可以选择redis来实现,但redis有时并发也并没有那么快。于是本地缓存就是我们的唯一救命手段了。 Guava的cache是线程安全的,是本地缓存的不二之选,默认情况下缓存过期是依赖于访问判断时间过期和数量限制过期。 我们再也不用自己手写一个基于ConcurrentHashMap的本地缓存了 #### maven引入guava包 ```html com.google.guava guava 18.0 ...

java stream List转Map与List转List与Map转List

原创 2021-02-03 17:26 阅读(1116)次
我们写代码时经常会遇到List转Map或List转List,Map转List,看到我这标题有没有要晕(我在说什么??转来转去)。之前没有用stream的时候,都是用for循环转换,现在jdk8提供流式处理,性能稍快,还方便。 下面记录一下代码,免得自己老是不记得如果编写stream. #### List转Map ```java Map tgMap = tgList.stream().collect(Collectors.toMap(BazTgTO::getTgId, n -> n)); ``` #### Map转List ```java list = dbFilterM...

mybatis一条语句实现一对一,一对多查询

原创 2021-01-26 14:56 阅读(151)次
有时我们要查询多张子表,或关联子表查询,如查询用户信息时,想要带出部门信息,正常使用mybatis要写两条语句,一个查询用户信息,一个查询部门信息,那么使用mybatis如何一条语句做到查询出多个对象信息呢? ##### 参考如下文章 [https://blog.csdn.net/qq_44066201/article/details/99656030](https://blog.csdn.net/qq_44066201/article/details/99656030 "https://blog.csdn.net/qq_44066201/article/details/99656030"...

java父类转子类报错?怎么办?如何父类转子类

原创 2021-01-21 15:01 阅读(208)次
我们java程序员经常会用到子类继承父类,在开发过程中就会遇到子类转父类,父类转子类的问题。 子类转父类不会报错,但父类转子类强转是不会报错的,但运行后就报错了,代码如下: public class UserInfo { private String userName; public UserInfo() { } public String getUserName() { return userName; } public void setUs...

mybatis设置全局变量

原创 2020-12-29 15:19 阅读(596)次
clickhouse在分布式子查询中会将语句发送到多个分片执行,如果语句中的表前不写上库名,查询时会报在default库中找不到表,所以我们需要给每个clickhouse的查询中都写上库名,这样才能正常执行。但库名写死在语句中并不优雅,万一库名修改或测试环境的库名不同,我们开发要将这么多查询语句都要修改,不得累到死,于是就要将clickhouse库名进行配置到公共变量,并在mybatis中获取。下面分享下如何在mybatis设置和全局变量。先要spring boot配置文件中定义需要设置的全局配置,然后在clickhouse的mybatis sessionFactory中设置全局变量,这样my...

java数组转list

原创 2020-12-16 17:54 阅读(218)次
java中数组如何转list或者说ArrayList,每次码代码时,遇到这个问题都要想一下,这里给自己记录下,免得每次都跳坑。数组转list,有两种方法,代码如下: //方法一 List<String> lista = Arrays.asList(split); //方法二 List<String> listb = new ArrayList<>(split.length); Collectio...

spring boot项目默认日志配置

原创 2020-11-26 17:43 阅读(244)次
spring boot默认日志为logback打印,默认不配置也可以打印日志,但生产环境中这样容易让日志打到机器磁盘不足,所以我们还是需要配置一下的:logging: file: name: app.log path: /home/java/ max-size: 50MB max-history: 7

quartz定时器改名后报错,删除多余的定时表数据

原创 2020-09-27 16:55 阅读(500)次
quartz定时器改名后报错,需要清除原来表中的对应数据,删除多余的定时表数据删除语句如下,对应的定时信息要传入:DELETE from qrtz_cron_triggers where TRIGGER_NAME = 'personTimeSpaceTaskTrigger'; DELETE from qrtz_triggers where TRIGGER_NAME = 'personTimeSpaceTaskTrigger'; DELETE from qrtz_job_details where JOB_NAME = 'personTimeSpaceTask'; DELETE from ...

springboot项目初始化druid连接池时报错java.lang.NullPointerException: null

原创 2020-04-27 18:25 阅读(1711)次
新创建了一个springboot项目,一顿配置,以为能正常启动,结果打脸了,报错了:2020-04-27 18:14:04.655 ERROR 18376 --- [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} init error java.lang.NullPointerException: null at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:325) ~[na:1.8.0_191] at jav...

maven deploy新包到私服,别的工程不会自动引用新包的问题

原创 2020-04-15 17:41 阅读(888)次
在idea中将公共jar包maven deploy自动上传私服后,我并没有修改包的版本,同事在别的工程clean install后发现引用的还是原来的包。后来才发现,别人如果想使用这个最新的包,可以在idea的Maven Projects视图中点reimport,就可以了。install为什么不能下载新包呢,原来同样的版本情况下,install默认找本地的,所以才会出现引用的旧包的问题。也可以设置仓库的<updatePolicy>属性,参考https://www.iteye.com/blog/quinnhe-2066831