
JAVA
文章平均质量分 73
inrgihc
这个作者很懒,什么都没留下…
展开
-
Hazelcast 在springboot下的使用集成
Hazelcast是一款由Hazelcast公司开发的基于jvm环境的为各种应用提供分布式集群服务的分布式缓存解决方案。可以嵌入到java、c++、.net等开发的产品中使用。其实我们最简单的一个理解就是,以Map接口为例,在Hazelcast中创建了一个map之后,当我们通过Hazelcast创建一个Map实例后,我们在节点A调用 Map::put("A","A_DATA") 方法添加数据,然后可以在节点B使用 Map::get("A") 获取到值为"A_DATA" 的数据。原创 2022-12-22 20:46:13 · 2318 阅读 · 1 评论 -
使用IDEA通过ssh隧道调试远程服务器代码
使用IDEA通过ssh隧道调试远程服务器代码原创 2022-06-15 19:22:50 · 4400 阅读 · 3 评论 -
Akka学习指南(Java版)——构建分布式系统
Akka学习教程转载 2022-06-12 21:38:14 · 1100 阅读 · 0 评论 -
ThreadLocal使用探究
ThreadLocal的作用是提供线程内的局部变量,这种变量在多线程环境下访问时能够保证各个线程里变量的独立性。原创 2022-06-11 22:02:23 · 312 阅读 · 0 评论 -
基于正则对JDBC的URL中提取有效参数的方法
一、背景需求在Java的实际开发中,可能会遇到如下需求:(1)给定一个数据库的JDBC-URL连接字符串,要求去判断该字符串格式的合法性;(2)给定一个数据库的JDBC-URL连接字符串,要求去判断连接该数据库的可达性;(3)给定一个数据库的JDBC-URL连接字符串,要求去判断连接串中的某些参数配置信息;二、基于正则的提取方法通过搜集互联网上对jdbc-url提取参数的方法,感觉相对通用且合适的几乎没有,于是通过阅读合分析dbeaver工具的代码,发现了一个基于正则改进的提取jdb原创 2021-11-20 23:12:59 · 4868 阅读 · 4 评论 -
MyBatis拦截器原理探究
MyBatis拦截器介绍MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能。那么拦截器拦截MyBatis中的哪些内容呢?我们进入官网看一看:MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed) Pa转载 2021-09-16 14:34:54 · 243 阅读 · 0 评论 -
Mybatis自定义拦截器与插件开发
在Spring中我们经常会使用到拦截器,在登录验证、日志记录、性能监控等场景中,通过使用拦截器允许我们在不改动业务代码的情况下,执行拦截器的方法来增强现有的逻辑。在mybatis中,同样也有这样的业务场景,有时候需要我们在不侵入原有业务代码的情况下拦截sql,执行特定的某些逻辑。那么这个过程应该怎么实现呢,同样,在mybatis中也为开发者预留了拦截器接口,通过实现自定义拦截器这一功能,可以实现我们自己的插件,允许用户在不改动mybatis的原有逻辑的条件下,实现自己的逻辑扩展。本文将按下面的结构进行m转载 2021-09-16 14:33:22 · 429 阅读 · 0 评论 -
使用 Google Guava Striped 实现基于 Key 的并发锁
写 Java 代码至今,在应对可能冲突的共享资源操作时会尽量用 JDK 1.5 开始引入的并发锁(如 Lock 的各类实现类, ReentrantLock 等) 进行锁定,而不是原来的synchronized关键字强硬低性能锁。这里是应用 JDK 1.5 的Lock的基本操作步骤private Lock lock = new ReentrantLock();private void operate() { // 安全操作 .... lock.lock(); tr...转载 2021-08-02 22:47:07 · 2498 阅读 · 0 评论 -
ListenalbeFuture的使用总结
为了提高任务处理速度,我们经常会将一些可并行处理的步骤用异步的方式去处理,如果想要获取异步计算的结果,在Java 8之前更多的用的是Future + Callable的方式来实现,下面是使用Future和Callable的一个demo,其中的是executor.submit()方法实际返回的就是FutureTask的实例,另外Future的get方法会一直阻塞直至获取结果。public class FutureTest { public static void main(String[] ar转载 2021-07-26 15:00:22 · 1560 阅读 · 0 评论 -
Jackson之JSON序列化和多态反序列化
SerDe是Serialize/Deserilize的简称,目的是用于序列化和反序列化。一、Jackson之序列化和反序列化JSON作为一种轻量级的数据交换格式,其清晰和简洁的结构能够轻松地与Java对象产生映射关系。Java开发中常常使用Jackson对JSON文本格式进行序列化和反序列化:序列化:是指将Java对象转换成Json文件或者Json字符串;反序列化:是指将Json文件或者Json字符串转换成Java对象。例如,有如下定义的java的bean:public cl.转载 2021-07-19 23:21:30 · 7745 阅读 · 0 评论 -
MySQL的TinyInt类型及JDBC的url中的tinyInt1isBit参数
一、问题描述问题:在使用Java的jdbc读取tinyint(1)类型的数据时,rs.getObject(i)的值为Boolean类型的true/false。而数据库中存储的是1或0,那为啥用JDBC读取到的就是true或false了呢?所以,JAVA数据类型 和 MYSQL的数据类型转换,要注意tinyInt 类型,且存储长度为1的情况。二、原因分析MYSQL官方的JDBC文档定义转换规则如下:MySQL Types to Java Types for ResultSet.getObj原创 2021-07-13 23:09:26 · 2401 阅读 · 0 评论 -
Java 9中--add-exports和--add-opens有什么区别?
在Java 9(jdk-9 + 170)默认情况下不允许应用程序查看来自JDK的所有类,而不像以前的所有Java版本。Java 9中--add-exports和--add-opens有什么区别?使用--add-exports包被导出,意味着所有的公共类型和成员都可以在编译和运行时访问。随着--add-opens打开包,这意味着其中的所有类型和成员(不仅是公共的!)在运行时可以访问。所以在运行时的主要区别是--add-opens允许“深度反射”,意思是非公共成员的访问。您通常可以通过拨打setAcce原创 2021-06-10 22:53:53 · 12467 阅读 · 2 评论 -
代码重构之责任链设计模式
一、责任链模式1.什么是责任链模式责任链模式(Chain of Responsibility Pattern)中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。责任链模式: 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的额偶合关系.将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止.2.使用场景在JavaWeb中 过滤器链的实现,实际上就是一种责任链模式3.优缺点优点:降低耦合度。它原创 2021-05-06 15:32:52 · 277 阅读 · 0 评论 -
Java8中的StringJoiner使用教程
一、背景在用java开发中常常会使用StringBuilder/ StringBuffer 来拼接字符串,但是在java8及其以上提供了拼接神器:StringJoiner。二、教程import java.util.Arrays;import java.util.List;import java.util.StringJoiner;import java.util.stream.Collectors;/** * StringJoiner使用示例 * * @author tang原创 2021-05-06 11:19:44 · 561 阅读 · 0 评论 -
利用maven打rpm安装部署包
一. 思路利用rpm-maven-plugin插件实现讲javaweb或者java程序打包成rpm包,以便于RPM软件仓库管理二.准备基于maven的javaweb项目 linux主机或虚拟机三. 配置pom文件在项目pom文件的插件配置中,增加 rpm-maven-plugin的配置 <plugin> <groupId>org.codehaus.mojo</groupId> ...原创 2021-03-11 10:11:21 · 948 阅读 · 0 评论 -
jvm参数及其配置和默认值等问题
一、如何查看java 1.8 默认jvm参数问题:如何查看本机上用java -jar aaaaa.jar命令启动的程序的jvm默认参数配置信息?[root@localhost ~]# java -XX:+PrintCommandLineFlags -version-XX:InitialHeapSize=328965888 -XX:MaxHeapSize=5263454208 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+原创 2021-02-22 18:07:09 · 3602 阅读 · 1 评论 -
Java网络编程中的4种IO模型详解
一. JavaIO读写原理无论是Socket的读写还是文件的读写,在Java层面的应用开发或者是linux系统底层开发,都属于输入input和输出output的处理,简称为IO读写。在原理上和处理流程上,都是一致的。区别在于参数的不同。用户程序进行IO的读写,基本上会用到read&write两大系统调用。可能不同操作系统,名称不完全一样,但是功能是一样的。先强调一个基础知识:read系统调用,并不是把数据直接从物理设备,读数据到内存。write系统调用,也不是直接把数据,写入到物理设备.转载 2021-01-14 15:57:31 · 449 阅读 · 0 评论 -
sun.misc.Unsafe类的深入刨析
前言Unsafe类在JDK源码中被广泛使用,在Spark使用off-heap memory时也会使用到,该类功能很强大,涉及到类加载机制(深入理解ClassLoader工作机制),其实例一般情况是获取不到的,源码中的设计是采用单例模式,不是系统加载初始化就会抛出SecurityException异常。这个类的提供了一些绕开JVM的更底层功能,基于它的实现可以提高效率。但是,它是一把双刃剑:正如它的名字所预示的那样,它是Unsafe的,它所分配的内存需要手动free(不被GC回收)。如果对Unsafe转载 2021-01-12 12:11:53 · 654 阅读 · 0 评论 -
浅析操作系统和Netty中的零拷贝机制
零拷贝机制(Zero-Copy)是在操作数据时不需要将数据从一块内存区域复制到另一块内存区域的技术,这样就避免了内存的拷贝,使得可以提高CPU的。零拷贝机制是一种操作数据的优化方案,通过避免数据在内存中拷贝达到的提高CPU性能的方案。一、操作系统的零拷贝机制操作系统的存储空间包含硬盘和内存,而内存又分成用户空间和内核空间。以从文件服务器下载文件为例,服务器需要将硬盘中的数据通过网络通信发送给客户端,大致流程如下:第一步:操作系统通过DMA传输将硬盘中的数据复制到内核缓冲区第二步:操作系统执行转载 2020-12-07 10:50:37 · 229 阅读 · 0 评论 -
java基础知识——ThreadLocal
一、ThreadLocal是什么从名字我们就可以看到ThreadLocal叫做线程变量,意思是ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。从字面意思来看非常容易理解,但是从实际使用的角度来看,就没那么容易了,作为一个面试常问的点,使用场景那也是相当的丰富:1、在进行对象跨层传递的时候,使用ThreadLocal可以避免多次传递,打破层次间的约束。 2、线程间数据隔转载 2020-09-18 22:24:09 · 200 阅读 · 0 评论 -
一个轻量的java缓存方式ExpiringMap
一、简单介绍A high performance thread-safe map that expires entries!应用程序中引入缓存能够降低数据库方面的压力,比如常用的Redis缓存中间件。但是在有些小场景下,使用Redis不仅增加了系统的复杂性和不确定性,还有点大材小用。而ExpiringMap适合缓存那些被频繁查询以及数据量不是很大的数据信息。它具有如下功能:可以设置存储元素的过期时间; 可设置最大的数据元素存储量; 设置过期协议,过期协议分有两种:ExpirationPoli转载 2020-07-25 13:16:35 · 788 阅读 · 0 评论 -
Java轻量级的插件框架PF4J的使用教程
一、简介PF4J是一个Java轻量级的插件框架,可以实现动态加载,执行,卸载外部插件(支持jar以及zip),具体可以看官网:https://pf4j.org/。本文例子基于Github地址:https://github.com/pf4j/pf4j<dependency> <groupId>org.pf4j</groupId> <artifactId>pf4j</artifactId> <version>3.0转载 2020-07-10 18:13:56 · 8747 阅读 · 0 评论 -
分布式事务解决方案Seata
一、Seata 简介Seata 是 阿里巴巴2019年开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。在 Seata 开源之前,Seata 对应的内部版本在阿里内部一直扮演着分布式一致性中间件的角色,帮助阿里度过历年的双11,对各业务进行了有力的支撑。经过多年沉淀与积累,2019.1 Seata 正式宣布对外开源 。目前 Seata 1.0 已经 GA。项目地址:https://github.com/seata/seata/二、分布式事务场景在介绍分布式事转载 2020-07-05 22:07:05 · 902 阅读 · 0 评论 -
Kafka的常用API使用之Java教程
一、消息发送1.异步发送1)导入依赖<dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>0.11.0.0</version></dependency>2)编写代码需要用到的类:KafkaProducer:需要创建一个生产者对象,用来发送数据 P转载 2020-07-02 20:19:44 · 248 阅读 · 0 评论 -
mybatis框架XML里的SQL中使用大于小于号的问题
一、问题描述mybatis框架下SQL查询时,mybatis会错误的将>与<认为是xml的分隔符,会导致如下类型的错误: <select id="findAllMenu" resultMap="MenuVOResultMap"> SELECT mm.id as id,mm.title as title,mm.path as path,sm.id as sid,sm.title as stitle,sm.path as spath from (SELECT i原创 2020-06-27 18:33:56 · 721 阅读 · 0 评论 -
JDK中线程池及其相关参数总结
一、线程池工厂类Executorsjava多线程开发时,常常用到线程池技术,JDK里提供了如下Executors工厂类:public class Executors { //创建固定数量的线程:参数nThreads为线程个数 public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads,原创 2020-05-28 21:25:17 · 271 阅读 · 0 评论 -
Java 8 的 Consumer、Supplier、Predicate和Function
package com.learn.tang;import java.util.ArrayList;import java.util.List;import java.util.function.Consumer;import java.util.function.Predicate;import java.util.function.Supplier;import java.util.stream.Stream;class Student { private String...原创 2020-05-27 18:18:10 · 178 阅读 · 0 评论 -
SpringBoot中使用@Import进入java类
一、Spring中的@Import 注解使用场景@Import注解在Spring的源码中使用特别深广,值得对其使用场景进行研究与整理。@Import注解通常可以引入如下类型的java类:导入@Configuration注解的配置类; 导入ImportSelector的实现类; 导入ImportBeanDefinitionRegistrar的实现类;二、@Configuration注解的配置类@Import引入@Configuration注解配置的类,对应import的类都会加入并注册为原创 2020-05-25 22:31:10 · 851 阅读 · 0 评论 -
java使用ByteBuffer.allocateDirect分配的堆外内存大小查看方法
一、问题在java开发中,可以使用ByteBuffer.allocateDirect分配的堆外内存,那么对一个java程序来说,如何实时查看进程的堆外内存大小呢?二、本机进程1、使用Jvisualvm工具在Jvisualvm中安装 Mbeans插件。然后查看java.nio/BufferPool/direct2、进程内代码获取MBeanServer mbs = ManagementFactory. getPlatformMBeanServer() ;ObjectName...原创 2020-05-24 22:32:09 · 1433 阅读 · 0 评论 -
Java编程中的SPI机制
一、什么是SPISPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。整体机制图如下:Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。系统设计的各个抽象,往往有很多不同的实现方案,在面向的对象的设计里,一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现,就需要修改代码。为了转载 2020-05-23 21:01:48 · 339 阅读 · 0 评论 -
JavaWeb——Servlet讲解
地址:https://blog.youkuaiyun.com/qq_19782019/article/details/80292110转载 2020-05-09 11:35:14 · 187 阅读 · 0 评论 -
maven多仓库配置——公司仓库和阿里仓库
针对公司内网私服仓库,私服仓库不能访问外网,此时无法在私服仓库代理阿里的maven仓库。我们的maven就需要配置多个仓库(maven目录下的conf/settings.xml配置文件):一、多仓库配置1、在profiles标签内新建profile,配置一个公司的仓库和阿里的仓库; <profile> <id>nexus</id&g...转载 2020-04-20 19:03:45 · 1173 阅读 · 2 评论 -
记Springboot项目中@Service(或@Component)注解失效的问题解决方法
一、问题描述今天基于SpringBoot写好的一个项目程序,启动时,报如下错误: 2020-04-07 14:04:41.420 WARN o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext - Exception encountered during context initialization - can...原创 2020-04-07 14:51:16 · 8201 阅读 · 0 评论 -
用Java连接SQL Server2000数据库的两种方法与jDTS
1. 通过Microsoft的JDBC驱动连接此JDBC驱动共有三个文件,分别是mssqlserver.jar、msutil.jar和msbase.jar,可以到微软的网站去下载(http://www.microsoft.com/downloads/details.aspx?FamilyId=07287B11-0502-461A-B138-2AA54BFDC03A&displaylan...原创 2020-04-01 13:56:04 · 828 阅读 · 0 评论 -
SpringBoo之JDBC中NamedParameterJdbcTemplate的使用及其SQL中的in语句
一、JdbcTemplate使用项目中使用到了Spring JDBC, 一般jdbcTemplate基本可以满足我们的需求,我们可以通过?占位符来传参,方式sql注入。例如:@Overridepublic boolean queryMultBySpuId(String spuId, String companyId) { String sql = "SELECT goods_com...转载 2020-03-21 22:55:31 · 1539 阅读 · 0 评论 -
spring cloud中通过配置文件自定义Ribbon负载均衡策略
spring cloud中通过配置文件自定义Ribbon负载均衡策略 博客分类: 微服务一、Ribbon中的负载均衡策略AvailabilityFilteringRule:过滤掉那些因为一直连接失败的被标记为circuittripped的后端server,并过滤掉那些高并发的的后端server(activeconnections超过配置的阈值)|使用一个Availabilit...转载 2020-03-19 15:22:42 · 788 阅读 · 0 评论 -
Java对象在内存上的分配问题
在JVM的内存结构中,比较常见的两个区域就是堆内存和栈内存(如无特指,本文提到的栈均指的是虚拟机栈),关于堆和栈的区别,很多开发者也是如数家珍,有很多书籍,或者网上的文章大概都是这样介绍的:1、堆是线程共享的内存区域,栈是线程独享的内存区域。2、堆中主要存放对象实例,栈中主要存放各种基本数据类型、对象的引用。但是,作者可以很负责任的告诉大家,以上两个结论均不是完全正确的。对象内...转载 2020-03-18 12:38:30 · 193 阅读 · 0 评论 -
JOL工具及其分析对象在JVM的大小和分布
一、JOL简介JOL全称为Java Object Layout,是分析JVM中对象布局的工具,该工具大量使用了Unsafe、JVMTI来解码布局情况,所以分析结果是比较精准的。通常分析java对象的大小需要人工按照Java基础数据类型大小及内容大小估算出缓存对象的大概堆占用,但是麻烦还不准。而OpenJDK,提供了JOL包,可以帮我们在运行时计算某个对象的大小,是非常好的工具。官网:htt...原创 2020-03-15 22:47:14 · 1989 阅读 · 1 评论 -
Springboot整合JMX进行程序运行监控
一、JMX简介JMX的全称为Java Management Extensions. 顾名思义,是管理Java的一种扩展。这种机制可以方便的管理正在运行中的Java程序。常用于管理线程,内存,日志Level,服务重启,系统环境等。JMX的架构图如下:从上面的架构图可以看到JMX主要分三层,分别是:1、设备层(Instrumentation Level)主要定义了信息模型。在...原创 2020-03-10 16:00:30 · 5333 阅读 · 0 评论 -
Arthas - Java 线上问题定位分析与处理
在使用 Arthas 之前,当遇到 Java 线上问题时,如 CPU 飙升、负载突高、内存溢出等问题,你需要查命令,查网络,然后 jps、jstack、jmap、jhat、jstat、hprof 等一通操作。最终焦头烂额,还不一定能查出问题所在。而现在,大多数的常见问题你都可以使用 Arthas 轻松定位,迅速解决,及时止损,准时下班。1、Arthas 介绍Arthas 是 Alibaba...原创 2020-03-10 14:41:55 · 324 阅读 · 0 评论