JAVA
IOsetting
呵
展开
-
VSCode 配置 Spring Boot 项目开发环境
神器IDEA在升级到2023之后越发卡顿, EDU邮箱也不能用了, 照现在这个JDK版本的升级速度, 神器不升级也不行, 需要开始物色替代品. VSCode还是比较熟悉的, 可以作为备选项. 两三年前曾经试过配置Java环境, 存在不少问题作罢. 最近搜了下相关的文章, 感觉VSCode对Java项目的支持比三年前完善了不少. 今天实际配置了一下环境, 把自己常用的功能过了一遍, 基本能跑通开发流程, 做个笔记.原创 2024-03-10 18:45:33 · 3855 阅读 · 1 评论 -
在 Spring Boot 3.x 中使用 SpringDoc 2 / Swagger V3
SpringDoc V1 只支持到 Spring Boot 2.x, springdoc-openapi v1.7.0 is the latest Open Source release supporting Spring Boot 2.x and 1.x. Spring Boot 3.x 要用 SpringDoc 2 / Swagger V3, 并且包名也改成了 springdoc-openapi-starter-webmvc-ui原创 2024-03-01 19:10:04 · 875 阅读 · 0 评论 -
Java Websocket 02: 原生模式通过 Websocket 传输文件
服务端和客户端的 onMessage() 方法可以存在多个, 分别用于处理不同格式的内容, 传输文件时需要使用 ByteBuffer 类型的消息处理, 在处理过程中和普通的文件传输是一样的, 需要将文件分片传输, 并约定合适的消息头用于判断文件传输的阶段, 在服务端根据不同的阶段进行文件创建, 写入和结束原创 2023-06-19 08:59:27 · 3609 阅读 · 1 评论 -
Java Websocket 01: 原生模式 Websocket 基础通信
原生模式下, 服务端通过 @ServerEndpoint 实现其对应的 @OnOpen, @OnClose, @OnMessage, @OnError 方法, 客户端创建 WebSocketClient 实现对应的 onOpen(), onClose(), onMessage(), onError()原创 2023-06-18 21:58:46 · 1748 阅读 · 0 评论 -
Spring Cloud开发实践(七): 集成Consul配置中心
Consul 通过 Key/Value 功能集中管理存储配置信息, 通过 Spring Cloud Consul Config 可以实现 Config Server 和 Client 的关联. 在 Spring 启动的 bootstrap 阶段, 配置会被载入环境上下文.原创 2023-06-01 18:27:57 · 1350 阅读 · 0 评论 -
Spring Cloud开发实践(六): 基于Consul和Spring Cloud 2021.0的演示项目
2018年写的Spring Cloud介绍, 距今已经过去五年, 一些组件和版本已经发生变化. 这篇文章在上一篇介绍 Consul 的基础上, 介绍基于 Consul 的 Spring Cloud 演示项目原创 2023-05-18 08:36:34 · 600 阅读 · 0 评论 -
Spring Cloud开发实践(五): Consul - 服务注册的另一个选择
Consul 是微服务网络解决方案之一, 用于管理跨网络和多云环境服务之间的安全网络连接, 提供服务发现, 服务网格, 流量管理和自动更新. 可以单独部署, 也可以分布式部署. Consul 内建安全通信选项, 使用 Go 语言编写, 启动资源消耗小, 脚本化配置, 对容器部署方式更友好原创 2023-05-17 23:43:32 · 812 阅读 · 0 评论 -
Ubuntu/Centos下OpenJ9 POI输出Excel的Bug
项目更换 JDK为 OpenJ9 后, 使用 POI 导出 Excel 遇到的问题 OpenJ9 版本信息 使用下面的代码, 通过 SXSSFWorkbook 实例生成 2017格式的excel原创 2023-02-10 18:08:50 · 893 阅读 · 2 评论 -
Apache HttpClient 5 笔记: SSL, Proxy 和 Multipart Upload
HttpClient 版本已经到 5.2.1 了. 在版本4中的一些方法已经变成 deprecated, 于是将之前的工具类升级一下, 顺便把中间遇到的问题记录一下原创 2022-12-31 23:47:05 · 3210 阅读 · 0 评论 -
未配置Datasource时, 启动 SpringBoot 程序报错的问题
因为SpringBoot配置了自动的数据源初始化, 启动阶段会尝试初始化数据源, 如果不需要数据源, 需要特殊指定, 可以在配置类中禁用datasource相关的自动配置原创 2022-12-31 21:06:22 · 1258 阅读 · 0 评论 -
xxl-job定时调度任务Java代码分析
用xxl-job做后台任务管理, 主要是快速解决定时任务的HA问题, 项目代码量不大, 功能精简, 没有特殊依赖. 因为产品中用到了这个项目, 上午花了点时间研究了一下运行机制. 把看到的记一下原创 2022-12-20 21:03:17 · 987 阅读 · 0 评论 -
二进制文件转Hex和Wav文件转Hex的Java代码
二进制文件转Hex, Wav文件转Hex的Java代码原创 2022-12-18 17:14:00 · 505 阅读 · 0 评论 -
AsyncHttpClient And Download Speed Limit
AsyncHttpClient Official repository and docs: https://github.com/AsyncHttpClient/async-http-clientMaven Dependency Check the latest version of async-http-client at https://mvnrepository.com/artifact/org.asynchttpclient/async-http-client原创 2022-12-04 22:34:10 · 598 阅读 · 0 评论 -
Nebula Graph介绍和SpringBoot环境连接和查询
当前Nebula Graph的最新版本是3.2.1, Nebula Graph 的一些特点 1. 支持分布式. 相对于Neo4j, TigerGraph这些图数据库, Nebula 是面向分布式设计的, 因此对集群的支持比较完备, 在规模上上限要高很多. 在实际项目中存储了180亿的点边, 这个数量对于Neo4j和TigerGraph是比较困难的. 1. 支持图空间. 各个图空间的ID是互不干扰的, 但是在同一个图空间里ID的类型和长度必须一致. 注意这个一致约束的是所有的点和边. Nebula 可以使用原创 2022-10-12 12:11:57 · 2122 阅读 · 6 评论 -
SpringBoot+MyBatis Plus对Map中Date格式转换的处理
如果 JSON 都是类定义的, 这个序列化和反序列化就非常透明 -- 不需要任何干预, 写进去是什么, 读出来就是什么. 但是如果 JSON 在 Java 代码中是定义为一个 Map, 例如 Map 那么就有问题了, 对于 Date 类型的数据, 在存入之前是 Date, 取出来之后就变成 Long 了.原创 2022-10-10 10:33:21 · 1446 阅读 · 0 评论 -
Java 根据Map的值对 List<Map<String, Object>> 进行排序
有一个Map列表, 需要对这个列表, 按Map的某几个value进行排序, 并且还要分别指定正序或者倒序. 这个实现在数据库中是非常简单的, 一串 order by col1 asc, col2 desc 搞定, 但是在Java中, 就会比较啰嗦. 记录一下, 在对比两个具体值的时候, 区分类型实现的compare方法....原创 2022-08-25 19:59:38 · 1351 阅读 · 0 评论 -
MyBatis 及 MyBatis Plus 纯注解方式配置(Spring Boot + Postgresql)
Spring Boot + MyBatis. 以下说明Spring Boot下完全以注解方式进行的配置, 覆盖大部分功能场景, 项目需要以下的依赖, 版本由Spring Boot指定, 或者参考上面的版本号原创 2022-04-04 20:21:37 · 3753 阅读 · 0 评论 -
SpringBoot 2.6 和 JUnit 5 的测试用例注解和排序方式
JUnit5 的测试注解在JUnit5中, 不再使用 @RunWith 注解, 改为使用 @ExtendWith(SpringExtension.class)@ExtendWith(SpringExtension.class)@SpringBootTestpublic class AccountTest { @Resource AccountMapper accountMapper; @Test void test1_list() { System.原创 2022-03-08 23:46:52 · 497 阅读 · 0 评论 -
Spring的接口集合注入功能
Spring的接口集合注入功能对于Spring中已经注入的bean, 可以使用Autowired, 通过Map<String, BeanInterface>或List<BeanInterface>的方式直接注入实现步骤定义一个接口实现这个接口的一系列类, 都加上 @Component 或者 @Service 注解, 使其成为 spring bean在其他类中, 通过 @Autowired private Map<String, InterfaceName> i原创 2022-03-08 23:45:43 · 436 阅读 · 0 评论 -
Java架构系列问题合集-目录
分类说明关于Java项目研发和架构工作需要了解的问题, 目录, 链接入口原创 2022-01-29 17:22:12 · 1617 阅读 · 0 评论 -
Windows下,SpringBoot JDBC无法连接的问题
问题症状在Win7和Win10下启动时均会出现下面的错误,但是在OSX和Linux下没问题com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failureThe last packet successfully received from the server was 18,982 m...原创 2020-10-30 14:37:00 · 1206 阅读 · 0 评论 -
Seata的分布式事务实现原理
Seata分布式事务方案简介Seata是阿里开源的分布式事务解决方案中间件,对业务侵入小,在应用中Seata整体事务逻辑基于两阶段提交的模型,核心概念包含三个角色:TM:事务发起者。用来告诉TC全局事务的开始,提交,回滚。RM:事务资源,每一个RM都会作为一个分支事务注册在TC。TC:事务协调者,即独立运行的seata-server,用于接收事务注册,提交和回滚。Seata的运行...原创 2020-09-30 19:13:00 · 434 阅读 · 0 评论 -
Java的协程Quasar
协程是对函数和线程进一步优化的产物, 是一种函数的编排方式, 将传统意义上的函数拆成更小粒度的过程. 简单说, 就是比函数粒度还要小的可手动控制的过程.协程可以通过yield 来调用其它协程,接下来的每次协程被调用时,从协程上次yield返回的位置接着执行,通过yield方式转移执行权的协程之间不是调用者与被调用者的关系,而是彼此对称、平等的。协程vs函数函数可以调用其他函数,调用者等待...原创 2020-09-15 15:24:00 · 333 阅读 · 0 评论 -
串口设备短信模块开发笔记
硬件设备首先是硬件设备,这类短信模块,modem pool大都是基于Q2406A, Q2406B之类的串口设备,只支持GSM和GPRS,不支持电信CDMA,早先的设备只有COM口,如果是一个pool,对应每一个模块都会引出一个COM口,后来出的设备改成了USB2.0接口,其芯片主要是PL2303系列的USB2 Serial Comm方案。在连接到主机后,每一个模块都会显示为一个单独的COM口,...原创 2020-08-22 22:07:00 · 562 阅读 · 0 评论 -
CyclicBarrier的使用
CyclicBarrierCyclicBarrier机制和join()类似, 对于需要等待多个线程执行完成后再继续的场景, 都可以使用CyclicBarrier. 其使用方法是在主线程创建一个CyclicBarrier实例, 设置信号量, 设置结束时的回调方法, 然后在各个工作子线程的末尾调用这个CyclicBarrier实例的await()方法. 其时间顺序为:子线程在调用await(...原创 2020-04-30 17:30:00 · 70 阅读 · 0 评论 -
多模式匹配的Trie实现
业务场景这种需求一般用于敏感词过滤等场景, 输入是大文本, 需要快速判断是否存在匹配的模式串(敏感词), 或者在其中找出所有匹配的模式串. 对于模式串数量不超过5000的场景, 直接用暴力查找速度也能接受, 对于更大规模的模式串, 需要对匹配进行优化.实现原理带Fail Next回溯的Trie树结构是常见的实现方法, 算法原理可以自行查找"多模式匹配算法". 在实际使用中, 对于中文的模式...原创 2020-04-28 16:08:00 · 142 阅读 · 0 评论 -
MyBatis Interceptor
MyBatis的拦截器可以用于在以下对象及方法中拦截修改:Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)ParameterHandler (getParameterObject, setParameters)ResultSetHandler (hand...原创 2020-04-21 18:06:00 · 185 阅读 · 0 评论 -
适用于Spring Boot Jar的启停部署脚本
shell脚本参数使用-z或-n对一个变量判空时, 若直接使用[ -n ARG ]这种形式,当{ARG}中有空格将会报错,line 27: [: sd: binary operator expected需要使用[[ -n ${ARG} ]] 或 [ -n "${ARG}" ]完整脚本# Please define the absolute path of tomcat instanc...原创 2020-03-15 17:53:00 · 177 阅读 · 0 评论 -
RabbitMQ笔记
RabbitMQ服务RabbitMQ官网地址:https://www.rabbitmq.com/ 下载页:https://www.rabbitmq.com/download.html用Docker启动RabbitMQ服务根据下载页上的说明docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq...原创 2020-03-13 18:51:00 · 70 阅读 · 0 评论 -
Mybatis的缓存过期机制和RedisCache
MyBatis的缓存过期机制, flushInterval参数在实际测试中, 发现Redis中的缓存数据TTL为-1, 在Hash中的key也无过期时间信息, 怀疑RedisCache的实现是否能正常处理缓存过期, 因此一路追查到了MyBatis的代码.MyBatis在每个Mapper中, 可以设置参数flushInterval 用来控制缓存的过期时间, 这个参数, 在 MapperBui...原创 2020-02-21 14:38:00 · 666 阅读 · 0 评论 -
Java多个线程顺序打印数字
要求启动N个线程, 这N个线程要不间断按顺序打印数字1-N. 将问题简化为3个线程无限循环打印1到3方法一: 使用synchronized三个线程无序竞争同步锁, 如果遇上的是自己的数字, 就打印. 这种方式会浪费大量的循环public class TestSequential1 { private volatile int pos = 1; private volat...原创 2019-08-06 19:10:00 · 98 阅读 · 0 评论 -
Java多线程的Callable, Future, FutureCallback, CompletableFuture
Callable可以看成是一个增强版的Runnable, 带返回结果, 需要通过Future或者FutureTask来提交任务或运行线程, 然后通过Future/FutureTask的get方法得到返回结果.Callable在子线程中运行, 在主线程中异步得到执行结果(get()方法是阻塞的), 或者检查是否已取消, 是否已完成(检查取消和完成的方法是非阻塞的)通过Thread子线程启动这...原创 2019-08-05 15:36:00 · 372 阅读 · 0 评论 -
Java多线程的Semaphore
Semaphore 信号量, 在多线程应用中, 用来控制同时访问某个特定资源的操作数量, 或者同时执行某个指定操作的数量, 还可以用来实现某种资源池限制, 或者对容器施加边界. 简单地说, Semaphore就是synchronized的加强版, 可以控制线程的并发数量.控制对某一方法并发的访问数量public class DemoSemaphore { # 1表示同时只允许1个线...原创 2019-08-04 01:03:00 · 119 阅读 · 0 评论 -
Spring Boot方式的Dubbo项目
项目依赖需要org.apache.dubbo.dubbo-dependencies-bom, 需要org.apache.dubbo.dubbo-spring-boot-starter, 当前版本有2.7.0和2.7.1, dubbo版本已经发布到2.7.2了, 但是starter还没更新到2.7.2, 所以整体使用2.7.1版本另外就是spring-boot的org.springframew...原创 2019-07-16 12:10:00 · 194 阅读 · 0 评论 -
Java线程的wait(), notify()和notifyAll()
Java线程生命周期类java.lang.Thread包含一个静态的State enum用于定义每种可能的状态. 在任意的时间点, 线程会处于以下的状态之一: NEW – 新创建的线程, 还未启动(在调用 start() 之前的状态).A thread that has not yet started is in this state.RUNNABLE – 正在运行或已经准备好运行但是在...原创 2019-05-18 01:48:00 · 154 阅读 · 0 评论 -
Java线程同步的Monitor机制(Lock配合Condition)
Monitor模式是一种常见的并行开发机制, 一个Monitor实例可以被多个线程安全使用, 所有的monitor下面的方法在运行时是互斥的, 这种互斥机制机制可以用于一些特性, 例如让线程等待某种条件, 在等待时线程会将CPU时间交出去, 但是在条件满足时确保重新获得CPU时间. 在条件达成时, 你可以同时通知一个或多个线程. 这样做有以下的优点:所有的同步代码都集中在一起, 用户不需要知...原创 2019-05-17 20:09:00 · 182 阅读 · 0 评论 -
堆排序Heapsort的Java和C代码
Heapsort排序将整个数组看作一个二叉树heap, 下标0为堆顶层, 下标1, 2为次顶层, 然后每层就是"3,4,5,6", "7, 8, 9, 10, 11, 12, 13, 14", ..., 对于其中的每一个非叶子节点, 其子节点的下标为 2 * pos + 1 和 2 * pos + 2循环进行以下工作:标记当前堆的右边界将堆初始化为大顶堆将堆顶置换到右边界, 同时将右...原创 2019-05-16 01:58:00 · 66 阅读 · 0 评论 -
函数式接口, Collection等
Lambda函数式接口lambda 表达式的使用需要借助于 函数式接口, 也就是说只有函数式接口才可以将其用 lambda 表达式进行简化. 函数式接口定义为仅含有一个抽象方法的接口. 按照这个定义, 一个接口如果声明了两个或两个以上的方法就不叫函数式接口.JDK1.8为接口的定义引入了默认方法, 可以用default关键字在接口中直接定义方法的实现. 如果一个接口存在多个默认方法, 但是...原创 2019-05-14 19:09:00 · 154 阅读 · 0 评论 -
用于Spring Boot Jar部署的shell脚本
用于在Jenkins将jar发送到目标节点之后的部署操作, 包含deploy, start, stop, restart功能. 在deploy时会自动备份原jar至指定目录# Please define the absolute path of tomcat instanceJAVA_HOME=/opt/java/jdk1.8.0_101RUN_BASE=/home/tomcat/run...原创 2019-03-13 18:32:00 · 74 阅读 · 0 评论 -
Mongodb 笔记 - 性能及Java代码
性能以下数据都是在千兆网络下测试的结果写入数据量的增大会导致内存占满, 因为mongodb会将数据尽可能地载入内存, 索引占用的空间也很可观非安全模式下, 速度取决于内存是否占满能差一个数量级, 占满时大概1~2MB/s, 未占满时大于20MB/s安全模式下, 速度也取决于内存是否占满, 但是波动较小. 占满时为非安全模式的一半不到, 约1MB/s, 未占满时有7~8MB/s批量写入和单个...原创 2018-11-17 10:46:00 · 223 阅读 · 0 评论