java
文章平均质量分 59
qq_duhai
好记性不如烂笔头...
展开
-
DeferredResult
当一个请求到达API接口,如果该API接口的return返回值是DeferredResult,在没有超时或者DeferredResult对象设置setResult时,接口不会返回,但是Servlet容器线程会结束,DeferredResult另起线程来进行结果处理(即这种操作提升了),并setResult,如此以来这个请求不会占用服务连接池太久,如果超时或设置setResult,接口会立即返回。给人一种异步处理业务,但是却同步返回的感觉。转载 2023-07-10 15:43:30 · 178 阅读 · 0 评论 -
ThreadPoolTaskScheduler轻量级多线程定时任务框架
ThreadPoolTaskScheduler 内部方法非常丰富,本文实现的是一种corn表达式,周期执行schedule(Runnable task, Trigger trigger) corn表达式,周期执行schedule(Runnable task, Date startTime) 定时执行定时周期间隔时间执行。间隔时间单位 TimeUnit.MILLISECONDSscheduleAtFixedRate(Runnable task, long period) 间隔时间执行。单位毫秒。转载 2023-07-05 15:39:22 · 845 阅读 · 0 评论 -
jps显示的java进程名称为jar如何解决
使用jps时发现显示的进程名称为jar,而无法显示真正名称。而只需要将jar包参数。转载 2023-04-03 08:48:25 · 145 阅读 · 0 评论 -
通过RestTemplate上传文件
如果文件保存在本地,即可以通过File file = new File(path) 或者 文件路径地址获取到指定文件这种方式可直接将File文件或者文件路径传递给FileSystemResource资源对象。然后将该资源放入请求体中。转载 2023-02-06 09:53:44 · 3882 阅读 · 2 评论 -
Filesystem closed报错问题处理
使用HDFS的时候问题原因为:多线程访问问题,线程A、B同时获取filesystem后使用,线程B使用完后调用了filesystem.close()方法,这个时候线程A还在操作filesystem,所以报错上面种种异常。原创 2023-02-02 14:01:45 · 1590 阅读 · 0 评论 -
BigDecimal使用不当,造成P0事故!
目录背景事故分析总结工具分享背景我们在使用金额计算或者展示金额的时候经常会使用 BigDecimal,也是涉及金额时非常推荐的一个类型。BigDecimal 自身也提供了很多构造器方法,这些构造器方法使用不当可能会造成不必要的麻烦甚至是金额损失,从而引起事故资损。事故接下来我们看下收银台出的一起事故。| 问题描述| 事故级别| 事故过程如下:13:44,接到报警,订单支付失败,支付可用率降至 60%13:50,迅速回滚上线代码,恢复正常14:20,review 代码,预发布验证发现问题点14:58,修改问题转载 2022-06-07 17:27:31 · 145 阅读 · 1 评论 -
使用URLClassLoader动态加载jar
背景介绍在某些项目中会使用插件化技术实现一些动态“插拔”或热更新的功能。一般的做法是,定义一个标准接口,然后将实现分离进行独立部署或更新。现在有个场景,系统希望引入一些特殊的业务“函数”,并支持热更新。来看看我们是怎么实现的。业务函数接口:IFunction.java/** 业务函数接口 **/public interface IFunction { /** 函数名称 **/ public String getName(); /** 函数描述 **/转载 2021-12-31 14:04:13 · 3087 阅读 · 1 评论 -
Class.forName()和ClassLoader.loadClass()区别
Class.forName()和ClassLoader.loadClass()区别?Class.forName():将类的.class文件加载到jvm中,并且对类进行解释,执行类中的static块;ClassLoader.loadClass():只会将.class文件加载到jvm中,不会执行static中的内容,但是在newInstance会去执行static块。public void test12(){ ClassLoader classLoader = Test.class.get转载 2021-12-29 15:18:53 · 237 阅读 · 0 评论 -
Spring Boot 如何热加载jar实现动态插件?
一、背景动态插件化编程是一件很酷的事情,能实现业务功能的 「解耦」 便于维护,另外也可以提升 「可扩展性」 随时可以在不停服务器的情况下扩展功能,也具有非常好的 「开放性」 除了自己的研发人员可以开发功能之外,也能接纳第三方开发商按照规范开发的插件。常见的动态插件的实现方式有 SPI、OSGI 等方案,由于脱离了 Spring IOC 的管理在插件中无法注入主程序的 Bean 对象,例如主程序中已经集成了 Redis 但是在插件中无法使用。本文主要介绍在 Spring Boot 工程中热加载 j转载 2021-12-29 13:55:37 · 2119 阅读 · 2 评论 -
sql模糊查询关键字处理
在java 使用sql的模糊查询时:final String key = "%" + name.replaceAll("%", "\\\\%").replaceAll("_", "\\\\_") + "%";polist = deviceDao.findByNameLike(key);需要对关键字%和_进行处理,不然就查不出正确的结果原创 2021-12-06 11:15:21 · 1545 阅读 · 0 评论 -
Java ClassLoad详解
类加载器是Java语言的一个创新,也是Java语言流行的重要原因之一。它使得 Java 类可以被动态加载到 Java 虚拟机中并执行。类加载器从 JDK 1.0 就出现了,最初是为了满足 Java Applet 的需要而开发出来的。Java Applet 需要从远程下载Java 类文件到浏览器中并执行。现在类加载器在 Web 容器和 OSGi 中得到了广泛的使用。一般来说,Java 应用的开发人员不需要直接同类加载器进行交互。Java 虚拟机默认的行为就已经足够满足大多数情况的需求了。...转载 2021-11-30 19:56:15 · 752 阅读 · 0 评论 -
java -jar 参数前后位置说明
springboot项目启动的时候可以直接使用java -jar xxx.jar这样。下面说说参数的一些讲究1.-DpropName=propValue的形式携带,要放在-jar参数前面 eg:java -Dxxx=test -DprocessType=1 -jar xxx.jar 取值:System.getProperty("propName")2.参数直接跟在命令后面 eg:java -jar xxx.jar processType=1 processType2=2 取值转载 2021-11-05 13:53:59 · 771 阅读 · 0 评论 -
DruidDataSource的使用、配置
记录一下使用DruidDataSource的常用配置。1.pom.xml中引入:<!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactI转载 2021-10-11 20:10:01 · 3487 阅读 · 0 评论 -
写日志,根据时间跟文件最大限制量拆分日志文件
package com.spring.file_util.domain;import java.io.BufferedWriter;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStreamWriter;import java.text.SimpleDateFormat;import java.util.Date;/** * 写日志.原创 2021-08-31 17:11:55 · 297 阅读 · 0 评论 -
java中Writer的线程安全性
以前负责一个项目,我负责从一个超大的文本文件中读取信息存入数据库再进一步分析。而文本文件内容是每行一个json串。我在解析的过程中发现,有很小的概率json串的结构会破坏,比如前一个json串只写了半行,后面就被另一个json串覆盖掉了。与产生日志的部门沟通,他们说是多线程使用log4j写入,可能偶尔会有串行。具体他们是否使用log4j的AsyncAppender我不太了解,暂时也没去看log4j的源码,当时只是简单的忽略异常的行了事儿。现在比较闲,想测试一下jdk里面各种输出方式,例如Writ转载 2021-08-31 09:24:56 · 1225 阅读 · 0 评论 -
通过海康SDK预览获取回调的PS流数据自己解析然后前端播放
最近在玩视频相关的,也算是一步一步的深入吧。第一版:用海康SDK进行历史数据下载:https://blog.csdn.net/qq_16504067/article/details/114538622?spm=1001.2014.3001.5502https://blog.csdn.net/qq_16504067/article/details/114577693?spm=1001.2014.3001.5502用ffmgeg转rtsp格式为rtmp格式存储到http-flv的直播流媒体服原创 2021-06-22 11:29:40 · 9803 阅读 · 65 评论 -
Java7新特性——try-with-resources用法(AutoCloseable和Closeable)
在Java 7之前,IO操作为了保证资源能被关闭,往往会在try代码块后加上finally代码块来处理资源的关闭。 BufferedReader br = new BufferedReader(new FileReader(path)); try { return br.readLine(); } finally { if (br != null) br.close(); } Java 7新增了try-with-resources语法来保.转载 2021-06-07 20:21:52 · 827 阅读 · 0 评论 -
CountDownLatch与join的区别
首先,我们来看一个应用场景1:假设一条流水线上有三个工作者:worker0,worker1,worker2。有一个任务的完成需要他们三者协作完成,worker2可以开始这个任务的前提是worker0和worker1完成了他们的工作,而worker0和worker1是可以并行他们各自的工作的。如果我们要编码模拟上面的场景的话,我们大概很容易就会想到可以用join来做。当在当前线程中调用某个线程 thread 的 join() 方法时,当前线程就会阻塞,直到thread 执行完成,当前线程才可以继续往下转载 2021-06-07 11:33:19 · 538 阅读 · 0 评论 -
SimpleDateFormat线程不安全原因及解决方案
SimpleDateFormat线程不安全原因及解决方案一、线程不安全验证:/** * SimpleDateFormat线程安全测试 * 〈功能详细描述〉 * * @author 17090889 * @see [相关类/方法](可选) * @since [产品/模块版本] (可选) */public class SimpleDateFormatTest { private SimpleDateFormat simpleDateFormat = new SimpleDate转载 2021-06-07 11:06:38 · 187 阅读 · 0 评论 -
Java线程安全的集合详解
一、早期线程安全的集合我们先从早期的线程安全的集合说起,它们是Vector和HashTable1.VectorVector和ArrayList类似,是长度可变的数组,与ArrayList不同的是,Vector是线程安全的,它给几乎所有的public方法都加上了synchronized关键字。由于加锁导致性能降低,在不需要并发访问同一对象时,这种强制性的同步机制就显得多余,所以现在Vector已被弃用2.HashTableHashTable和HashMap类似,不同点是HashTable是线程转载 2021-05-20 14:21:53 · 5923 阅读 · 1 评论 -
ZK和EureKa的区别(CAP理论)
本文作者通过ZooKeeper与Eureka作为 Service发现服务(注:WebServices 体系中的UDDI就是个发现服务)的优劣对比,分享了Knewton在云计算平台部署服务的经验。本文虽然略显偏激,但是看得出Knewton在云平台方 面是非常有经验的,这篇文章从实践角度出发分别从云平台特点、CAP原理以及运维三个方面对比了ZooKeeper与Eureka两个系统作为发布服务的 优劣,并提出了在云平台构建发现服务的方法论。背景很多公司选择使用 ZooKeeper作为Service发现服转载 2021-05-09 21:35:06 · 577 阅读 · 0 评论 -
java ssh Jsch上传文件到服务器
package com.utils.ssh;import java.io.File;import java.io.FileInputStream;import java.util.Properties;import javax.transaction.SystemException;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.stereotype.Component;.原创 2021-03-24 15:29:00 · 606 阅读 · 0 评论 -
使用ProcessBuilder的builder.redirectErrorStream(true);解决process.waitFor()长输出卡死的问题
package com.aa.iot.mapp.std.videocenter.hk.process;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;import org.slf4j.Logger;import org.slf4j.LoggerFactory;.原创 2021-03-18 09:26:08 · 1732 阅读 · 0 评论 -
Java process.waitFor() 卡死问题
在编写Java程序时,有时候我们需要调用其他的诸如exe,shell这样的程序或脚本。在Java中提供了两种方法来启动其他程序: (1) 使用Runtime的exec()方法 (2) 使用ProcessBuilder的start()方法 Runtime和ProcessBulider提供了不同的方式来启动程序,设置启动参数、环境变量和工作目录。但是这两种方法都会返回一个用于管理操作系统进程的Process对象。这个对象中的waitFor()是我们今天要讨...转载 2021-03-18 09:17:07 · 4787 阅读 · 2 评论 -
后台运行jar包并输出日志
运行命令(注意路径)java -jar /web/share-book.jar > /web/log.txt &该命令的意思是:执行share-book.jar这个文件,并且输出到log.txt文件,&表示后台运行解决更新项目带来的频繁重启操作,创建2个脚本start.sh#! /bin/bash#注意:必须有&让其后台执行,否则没有pid生成 jar包路径为绝对路径java -jar /web/share-book.jar > /web/转载 2020-11-13 10:42:50 · 1060 阅读 · 2 评论 -
BlockingQueue
简介Queue是什么就不需要多说了吧,一句话:队列是先进先出。相对的,栈是后进先出。如果不熟悉的话先找本基础的数据结构的书看看吧。BlockingQueue,顾名思义,“阻塞队列”:可以提供阻塞功能的队列。首先,看看BlockingQueue提供的常用方法: 可能报异常 返回布尔值 可能阻塞 设定等待时间 入队 add(e) offer(...原创 2019-12-12 16:55:18 · 140 阅读 · 0 评论 -
JDK代理和Cglib代理
1.动态代理动态代理有以下特点:1.代理对象,不需要实现接口2.代理对象的生成,是利用JDK的API,动态的在内存中构建代理对象(需要我们指定创建代理对象/目标对象实现的接口的类型)3.动态代理也叫做:JDK代理,接口代理JDK中生成代理对象的API代理类所在包:java.lang.reflect.ProxyJDK实现代理只需要使用newProxyInstance方法,但是该方法...转载 2019-12-12 14:12:58 · 140 阅读 · 0 评论 -
详解Log4j 日志文件存放位置设置
以DailyRollingFileAppender 为例:假设每天一个日志文件有以下设置:log4j.appender.A1=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.A1.File=app.loglog4j.appender.A1.DatePattern='.'yyyy-MM-ddlog4j.appende...转载 2019-11-27 17:02:37 · 2045 阅读 · 0 评论 -
java -jar 启动参数
-Dspring.profiles.active=dev这个可以在spring-boot启动中指定系统变量,多环境(测试、预发、线上配置)的区分jvm堆设值: -Xmx3550m -Xms3550m -Xmn2g -Xss128k -client,-server这两个参数用于设置虚拟机使用何种运行模式,client模式启动比较快,但运行时性能和内存管理效率不如server模式,通常用于客...转载 2019-11-27 15:39:32 · 1208 阅读 · 0 评论 -
Maven项目读取resources下文件的路径
URL url = 类名.class.getClassLoader().getResource("conf.properties"); File file = new File(url.getFile()); 或者 URL url = getClass().getClassLoader().getResource("conf.properties"); File file = new F...原创 2019-11-27 08:53:18 · 1165 阅读 · 0 评论 -
Java 常用IO流操作详解
1.基本概念IO:Java对数据的操作是通过流的方式,IO流用来处理设备之间的数据传输,上传文件和下载文件,Java用于操作流的对象都在IO包中。2.IO流的分类图示:(主要IO流)3.字节流(1).字节流基类1).InputStreamInputStream:字节输入流基类,抽象类是表示字节输入流的所有类的超类。 常用方法: // 从输入流...转载 2019-11-26 16:57:49 · 86 阅读 · 0 评论 -
java中I/O流之字节流和字符流学习总结
一、基本内容 如果要进行文件内容的操作那么必须依靠数据流完成,而数据流分为两种: 字节流:InputStream(字节输入流)、OutputStream(字节输出流); 字符流:Reader(字符输入流)、Writer(字符输出流); 字节流理解配图字符流理解配图字节流与字符流操作的本质区别只有一个:字节流是原生的操作,而字符流是经过处理后的操作。 在进...转载 2019-11-26 09:38:40 · 219 阅读 · 0 评论 -
在Java中 把String转为数学表达式
package com.app.controller;import javax.script.ScriptEngine;import javax.script.ScriptEngineManager;import javax.script.ScriptException;public class ExpressTest { public static void test1(...原创 2019-11-14 11:48:34 · 901 阅读 · 0 评论 -
springboot中注入使用线程池
//启动类@SpringBootApplicationpublic class EtlServiceApplication { public static void main(final String[] args) { SpringApplication.run(EtlServiceApplication.class, args); } ...原创 2019-10-14 14:30:35 · 2697 阅读 · 1 评论 -
java -jar shell 启动、停止
启用 vi start.sh#!/bin/sh# ################################################################### Powered by Ironfo# ##################################################################java -jar /usr/...转载 2019-10-12 19:14:22 · 1460 阅读 · 0 评论 -
java解析excel解决excel类型问题
//解决excel类型问题,获得数值 public String getValue(Cell cell) { String value = ""; if(null==cell){ return value; } switch (cell.getCellType()) { ...转载 2019-06-03 14:22:37 · 773 阅读 · 1 评论 -
RestTemplate提交表单数据的三种方法
https://blog.csdn.net/yiifaa/article/details/77939282在REST接口的设计中,利用RestTemplate进行接口测试是种常见的方法,但在使用过程中,由于其方法参数众多,很多同学又混淆了表单提交与Payload提交方式的差别,而且接口设计与传统的浏览器使用的提交方式又有差异,经常出现各种各样的错误,如405错误,或者根本就得不到提交的数据,错...转载 2019-03-13 15:28:51 · 611 阅读 · 0 评论 -
spring boot bootstrap.yml 不加载
今天单独使用SpringBoot,发现其中的bootstrap.properties文件无法生效,改成yml格式也无济于事。最后调查发现原来是因为SpringBoot本身并不支持bootstrap.properties文件,需要和Spring Cloud的组件结合——只有加上SpringCloudContext依赖才能生效。即在pom中引入:<!--需要引入该jar才能使...转载 2019-03-13 10:14:02 · 12018 阅读 · 4 评论 -
深入理解Java(一):注解(Annotation)基本概念
什么是注解(Annotation): Annotation(注解)就是Java提供了一种元程序中的元素关联任何信息和着任何元数据(metadata)的途径和方法。Annotion(注解)是一个接口,程序可以通过反射来获取指定程序元素的Annotion对象,然后通过Annotion对象来获取注解里面的元数据。 Annotation(注解)是JDK5.0及以后版本引入的。它可以用于创建文档转载 2016-12-26 18:41:08 · 276 阅读 · 0 评论 -
isAssignableFrom()方法 instanceof关键字
class1.isAssignableFrom(class2)判定此Class对象所表示的类或接口与指定的Class参数所表示的类或接口是否相同,或是否是其超类或超接口。如果是则返回true;否则返回false。如果该Class表示一个基本类型,且指定的Class参数正是该Class对象,则该方法返回true;否则返回false。1.class2是不是clas...转载 2019-07-03 14:05:31 · 680 阅读 · 0 评论