
java
文章平均质量分 78
木鱼-
过一天就要进步一点,而且不知道也会更多,还有每天都会忘记一点。所以每天还得做功课
展开
-
Java实现inputstream流的复制
在 Java 中,通常情况下不建议对同一个InputStream对象直接使用两次,因为InputStream是一次性读取的流,读取一次后,流中的位置指针会移动到末尾,再次读取可能无法获取到预期的数据。“InputStream就类比成一个杯子,杯子里的水就像InputStream里的数据,你把杯子里的水拿出来了,杯子的水就没有了,InputStream也是同样的道理。其实像FileInputStream这样的文件流,要实现重复使用可能也并不是很难,利用缓存什么的应该能做到(大文件读取就悲剧了,呵呵呵)。转载 2024-11-11 16:30:44 · 400 阅读 · 0 评论 -
Java的ZipFile报错:Caused by: java.util.zip.ZipException: invalid CEN header (bad entry name)
Windows系统上跑Java的ZipFile报错:Caused by: java.util.zip.ZipException: invalid CEN header (bad entry name)转载 2024-11-06 16:25:09 · 476 阅读 · 0 评论 -
SpringBoot源码解读与原理分析(四十一)SpringBoot 2.3新特性:优雅停机
随后该方法会提取出嵌入式Tomcat中所有Engine中的所有Container,每隔50s检查一次Container是否停止,当所有Context中的线程全部执行完毕,即Context全部停止时,优雅停机流程执行完毕。“优雅停机”的新特性,是指在SpringBoot应用被关闭时(注意此处的关闭可以是kill -2,但不能是kill -9),会预留一小段时间,使应用内部的业务线程执行完毕。通过示例展示了如何配置和测试优雅停机,并详细剖析了嵌入式Tomcat的优雅停机实现过程。转载 2024-09-10 14:41:02 · 142 阅读 · 0 评论 -
Stream原理与执行流程探析
只有实现了Collection接口的类才能创建流,所以Map并不能创建流,List与Set这种单列集合才可创建流。上述代码使用stream()方法创建流,也可使用Stream.of()创建任何数量引元的流,或是Array.stream(array,from,to)从数组中from到to的位置创建输入源。stream()运行结果。转载 2024-07-29 10:36:10 · 75 阅读 · 0 评论 -
Spring系列之集成Druid连接池及监控配置
前一篇文章我们熟悉了HikariCP连接池,也了解到它的性能很高,今天我们讲一下另一款比较受欢迎的连接池:Druid,这是阿里开源的一款数据库连接池,它官网上声称:为监控而生!他可以实现页面监控,看到SQL的执行次数、时间和慢SQL信息,也可以对数据库密码信息进行加密,也可以对监控结果进行日志的记录,以及可以实现对敏感操作实现开关,杜绝SQL注入,下面我们详细讲一下它如何与Spring集成,并且顺便了解一下它的监控的配置。Spring集成Druid。转载 2024-06-25 17:10:04 · 1913 阅读 · 0 评论 -
Java日志通关(二) - Slf4j+Logback 整合及排包
从前边的版本兼容性我们可以知道:如果使用JDK 8,建议选择Slf4j 2.0 + Logback 1.3;如果使用JDK 11及以上,建议选择Slf4j 2.0 + Logback 1.5;但还没完,Spring Boot的日志系统[8]对Slf4j和Logback又有额外的版本要求。我们放在下一节讨论这个问题。三、适配 Spring BootSpring Boot通过spring-boot-starter-logging[9]包直接依赖了Logback(然后再间接依赖了 Slf4j),它通过。转载 2024-05-17 17:24:01 · 1192 阅读 · 0 评论 -
spring 约定优于配置 spring boot约定大于配置
就会自动的帮我们导入 SpringMVC 的相关依赖(包括 Json 支持的 Jackson 和数据校验的 Hibernate Validator)和一个内置的 Tomcat 容器,这使得在开发阶段可以直接通过 main 方法或是 JAR 包独立运行一个 WEB 项目。当你觉得不合适的时候,可以用更少的改动,满足你的需要。约定优于配置,也有很多人解读为:约定大于配置,约定好于配置,习惯大于配置等。约定优于配置也就是说:系统,类库,框架应该提供有合理的默认值,而非要求提供不必要的配置。原创 2024-05-15 14:00:36 · 590 阅读 · 0 评论 -
oauth2.0授权码模式详解
项目结构如下:AuthzController:获取授权码 (resource owner)TokenController:获得令牌 (authorization server)ResourceController:资源服务 (resource server)ClientController:客户端 (client)前三个Controller相前于服务端 最后一个为客户端。转载 2024-05-15 10:12:46 · 434 阅读 · 0 评论 -
基于JWT实现的Token认证方案
服务器的受保护路由将检查授权头中是否存在有效的JWT,如果存在,则允许用户访问受保护的资源。4、JWT的最大缺点是服务器不保存会话状态,所以在使用期间不可能取消令牌或更改令牌的权限。签名用于验证消息在整个过程中没有更改,并且对于使用私钥进行签名的令牌,它还可以验证JWT的发送者是它所说的真实身份。一旦用户登录,每个后续请求将包括JWT,从而允许用户访问该令牌允许的路由,服务和资源。请注意:使用签名的Token,Token中包含的所有信息都将向用户或其他方公开,即使他们无法更改它。原创 2024-04-29 16:32:49 · 1124 阅读 · 0 评论 -
JVM 原理三:编译期常量与运行期常量的区别及数组创建本质分析
我们用的final是一个字面量“hello world”,这次我们改一下使用UUID为常量赋值,注意:UUID是多少只有在运行期间才会被确定。对于数组来说,JavaDoc经常讲构成数组的元素称为Component,实际上就是将数组降低一个维度后的类型。newarray : 表示创建一个指定的原始类型(如int、float、char等)的数组,并将其压入栈顶。这时的程序运行时,会导致主动使用这个常量所在的类,显然会导致这个类被初始化。当一个常量的值并非编译期可以确定的,那么其值就不会被放到调用类的常量池中,转载 2024-04-08 08:55:41 · 72 阅读 · 0 评论 -
Java 在Java 9中什么时候使用Stream的ofNullable()方法
在本文中,我们介绍了Java 9中Stream的ofNullable()方法的使用情况。在上面的代码中,我们首先将列表转换为Stream,然后使用flatMap()方法将每个元素转换为一个Stream,如果元素为null,则转换为空Stream。它的作用是创建一个单一元素的Stream,如果提供的元素为非空,则返回一个包含该元素的Stream,如果提供的元素为空,则返回一个空Stream。这样,我们就可以在处理可能包含空值的情况下使用Stream的ofNullable()方法来简化数据处理的过程。转载 2024-03-13 11:42:46 · 386 阅读 · 0 评论 -
Java泛型使用及局限
(1)在方法返回值类型前面声明的泛型形参类型,只能在当前方法中使用,用于表示形参的类型或返回值类型,或方法局部变量的类型,和别的方法无关。【修饰符】 返回值类型 方法名(【数据形参列表】)【throws 异常列表】{}T是elements对象的类型,要求Collection集合的元素类型必须是T或T的父类。super T>,在实现Comparable接口,可以指定Comparable为T或T的父类。原创 2024-03-11 11:05:32 · 675 阅读 · 0 评论 -
jackson冲突问题
1.首先看maven的依赖管理的jackson的组件版本与由于springboot默认自带jackson包,导致冲突的。2.看下项目的Maven Dependencies中jackson的组件版本是否引用存在,没有则增加jackson的依赖。3.在common项目用到了maven的依赖管理的jackson的组件版本,所以在包含common项目的项目下增加maven的依赖管理的jackson的组件版本.还有一种情况:要看所引用的jackson的组件版本的文件是否完整。经常本地有这种下载不完全的情况。原创 2021-03-02 18:27:54 · 2979 阅读 · 0 评论 -
(转)iText输出文字的三种字体选择方式
使用iTextAsian.jar中的字体 BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);2、使用Windows系统字体(TrueType) BaseFont.createFont("C:/WINDOWS/Fonts/SIMYOU.TTF", BaseFont.IDENTITY_H,BaseFo原创 2010-05-12 09:28:00 · 3571 阅读 · 1 评论 -
Java生成PDF图片 iText (2)
import java.io.ByteArrayOutputStream;import java.io.IOException;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servl原创 2010-05-12 09:34:00 · 7436 阅读 · 1 评论 -
(例)Java生成PDF报表 iText
// 导入IO库类import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;// 导入 PO原创 2010-05-12 09:35:00 · 1885 阅读 · 1 评论 -
SpringBoot接口参数统一校验
即接口中有BindingResult参数,就必须使用要有上方7,8,9行代码进行异常处理,否则程序会正常执行。同一个实体在不同的操作中的校验方式是不同的,这就要用到分组校验。比如实体User在新增操作时,id是没有的,但是在更新操作时id又必须存在。@Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction。@Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式。转载 2023-12-15 15:19:56 · 681 阅读 · 0 评论 -
validation-api与hibernate-validator;@Validated与@Valid工作原理
Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303规范,是标准JSR-303的一个变种),javax提供了@Valid(标准JSR-303规范),配合BindingResult可以直接提供参数验证结果。@Validated:提供了一个分组功能,可以在入参验证时,根据不同的分组采用不同的验证机制,这个网上也有资料,不详述。在检验Controller的入参是否符合规范时,使用@Validated或者@Valid在基本验证功能上没有太多区别。原创 2023-12-15 14:37:15 · 1439 阅读 · 0 评论 -
@Digits长度限制与mysql数据库中decimal长度限制不一致问题
在 MySQL 数据库中,decimal(24,2) 中的 24 和 2 分别代表了 DECIMAL 数据类型的总位数和小数位数的含义。因此,decimal(24,2) 数据类型可以存储总共 24 位数,其中 2 位用于小数部分,剩余 22 位用于整数部分。对于 decimal(24,2),可以存储像 12345.67 这样的数字,其中整数部分占 5 位,小数部分占 2 位。对于 decimal(24,2),可以存储像 0.01 这样的数字,其中整数部分占 1 位,小数部分占 2 位。转载 2023-12-15 14:14:43 · 1241 阅读 · 0 评论 -
Java的日志框架之Logback
在Java的日志系统里面,有两个概念,一个叫做日志框架,如我们熟悉的Logback, Log4j, Log4j2, JDK自带的java.util.logging等;一个叫做日志门面,如Slf4j(Simple Logging Facade For Java)。门面可以理解为一个统一的记录日志的接口,但后面具体产生日志写到文件等等的工作是由不同的日志框架来实现,有的需要在slf4j提供的api到日志框架中增加一个适配器,有的像logback直接实现了slf4j,不用另外适配,如下图:");转载 2023-12-14 09:46:53 · 119 阅读 · 0 评论 -
线程操纵术之更优雅的并行策略
首先解决第一个问题,理论上都是可以并行的,为什么实际会无法并行呢?尝试在源码中找到答案。2.2.2.1 parallelStream源码浅析源码注释中有个迷惑的说法:Returns a possibly parallel这是怎么回事呢?以下情况下是可能无法并行执行的原因:1.数据量较小的这个判断在java.util.stream.AbstractPipeline类的sourceStageSpliterator方法中进行。转载 2023-12-06 09:18:20 · 132 阅读 · 0 评论 -
CloseableHttpClient,HttpClient4使用配置
logAction : "接口调用") + "请求耗时:{},发起时间:{},结束时间:{},请求数据:{}", cost, startDate, endDate, data);//此处也可以EntityUtils.consume(entity);// 设置最大路由[ 设置每个路由基础的连接],该值默认为2,并发比较差。//最后别忘了关闭应该关闭的资源,适当的释放资源。logger.info("初始化HttpClient结束");// 初始化httpClient。// 设置连接池管理。原创 2023-11-18 14:48:23 · 250 阅读 · 0 评论 -
HttpClient,HttpClinet5的使用区别,以及上传文件使用区别。
httpclient5内含org.apache.hc.client5.http.entity.mime,在post 请求传递 multipart/form-data 参数(含文件)httpmime内含org.apache.http.entity.mime,在post 请求传递 multipart/form-data 参数(含文件)其中httpmime包含httpclient,httpclient又包含httpcore。传递 multipart/form-data 参数需要导入 httpmime 依赖。原创 2023-11-16 14:58:19 · 954 阅读 · 0 评论 -
maven <repositories>与<pluginRepositories>详解
运行Maven的时候,Maven所需要的任何构件都是直接从本地仓库获取的。我们没有手工的去下载任何jar文件,这一切都是因为Maven中央仓库的存在,当Maven在本地仓库找不到需要的jar文件时,它会查找远程仓库,而一个原始的Maven安装就自带了一个远程仓库——Maven中央仓库。这样做的原因有很多,比如你有一个局域网的远程仓库,使用该仓库能大大提高下载速度,继而提高构建速度,也有可能你依赖的一个jar在central中找不到,它只存在于某个特定的公共仓库,这样你也不得不添加那个远程仓库的配置。转载 2023-10-31 14:42:00 · 7504 阅读 · 0 评论 -
服务器常见错误代码500、501、502、503、504、505区别
nginx 在这里充当的是反向代理服务器的角色,是把http协议请求转成 fastcgi 协议的请求,通过 fastcgi_pass 指令传递给 php-fpm 进程,当nginx执行请求时,却收到了上游服务器( php-fpm)的无效响应,响应内容是nginx无法理解的,就会返回502 bad gateway;专业点儿说就是,单个 php-fpm 进程阻塞超过 nginx 的时间阈值,会返回 504 gateway timeout,例如,PHP脚本执行时间太长,此时可查看是否某些代码逻辑产生了阻塞;转载 2023-10-30 10:45:31 · 4090 阅读 · 0 评论 -
雪花算法解决时钟回拨问题
1位是符号位,也就是最高位,始终是0,没有任何意义,因为要是唯一计算机二进制补码中就是负数,0才是正数。41位是时间戳,具体到毫秒,41位的二进制可以使用69年,因为时间理论上永恒递增,所以根据这个排序是可以的。10位是机器标识,可以全部用作机器ID,也可以用来标识机房ID + 机器ID,10位最多可以表示1024台机器。12位是计数序列号,也就是同一台机器上同一时间,理论上还可以同时生成不同的ID,12位的序列号能够区分出4096个ID。转载 2023-10-16 14:58:17 · 887 阅读 · 0 评论 -
UUID的弊端以及雪花算法
系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,也常常为这个问题而纠结。这篇文章就是给各位看官提供一个生成分布式唯一全局id生成方案的思路,希望能帮助到大家。不足之处,请多多指教!!转载 2023-10-16 14:49:48 · 192 阅读 · 0 评论 -
Java开发-参数校验@NotEmpty、@NotBlank、@NotNull
NotNull适用于基本数据类型(Integer,Long,Double等等),当 @NotNull 注解被使用在 String 类型的数据上,则表示该数据不能为 Null(但是可以为 Empty)源码包注释源码注释翻译:被注释的元素不能为空。接受任何类型。注:被其标注的字段可以使用 @size、@Max、@Min 对字段数值进行大小的控制@NotBlank。原创 2023-10-12 15:18:01 · 792 阅读 · 0 评论 -
String放入运行时常量池的时机与String.intern()方法解惑
String放入运行时常量池的时机与String.intern()方法解惑转载 2023-03-15 08:56:14 · 477 阅读 · 0 评论 -
Java中如何创建不可变(immutable)类
什么是不可变类转载 2023-03-06 09:00:16 · 402 阅读 · 0 评论 -
Druid配置参数说明-testWhileIdle,testOnBorrow,testOnReturn
testWhileIdle:如果为true(默认true),当应用向连接池申请连接,并且testOnBorrow为false时,连接池将会判断连接是否处于空闲状态,如果是,则验证这条连接是否可用。testWhileIdle什么时候会起作用?获取连接时;testOnBorrow==false;testWhileIdle==true;使用代码在DruidDataSource的getConnectionDirect方法注意:此时判断连接空闲的依据是空闲时间大于timeBetweenEvictionR翻译 2021-11-30 10:09:55 · 2804 阅读 · 0 评论 -
redis_cell限流模块的使用-docker启动-java集成
Redis-cell限流模块在java中的基本使用基本介绍Redis-cell模块是Redis4.0提供的一个限流模块,该模块使用了漏斗算法,提供了原子的限流指令,唯一的一条指令就是cl.throttle 唯一的指令 cl.throttle zedomi:reply 15 30 60 1 漏斗容量15,每60s最多30次(漏水速率) 返回值:0 运行 1 拒绝 15 漏斗容量capacity 14 漏...转载 2021-08-13 10:52:50 · 382 阅读 · 0 评论 -
SpringSecurity WebSecurityConfigurerAdapter类使用
WebSecurityConfigurerAdapter 类是个适配器, 在配置的时候,需要我们自己写个配置类去继承他,然后编写自己所特殊需要的配置@Configuration@EnableWebSecuritypublic class WebSecurityConfigextends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Excepti...转载 2021-07-05 13:55:08 · 3174 阅读 · 1 评论 -
SPI与线程上下文类加载器
所属文集:ClassLoader串烧前提传送门 :理解当前类加载器,主动加载,自动加载是什么!需求程序运行过程中要用到的类,通过当前类加载器的自动加载,加载不到(不在当前类加载器的类资源管辖范围),如果要使用这个类,必须指定一个能够加载这个类的加载器去加载,而怎么获取这个加载器是个问题。程序都是在线程中执行,那么从线程的上下文中去拿最合理,所以就诞生了线程上下文类加载器,这个加载器的是非自动加载,即通过forName 或者 loadClass的方式去加载类。两种场景1.当高层提供转载 2021-06-30 09:00:38 · 536 阅读 · 0 评论 -
Java类加载器及自定义
Java类加载器的作用是寻找类文件,然后加载Class字节码到JVM内存中,链接(验证、准备、解析)并初始化,最终形成可以被虚拟机直接使用的Java类型。类加载器种类有两种类加载器:1 启动类加载器(Bootstrap ClassLoader)由C++语言实现(针对HotSpot VM),负责将存放在<JAVA_HOME>lib目录或-Xbootclasspath参数指定的路径中的类库加载到JVM内存中,像java.lang.、java.util.、java.io.*等等.转载 2021-06-29 15:27:27 · 380 阅读 · 0 评论 -
真正理解线程上下文类加载器(多案例分析)
前置知识: java类加载器不完整分析#前言此前我对线程上下文类加载器(ThreadContextClassLoader,下文使用TCCL表示)的理解仅仅局限于下面这段话:Java 提供了很多服务提供者接口(Service Provider Interface,SPI),允许第三方为这些接口提供实现。常见的 SPI 有 JDBC、JCE、JNDI、JAXP 和 JBI 等。这些 SPI 的接口由 Java 核心库来提供,而这些 SPI 的实现代码则是作为 Java 应用所依赖的 jar 包被包转载 2021-06-28 10:20:06 · 268 阅读 · 0 评论 -
域名解析暂时失败 at java.net.InetAddress.getLocalHost
解决方案:需要将主机名称和本机ip通过【ip 本机名称】这样的格式配置在 /etc/hosts 这个文件中,这样对应的本机名称就会获取到相应的ip格式如:/etc/hostsip 本机名称我们在开发中如果要获取本地机器的ip地址时,可以通过InetAddress.getLocalHost()发放来获取,但是这样可能碰到的一个运行时异常就是本地配置文件中相应的配置,就会产生UnknownHostException 的异常UnknownHostException产生原因本机..原创 2021-03-08 11:30:08 · 1817 阅读 · 0 评论 -
关于java集合框架接口RandomAccess的理解
RandomAccess接口是一个空接口,空接口的作用一般起到一个标识作用,比如:Serializable 接口。RandomAccess接口里面的文档说明大致意思:给可以提供随机访问的List实现去标识一下,这样使用这个List的程序在遍历这种类型的List的时候可以有更高效率。仅此而已。这句话隐含的意思就是只要支持快速随机访问的集合类都应该实现这个接口,那么与之对应的支持顺序访问的集合类就不应该实现这个接口。例如所以,我们在遍历List之前,可以用 if( list in..转载 2021-02-23 11:09:37 · 169 阅读 · 0 评论 -
Java 打包 FatJar 方法小结
简介:在函数计算(Aliyun FC)中发布一个 Java 函数,往往需要将函数打包成一个 all-in-one 的 zip 包或者 jar 包。Java 中这种打包 all-in-one 的技术常称之为 Fatjar 技术。本文小结一下 Java 里打包 FatJar 的若干种方法。什么是 FatJarFatJar 又称作 uber-Jar,是包含所有依赖的 Jar 包。Jar 包中嵌入了除 java 虚拟机以外的所有依赖。我们知道 Java 的依赖分为两种, 零散的 .class 文件和把多转载 2020-11-06 11:05:16 · 1990 阅读 · 0 评论 -
微服务hystrix-javanica详解 翻译
Java语言相比其他语言有一些比较great的优点,那就是反射(refleaction)和注解(annotation)。几乎所有的流行框架比如Spring, Hibernate, myBatis等等,都最大化的使用了这两个特性。于是Hystrix也想通过引入注解来改善Hystrix的发展。 目前使用Hystrix涉及编写大量的代码,这是快速发展的障碍。 你可能花了很多时间编写Hystrix命令。javanica项目的想法是通过引入支持注解让你更容易地使用Hystrix。在传统的使用Hystrix时.原创 2020-10-14 09:56:21 · 785 阅读 · 0 评论