
Java
文章平均质量分 51
以实战为线索,逐步深入Java开发的各个环节,掌握后端常用性能体验及优化思路,提升编码能力及思维能力。
它山之石,可以攻玉
工欲善其事,必先利其器。
展开
-
Linux 下Java环境的安装
环境CentOS Linux release 7.9.2009Java 8vim下载JDKJDK下载地址 ,默认是最新版本,下拉即可看到其他版本。选择自己的jdk版本,以java8为例:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DgOcHBLd-1637561381329)(https://s6.jpg.cm/2021/11/22/IOe6yE.jpg)]下载 jdk-8u311-linux-x64.tar.gz 到 /usr/local/src目录下原创 2021-11-22 14:10:37 · 545 阅读 · 0 评论 -
shiro使用爬坑记录之shiro-redis
shiro使用爬坑记录之shiro-redis前言 权限认证使用的一直都是shiro,因为项目重构导致之前的认证不可用,故本片文章记录排错过程。环境SpringBoot 2.1.3.RELEASEMybatis-plus 3.1.2Shiro 1.4.0Jwt 3.7.0shiro-redis 3.1.0错误信息class java.lang.String must has getter for field: authCacheKey or id We need a field原创 2021-10-14 12:39:12 · 439 阅读 · 0 评论 -
Java使用BigDecimal 比较大小
前言最近使用BigDicmal的情景比较多,经常会判断数值大小,故记录一下日常使用的方法。代码public class BigDecimalCompare { private BigDecimalCompare() { } /** * a是否等于 b * * @param a 数字a * @param b 数字b * @return 结果 */ public static boolean eq(BigDeci原创 2021-08-06 15:32:21 · 1657 阅读 · 0 评论 -
Oracle账号分享[JDK下载使用]
Oracle账号分享[JDK下载使用]前言开发过程中需要使用java环境时需要下载jdk,但是需要Oracle账号才可以下载,所以分享一个账号供大家下载使用,切记勿修改密码及违规使用,且用且珍惜。JDK下载地址JDK不同版本地址JDK8下载地址账号1287019365@qq.comOracle@1234注意事项切勿修改密码,切勿修改密码,切勿修改密码切勿违规,切勿违规,切勿违规总结欢迎大家支持,你的支持将是对我最大的鼓励。参考链接Oracle账号分享[JDK下载使用]..原创 2021-07-27 17:56:15 · 2960 阅读 · 9 评论 -
[经验] 获取压缩包文件名列表
[经验] 获取压缩包文件名列表前言最近开发一个校园系统,需要从三方导入学生数据,但是没有学生头像,需手动上传学生压缩包,将图片存储至服务器内部,配置静态资源访问路径,供网站使用,记录一下使用过程。环境spring boot 2.3.5.RELEASEjava 8hutool 5.0.4zip4j 1.3.2思路递归文件路径获取文件名及文件路径1、将文件保存至本地2、解压文件3、递归文件目录,采集文件名代码逻辑UnzipUtil 工具类import cn.hutool.cor原创 2021-07-26 15:51:04 · 1871 阅读 · 0 评论 -
[经验] springboot通用发布启动脚本
前言日常开发中,经常会打包发布项目到服务器,每次都重新写一次会非常浪费时间,故写了一个通用的打包发布及启动脚本。操作环境Centos 7gitjava 8maven3打包发布脚本publish.sh#!/bin/bash# 当前时间date=`date "+%Y%m%d%H%M%S"`# 项目地址git_addr="http://git/repository/java/project.git"# 项目根目录master_dir="project"slave_dir=""原创 2021-07-26 14:36:21 · 443 阅读 · 0 评论 -
springboot + mybatis plus + mysql 树形结构查询
springboot + mybatis plus + mysql 树形结构查询背景实际开发过程中经常需要查询节点树,根据指定节点获取子节点列表,以下记录了获取节点树的操作,以备不时之需。使用场景可以用于系统部门组织机构、商品分类、城市关系等带有层级关系的数据结构;设计思路递归模型即根节点、枝干节点、叶子节点,数据模型如下:idcodenameparent_code110000电脑0220000手机0310001联想笔记本10000原创 2021-07-21 15:47:36 · 4805 阅读 · 3 评论 -
Java 执行CMD命令或执行BAT批处理
背景日常开发中总能遇到一些奇怪的需求,例如使用java执行cmd命令或者bat批处理文件,今天就简单记录一下使用过程。使用废话不多说直接上代码import java.io.BufferedReader;import java.io.FileWriter;import java.io.IOException;import java.io.InputStreamReader;public class Cmder { /** * 执行一个cmd命令 * *原创 2021-04-28 14:15:10 · 2932 阅读 · 0 评论 -
关于jackson 序列化反序列化属性名称问题
前言最近在项目使用json字符串转javaBean 在转换过程中发现json转到JavaBean的时候属性名称不一至。例如json字符串为:{ "code": "1", "message": "操作成功"}后端javaBean为:@Datapublic class Result implements Serializable { private String aaa; private String bbb;}解决方法引用 jackson-ann原创 2021-04-14 17:35:02 · 1240 阅读 · 0 评论 -
Springboot 基于CXF构建WebService服务
前言最近因为系统需要接入了一个新的支付通道,一般来说都是使用RestApi 来接入,但是本次接入的支付通道为境外支付,使用的WebService,对于WS我们在实际业务中基本上不会用到,所以查阅了一些资料,记录一下自己项目中使用的WS。WebService概述什么是WebServiceWeb Service技术,能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间,无论它们所使用的语言、平台或内部协议是什么,原创 2021-04-13 11:23:35 · 2011 阅读 · 0 评论 -
HttpServletRequest 重复读取及设置自定义header
前言最近在开发中遇到了一个需求,需要重复读取HttpServletRequest请求内容及设置自定义header向下传递,但是会出现Required request body is missing ,原因是ServletInputStream的流只能读取一次,那么我们只需要让请求内容可以重复读取即可,可以通过HttpServletRequestWrapper来实现。实现步骤1.自定义MutableHttpServletRequestpublic class MutableHttpServletReq原创 2021-04-13 11:21:57 · 2671 阅读 · 0 评论 -
编程式动态AOP实践
前言在实际开发中我们经常需要打印日志或者监控方法执行,使用spring ao能够很好的实现这个功能,但是切面中的Pointcut是固定值,不可被更改,就导致多个应用程序使用功能相同的aop需要有大量重复代码,我们希望将这些功能相同的部分封装并抽离为一个公共组件包,能够动态配置Pointcut。实现思路从Spring的AOP机制已知,要对一个方法或类切入需要实现以下步骤Pointcut,实现spring 中的Pointcut接口自定已切入点,根据具体的业务实现本文章示例使用spring中的 As原创 2021-04-13 11:20:13 · 230 阅读 · 0 评论 -
Spring Retry 请求重试指南
1 前言在实际开发中, 例如在系统请求其他系统或资源的外部调用、操作时,由于网络故障等问题会造成短时间内失败。 我们希望当操作失败时,将使用重试策略来重试该操作。2 添加依赖<dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId> <version>1.1.5.RELEASE原创 2021-04-13 11:18:51 · 577 阅读 · 0 评论 -
Spring RestTemplate错误处理
前言在实际开发中使用RestTemplate 经常会出现返回非200状态码报异常,这是源于RestTemplate 默认响应状态码处理机制,默认情况下RestTemplate如果发生HTTP错误将会抛出以下异常:HttpClientErrorException – in case of HTTP status 4xxHttpServerErrorException – in case of HTTP status 5xxUnknownHttpStatusCodeException – in cas原创 2021-04-13 11:17:19 · 1820 阅读 · 0 评论 -
java根据经纬度计算距离
前言最近有个需求是根据经纬度获取用户之间的距离,最初使用的是Redis中的GEO ,但是计算出来的距离和预期的偏差较大,所以寻求了另外的一种方式,通过geodesy来计算两个经纬度之间的距离,如果大家有谁使用了redis方式计算成功了欢迎评论给我,让我学习一下。首先引入依赖<dependency> <groupId>org.gavaghan</groupId> <artifactId>geodesy</artifactId> &l原创 2021-04-13 11:15:34 · 1172 阅读 · 0 评论 -
spring+mybatis报Cannot load JDBC driver class ${xxxxx}'错误
spring整合mybatis时,运行会出现Cannot load JDBC driver class ${xxxxx}'错误,解决办法有两种:<!-- mapper批量扫描,从mapper包中扫描出mapper接口,自动创建代理对象并且在spring容器中注入 遵循规范:将mapper.java和mapper.xml映射文件名称保持一致,且在一个目录中. 自动扫描出来的m原创 2016-12-06 16:51:23 · 750 阅读 · 1 评论 -
ThreadPoolExecutor线程池参数设置技巧
一、ThreadPoolExecutor的重要参数 corePoolSize:核心线程数 核心线程会一直存活,及时没有任务需要执行 当线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线程处理 设置allowCoreThreadTimeout=true(默认false)时,核心线程会超时关闭 queueCapacity:任务队列容量(阻塞队列) 当核心线...转载 2018-08-10 10:55:33 · 776 阅读 · 0 评论 -
感性的理解JVM
感性的理解JVM jvm 基础 jvm是什么? JVM是Java Virtual Mechine的缩写。它是一种基于计算设备的规范,是一台虚拟机,即虚构的计算机 jdk是什么 Java Runtime Environment Java的开发工具包 例如:javac 编译 jre是什么 Java Runtime Environ...原创 2018-08-01 14:53:29 · 175 阅读 · 0 评论 -
jvm 类装载器
jvm 类装载器class 装载、认证流程加载 加载类的第一阶段 取得二进制流 转为方法区的数据结构 在Java堆中生成对应的java.lang.Class对象 链接 验证 目的:保证Class流的格式是正确的 文件格式的验证 是否以0xCAFEBABE开头 版本号是否合理 元数据的验证 是否有父类 ...原创 2018-08-01 17:43:24 · 234 阅读 · 0 评论 -
spring Spel 在aop中的应用
项目中时常用到aop切面做一些功能,但是获取切面中方法的参数有多样的方法,我列出我在项目中运用spel的方式: 定义注解: @Target({ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface RecordAnnotation { InterfaceTyp...原创 2018-08-10 16:07:53 · 1664 阅读 · 0 评论 -
java面试之常见问题汇总
面试常见问题总结java面试之【java中的锁】 java中的锁 公平锁/非公平锁 公平锁是指多个线程按照申请锁的顺序来获取锁。 非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁,就有可能造成优先级反转或者饥饿现象。 ReentrantLock:通过构造函数指定该锁是否是公平锁,默认是非公平锁。非公平锁的优点在于吞...原创 2018-08-06 17:48:57 · 686 阅读 · 0 评论 -
AOP获取参数名称
由于项目中打印日志的需要,研究了一下在aop中,获取参数名称的方法。1、jdk1,8中,比较简单,直接通过joinPoint中的getSignature()方法即可获取[java] view plain copySignature signature = joinpoint.getSignature(); MethodSignature methodSignature = (MethodSign...原创 2018-04-28 15:12:08 · 2315 阅读 · 0 评论 -
java 正则匹配三大运营商号段
package com.linbilin.phone; import java.util.regex.Matcher; import java.util.regex.Pattern; public class CheckPhone { /** 电话格式验证 **/ private static final String PHONE_CALL_P...原创 2018-04-08 10:23:58 · 880 阅读 · 0 评论 -
springMVC中获取request和response
在很多时候项目中用到了HttpServletResponse 和 HttpServletRequest 但是无法获取到,参考了很多文章,以下为亲自试验可以使用:ServletRequestAttributes servletContext = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();//获取原创 2017-01-17 11:24:42 · 807 阅读 · 0 评论 -
基于注解的spring AOP简单实现
AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向切面编程。可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。我们现在做的一些非业务,如:日志、事务、安全等都会写在业务代码中(也即原创 2017-01-17 11:21:31 · 504 阅读 · 0 评论 -
基于HttpClient实现Http访问工具类
HttpClient官方下载地址:http://hc.apache.org/downloads.cgi如果使用的是jar包方式,将下载的jar添加到项目中Build Path即可.如果使用的是maven 添加pom.xml依赖: org.apache.httpcomponents httpclient 4.5.2HttpClientUtil.java:package com原创 2016-12-21 09:54:38 · 1333 阅读 · 0 评论 -
java 利用mail.jar发送邮件
JavaMail是什么:JavaMail是SUN提供给开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发类库,支持常用的邮件协议,如SMTP、POP3、IMAP,开发人员使用JavaMail编写邮件程序时,无需考虑底层的通信细节(Socket),JavaMail也提供了能够创建出各种复杂MIME格式的邮件内容的API。使用JavaMail,我们可以实现类似OutLook、FoxMa原创 2016-12-08 15:52:08 · 2324 阅读 · 0 评论 -
Javassist简单应用小结
概述 Javassist是一款字节码编辑工具,可以直接编辑和生成Java生成的字节码,以达到对.class文件进行动态修改的效果。熟练使用这套工具,可以让Java编程更接近与动态语言编程。 下面一个方法的目的是获取一个类加载器(ClassLoader),以加载指定的.jar或.class文件,在之后的代码中会使用到。[java] view plain copy转载 2016-12-05 14:43:02 · 368 阅读 · 0 评论 -
大话程序猿眼里的高并发
高并发是指在同一个时间点,有很多用户同时的访问URL地址,比如:淘宝的双11,双12,就会产生高并发,如贴吧的爆吧,就是恶意的高并发请求,也就是DDOS攻击,再屌丝点的说法就像玩撸啊撸被ADC暴击了一样,那伤害你懂得(如果你看懂了,这个说法说明是正在奔向人生巅峰的屌丝。高并发会来带的后果服务端:导致站点服务器/DB服务器资源被占满崩溃,数据的存储和更新结果和理想的设计是不一转载 2016-09-20 14:20:02 · 277 阅读 · 0 评论 -
java 加载properties
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.util.Properties;public class Context { private static Propertie原创 2015-11-20 09:32:18 · 395 阅读 · 0 评论 -
JS +XML +Jquery 实现三级联动菜单,自己封装的一个对象方便使用
JS +XML +Jquery 实现三级联动菜单,自己封装的一个对象方便使用转载 2015-11-19 16:07:21 · 610 阅读 · 0 评论 -
java 内存分配分析
本文将由浅入深详细介绍Java内存分配的原理,以帮助新手更轻松的学习Java。这类文章网上有很多,但大多比较零碎。本文从认知过程角度出发,将带给读者一个系统的介绍。进入正题前首先要知道的是Java程序运行在JVM(Java Virtual Machine,Java虚拟机)上,可以把JVM理解成Java程序和操作系统之间的桥梁,JVM实现了Java的平台无关性,由此可见JVM的重要性。所转载 2017-03-07 16:01:41 · 320 阅读 · 0 评论 -
Java 堆、栈、方法区的区别
Java的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method)也叫静态存储区。堆区:1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令) 2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身栈区:1.每个线程包含一个栈区,栈中只保存基础数据类原创 2017-04-28 09:43:33 · 517 阅读 · 0 评论 -
java反射获取Object的属性和值
import java.lang.reflect.Field;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;/** * 反射处理Bean,得到里面的属性值 * * @author liulinsen * */public clas...原创 2018-03-23 14:08:08 · 3381 阅读 · 0 评论 -
Java POI 导出EXCEL经典实现 Java导出Excel弹出下载框 【不定期更新】
在web开发中,有一个经典的功能,就是数据的导入导出。特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作。而数据导出的格式一般是EXCEL或者PDF,我这里就用两篇文章分别给大家介绍下。(注意,我们这里说的数据导出可不是数据库中的数据导出!么误会啦^_^) 呵呵,首先我们来导出EXCEL格式的文件吧。现在主流的操作Excel文件的转载 2017-12-31 13:36:25 · 897 阅读 · 0 评论 -
依靠JAXBContext轻松实现Java和xml的互相转换
类文件注解:@XmlRootElement不可缺少@XmlRootElement public class Man { private String name; private int age; public Student() { super(); } public Student(String n原创 2017-06-14 17:10:18 · 7496 阅读 · 1 评论 -
Maven项目中获取classpath和资源文件的路径
假设资源文件放在maven工程的 src/main/resources 资源文件夹下,源码文件放在 src/main/Java/下, 那么java文件夹和resources文件夹在运行时就是classpath的真实位置,如果有一个文件位于 src/main/resources/test.txt有一个类位于 src/main/java/com/qunar/MyClass.javaFILE原创 2017-06-07 14:56:49 · 3859 阅读 · 1 评论 -
使用Session防止表单重复提交
在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交。一、表单重复提交的常见应用场景有如下的form.jsp页面 1 @ page language="java" import="java.util.*" pageEncoding="UTF-转载 2017-05-11 17:29:33 · 341 阅读 · 0 评论 -
使用kaptcha生成验证码
kaptcha是一个简单好用的验证码生成工具,通过配置,可以自己定义验证码大小、颜色、显示的字符等等。下面就来讲一下如何使用kaptcha生成验证码以及在服务器端取出验证码进行校验。一、搭建测试环境1.1、创建Web测试项目 新建一个Web项目,并将kaptcha-2.3.2.jar放在项目的WEB-INF/lib目录下,如下图所示: 1.2、在web.转载 2017-05-11 16:55:45 · 395 阅读 · 0 评论 -
Java Web项目MVC开源框架SSH和SSM比较
SSH和SSM定义SSH 通常指的是 Struts2 做控制器(controller),spring 管理各层的组件,hibernate 负责持久化层。SSM 则指的是 SpringMVC 做控制器(controller),Spring 管理各层的组件,MyBatis 负责持久化层。共同点:1.Spring依赖注入DI来管理各层的组件。2.使用面向切面编程AOP管理事物、日转载 2017-05-11 16:11:56 · 1232 阅读 · 0 评论