Java
文章平均质量分 72
Java相关的知识体系
東辰
让天下没有难写的代码
展开
-
Java:使用BigDecimal的一些注意事项(转)
BigDecimal转载 2023-02-17 08:41:12 · 377 阅读 · 1 评论 -
Linux:记录一次完整的后端项目部署过程
公司的CI/CD环境出现了故障,影响项目联调测试,于是协调运维给了台服务器,准备自己来玩初步设想是通过脚本一键自动从git拉代码、maven自动打包、自动启动项目已装好Centos、有外网先建好目录1. 安装Java参考网上资料,jdk要求建议1.8+我安装的是 ,先把包下载下来,然后上传到服务器(我是在目录下建了个java目录,然后把包上传到这个目录),然后执行如下命令解压然后配置一下环境变量在最后面加上然后执行如下命令让环境变量生效最后验证一下,输入:,看到如下则代表成功我是先移除了服务器自原创 2022-09-22 20:15:28 · 1016 阅读 · 0 评论 -
Java:kafka多topic在配置文件中如何配置以及@kafkaListener中如何注入配置中的多topic
kafka多topic在配置文件中如何配置以及@kafkaListener中如何注入配置中的多topic原创 2022-08-11 20:14:44 · 3196 阅读 · 0 评论 -
Java:Optional详解(源码阅读与应用)
前言Optional对象应该来说在实际应用中还是很广泛的,最近写了篇文章讲解java.util.function包中的几个常见类:Consumer、Supplier、Predicate、Function等的用法,然后举例时也用Optional对象进行了举例,可能有些小伙伴对它的用法还不是很了解,所以我今天就单独列一篇文章出来讲讲我们来看一下Optional的源码,或者点此直达正文public final class Optional<T> { private static fi原创 2021-08-05 19:27:27 · 479 阅读 · 0 评论 -
Java:Consumer、Supplier、Predicate、Function详解
前言在JDK1.8+的环境中,我们会经常使用到Lambda表达式进行编程,会发现Lambda表达式很多参数都需要用到Consumer、Supplier、Predicate与Function这些接口参数,比如我们经常用到的循环写法,中间就用到了这些类型参数,看一下下面这段代码List<String> list = Arrays.asList("jack", "rose", "zhangsan", "wangwu");list.forEach(System.out::println);可以原创 2021-08-05 00:43:54 · 2072 阅读 · 0 评论 -
Java:Spring HttpStatus源码阅读与扩展
前言今天在阅读Spring工具包中的org.springframework.http.HttpStatus源码,发现我们平时在使用RestTemplate调接口的时候,如果需要判断接口的状态是200、500或者其它状态时,可以直接使用HttpStatus封装的判断方法HttpStatus源码/* * Copyright 2002-2019 the original author or authors. * * Licensed under the Apache License, Version原创 2021-08-03 12:00:38 · 1207 阅读 · 0 评论 -
Java:(一)Sentinel初探-接口限流
前言最近在做一个小项目,对限流有些要求,遂想到引入Sentinel来实现下面记录一下大致步骤:Sentinel Dashboard先按照官方文档的要求,将Dashboard下载跑起来,可以下载jar包直接跑,或者把项目clone下来,直接跑Dashboard这个子项目jar包(项目)跑起来后默认端口是8080,也可以可使用 -Dserver.port=新端口 进行设置java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhos原创 2021-07-29 10:08:05 · 719 阅读 · 0 评论 -
Postman:设置环境变量及公共参数
前言目前很多项目都是前后端分离的形式,使用token作为接口调用的凭证,流程一般是这样的:先调登录接口,输入正确的用户名密码,后台校验通过返回带失效时间的凭证(token),后续调用其它接口都需要在请求头中带上这个token才能请求成功,比如下面就是一个登录接口,登录成功后返回了token信息其它接口都需要在请求头中带上一个key为“token”的请求头,请求头的value为上一步登录成功后返回的tokenHead和token拼接出来的字符串参数可以看到,上面的请求地址我写的是localhost、原创 2021-06-09 15:41:14 · 3979 阅读 · 0 评论 -
Java:(二)自己动手实现一个好用的SpringBoot后端框架(集成代码生成工具、Swagger)
前言本篇文章是《自己动手实现一个好用的后端框架》的第二篇文章上一篇地址:《(一)自己动手实现一个好用的后端框架-项目搭建》上一篇讲到了配置文件的部分,接下来我们继续讲组件具体怎么在代码中集成和配置正式开始下面关于配置的部分,我们统一放在/src/main/java/com/yinchd/web/config目录中1、ConfigCenter配置中心,我们将Druid的配置信息配置在其中package com.yinchd.web.config;import com.alibaba.dru原创 2021-04-25 19:52:16 · 694 阅读 · 1 评论 -
Java:(一)自己动手实现一个好用的SpringBoot后端框架(项目搭建、组件依赖)
前言这次准备分享一篇教程:如何自己动手实现一个好用的后端框架,我会尽量使用循序渐进的方式,从项目搭建开始,到集成各种组件,到最后架构完成,并集成基础的用户体系,一步步说明如何搭建一个属于自己的后端框架。基于现在大部分项目都是前后端分离的形式,因此本项目也是一个纯后端的架构,基于循序渐进的原则,我打算先以 SpringBoot 单体项目的形式入手,先说明如何一步步集成各种组件,到最后形成一个完整的架构,后续有空的话,我会再以微服务的形式更新一篇教程。限于我的技术水平也有限,抱着一起学习、共同进步的心态,原创 2021-04-25 18:16:11 · 3147 阅读 · 3 评论 -
Java:CompletableFuture的一些使用方法
定义CompletableFuture,实现了Future和CompletionStagepublic class CompletableFuture<T> implements Future<T>, CompletionStage<T> { ...}用法supplyAsync supplyAsync(Supplier<U> supplier, Executor executor)异步,有返回值Callable就是Supplier的一个实原创 2021-04-23 20:14:52 · 1931 阅读 · 0 评论 -
Java:Runnable和Callable<V>以及FutureTask
一、两者的使用区别Runnable实现Runnable的run方法,无返回值,无法抛出异常class RunnableTest implements Runnable { @Override public void run() { System.out.println("我是Runnable"); }}使用直接通过线程来调用Thread thread = new Thread(new RunnableTest(), "线程");thread.star原创 2021-04-23 00:31:10 · 356 阅读 · 2 评论 -
Java:自己动手实现一个好用的MybatisPlus代码生成器
如果大家的项目持久层集成的是MybatisPlus,那我们来手动撸一个好用的代码生成工具一、先看下项目结构CodeGenerator:生成器主类resources下的mapper.java.vm:一个模板类,用以在生成dao层时按模板来生成代码比如我们想把代码按如下目录来生成:代码层代码生成位置Controller层com.yinchd.web.controllerService层com.yinchd.web.serviceService实现类com.原创 2021-04-23 00:31:50 · 2127 阅读 · 12 评论 -
Java:通过读取文件头来得到文件真实类型
誊抄自原来的笔记背景有时我们需要对上传的文件进行判断文件类型,一般我们可以通过扩展名来判断文件属于什么类型,但是当文件没有扩展名或者一张图片改成了txt,我们通过扩展名的方式来判断是不是就不太合适了呢,其实我们可以根据文件中的文件头来判断实际文件类型一,新建文件枚举类(文件类型与文件头之间的映射关系)package cn.test.enums;/** * 用于判断上传文件的真实文件类型的枚举类 */public enum FileType { /** * JEPG. */.原创 2021-04-22 10:42:54 · 979 阅读 · 0 评论 -
Java:从原理入手,自己动手实现一个好用的Excel导入导出工具集
一、前言现在市面上已经有很多优秀的excel处理工具类,比如出自阿里的 EasyExcel,已经很好用了,我们为什么还要自己动手去实现一个呢?因为每个项目需求不一样,万一项目里有一些奇形怪状的需求,现有组件无法很好的满足,是不是需要自己去定制?有现成的工具类固然是一件好事,但是当现成的工具类无法满足当前需求的时候,如果我们能参考这些工具的实现原理,自己去动手撸一个差不多功能的组件,并且加上自己想要的功能,还运用到实际项目中去检验,是不是一件很有成就感的事?本文准备实现的这个工具组件是18年还原创 2021-04-20 23:45:30 · 2113 阅读 · 7 评论 -
Java:ConcurrentHashMap 中十个提升性能的细节,你都知道吗?
ConcurrentHashMap 是 Java 中支持高并发、搞吞吐量的线程安全 HashMap 实现。在这之前很多人对 ConcurrentHashMap 只有一些肤浅的理解,仅知道它采用了多个锁,大概也足够了。但想提升性能可远不止这些,本文详细阐述了 ConcurrentHashMap 技术细节,随小编一起来看看吧。一、一些题外话如何在高并发下提高系统吞吐是所有后端开发者追求的目标,Java并发的开创者 Doug Lea 在 Java 7 ConcurrentHashMap 的设计中给出了一些.转载 2021-04-20 14:38:20 · 1985 阅读 · 0 评论 -
Java:自己实现Mysql代码生成器的一些想法
背景交待:这是之前记录的一篇日志,那时在做一个政府类项目,表字段名称是汉语拼音缩写,往往都是大表,十几二十几个字段都是家常便饭,读起来很不方便,于是想着每次写sql查询时都将表注释显示为字段名称,这样就方便知道每个字段是什么含义了,于是开始研究,怎么自动生成sql语句并且将字段注释显示为title,想要的效果如下:效果如上图:就是查询结果中将字段注释显示成 title,方便知道是啥意思,因为项目涉密的原因,关键信息打了码先看这个sql语句的效果SELECT t.* FROM informa.原创 2021-04-15 10:17:39 · 296 阅读 · 0 评论 -
Java:ElasticSearch 解析 GeoPoint 类型异常解决
今天在做数据同步到ES的过程中,发现数据经纬度数据无法插入到es中,经排查,记录如下:报了如下异常:代码里是通过ES的GeoPoint来存数据刚开始找问题,报错的原因,同事说要纬度在前,经度在后,我发现我确实写反了,如果调整过来,还是报错打印经纬度没有发现异常:于是在网上找解决办法,找到一篇文章,es支持的数据导入格式:于是想着不用GeoPoint,改为上述第二种方式,字符串的形式,于是,数据库查询出来的字段就是拼接好的字段:...原创 2021-04-15 09:34:16 · 4334 阅读 · 0 评论 -
Java:基于Java的爬虫程序示例
这是一篇17年记的笔记,现在笔记vip过期了,懒得充值,现在把笔记都搬到CSDN上来,所以这篇文章属于从笔记誊抄过来的,那时的老代码,可能写的不够好,但是那个时候解决了朋友的一个小小需求,大家自行取舍看是否有帮助昨天一朋友打来电话,问能不能帮忙写个程序从一个网站上抓一些数据,然后能通过Excel汇总出来,之前他是一条一条数据去查,查出来后复制粘贴到Excle里,比较耗时耗力,他大概说了下场景,大致是这样的:先输入车牌号,点击查询按钮,查出车辆基本信息;然后点击基本信.原创 2021-04-14 15:57:26 · 876 阅读 · 1 评论 -
Java: 基于Redis Geo实现的坐标距离计算
Redis在3.2版本之后加入了Geo支持,我们可以据此实现不同坐标点的距离计算、排序等功能,从而实现类似 附近的人、附近的餐厅 等功能,本文主要简介一下使用方法,没对原理进行深究,感兴趣的同学可自行研究一、添加Redis依赖<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.5.2.原创 2021-04-12 19:21:46 · 2289 阅读 · 1 评论 -
Java: 基于Guava CacheBuilder实现的本地缓存容器
一、前言之前在代码中需要使用缓存的时候,一般考虑使用 Redis,比如将频繁使用到的并且变化比较少的对象序列化到 redis 中,要用的时候先从 redis 获取,如果获取不到的时候,再从库里查询,然后再序列化到 redis 中。后来接触到 Google Guava 包下的 CacheBuilder 对象,经研究,是将数据存储在程序运行期间的内存区,跟 redis 相比,更轻量,redis 可以以集群的方式部署,也可以在单服务器环境使用,大家可以根据实际情况进行选择。我说一下我的使用场景,我是一个 Sp原创 2021-03-17 10:52:41 · 1159 阅读 · 0 评论 -
Java: 在子线程或者异步情况下使用RequestContextHolder.getRequestAttributes()的注意事项
注意事项:1、不要在请求方法里另起一个子线程调用该方法;2、在请求周期中,尽可能不要传递Request实例给多线程使用,因为子线程可能在Request生命周期结束销毁后再使用Request时获取不了参数,否则必须同步线程 让其在生命周期结束前调用;在Spring Boot中,如果我们要获取当前Request实例,可以通过以下这个方法获取。在Spring Boot中,如果我们要获取当前Request实例,可以通过以下这个方法获取。HttpServletRequest request = ((Se转载 2021-03-17 09:45:25 · 7150 阅读 · 2 评论 -
Java: 加密配置文件中的敏感信息
一、使用Druid自带的加密方式先来看不对密码进行加密的配置datasource: name: druidDataSource type: com.alibaba.druid.pool.DruidDataSource druid: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://ip:port/db?useUnicode=true&zeroDateTimeBehavior=convertT原创 2021-03-16 17:06:20 · 1595 阅读 · 4 评论 -
Java: LocalDate、LocalDateTime、Duration、Period、TimeUnit类的一些用法
一、LocalDate初始化操作// 获取当前年月日LocalDate now = LocalDate.now();System.out.println(now); // 2021-03-13// 指定年、月、日创建日期LocalDate d = LocalDate.of(2077, 1, 1);System.out.println(d); // 2077-01-01// 通过字符串形式创建LocalDate d1 = LocalDate.parse("2077-10-01");Sy原创 2021-03-13 15:24:20 · 1558 阅读 · 0 评论 -
Java: ParameterizedType用法与简介
先说结论:ParameterizedType 意为参数化类型一、何为参数化类型? 先看个例子1、先定义一个待反射的对象,然后用 field.getGenericType() instanceof ParameterizedType 来判断字段是否是泛型类型public class ReflectTestBean { List<String> list1; List list2; Map<String, Integer> map1; Ma原创 2021-03-12 18:50:27 · 4780 阅读 · 1 评论 -
Java: Pattern类的使用简介
一、先看两个常用的例子例一:@Testpublic void test() { Pattern p = Pattern.compile("\\d+"); Matcher m = p.matcher("22bb33"); // 返回false, 因为字符串中含有bb,所以不能全匹配 System.out.println(m.matches()); // 返回true,因为22、33满足条件 System.out.println(m.find());原创 2021-03-12 16:28:14 · 2112 阅读 · 0 评论 -
Java: isAssignableFrom()和instanceof的区别
区别isAssignableFrom()判断某个class是否为另一个class的父类,是从类继承的角度来判断,比如 :List.class.isAssignableFrom(ArrayList.class);instanceof判断子类实例是否属于父类类型,是从实例继承的角度来判断,比如:List<String> list = new ArrayList<>();System.out.println(list instanceof List);原创 2021-03-11 15:34:27 · 517 阅读 · 1 评论 -
Sharing is only supported for boot loader classes because bootstrap classpath has been appended解决办法
idea启动项目的时候报了如下错误:OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended解决办法:打开idea设置,搜索框输入‘async’,去掉如下勾成功解决:...原创 2019-09-12 09:54:12 · 26973 阅读 · 12 评论