- 博客(46)
- 收藏
- 关注
原创 CompletableFuture异步编程详细使用教程
CompletableFuture是Java 8提供的一种新的编写异步任务的方式,它是一个受检查的异步任务的执行器。它支持多个任务的编排,并提供了用于检查任务执行状态以及支持完成时的回调接口的机制。通过使用CompletableFuture,程序员可以更加灵活地组织异步任务,减少代码量,从而提高程序的性能和效率。
2024-04-29 17:30:04
1582
1
原创 nginx+keepalived实现nginx高可用集群以及nginx实现Gateway网关服务集群
Keepalived是基于VRRP协议,作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
2024-02-23 14:29:20
1523
原创 JDK8 Optional优雅的判空操作
在我们编程过程中因为疏忽经常会遇到NullPointerException空指针异常,所以与此同时就避免不了对变量一层一层的进行判空。JDK8新特性所提供的Optional类,可以让我们更优雅的进行判空操作。学习其的意义就是提醒开发者注意空值情况,并在一定程度上优雅处理问题。例如下图传统判空:如上图,一旦代码量大起来了,条件多了,代码就会变得很冗余,变得难以维护,通过使用Optional就可以很好的处理,让我们继续了解。
2023-08-15 16:30:19
1014
原创 分库分表介绍以及shardingjdbc实现分库分表
分库分表是在海量数据下,由于单库、表数据量过大,导致数据库性能持续下降的问题,演变出的技术方案。分库分表是由分库和分表这两个独立概念组成的,只不过通常分库与分表的操作会同时进行,以至于我们习惯性的将它们合在一起叫做分库分表。通过一定的规则,将原本数据量大的数据库拆分成多个单独的数据库,将原本数据量大的表拆分成若干个数据表,使得单一的库、表性能达到最优的效果(响应速度快),以此提升整体数据库性能。
2023-04-12 15:37:21
1934
1
原创 SpringAOP打印请求参数和响应以及接口执行时间
本文通过SpringAop拦截controller接口层,实现打印请求参数、请求地址、响应、接口请求时间等信息,并显示链接可直接点击定位到controller代码。从而快速高效的分析日志和进入controller调试代码。
2023-02-24 18:08:21
1769
原创 idea properties配置文件中的中文显示为unicode转中文显示
如图所示,有时候我们项目里的properties配置文件中的中文显示为unicode编码格式如下图所示,无法查看其真正意思。有的人会找unicode转换工具查看,这样很麻烦,有一个好办法。
2023-02-22 17:49:10
8420
1
原创 git stash 命令详解
我们经常会在多个分支上进行开发,当切换分支的时候,如果当前分支有未提交的记录则会提示我们解决冲突,这时可以使用git stash相关命令将当前分支的工作内容保存起来,后续再恢复即可。并且可以在多个分支使用,恢复的时候也可以选择不同的记录进行恢复。
2023-02-21 14:52:53
1185
原创 IDEA GIt切换分支报错:Your local changes to the following files would be overwritten by Checkout.
在我们本地有未commit的文件时,使用IDEA切换分支的时候会报如图所示错误:意思就是对当前分支文件的更改会被Checkout覆盖。可以搁置更改然后签出和取消搁置。
2023-02-08 11:36:31
3886
原创 线程池介绍、执行流程以及SpringBoot自定义线程池
一、什么是线程池?线程池就是提前创建若干个线程,如果有任务需要处理,线程池里的线程就会处理任务,处理完之后线程并不会被销毁,而是等待下一个任务。由于创建和销毁线程都是消耗系统资源的,所以当你想要频繁的创建和销毁线程的时候就可以考虑使用线程池来提升系统的性能
2022-10-12 15:15:59
1252
原创 Spring中@Order注解的使用
使用场景:例如一些后置处理器,在执行完某段程序之后,需要对结果有其他的处理,我们就可以增加实现类,利用@Order注解指定执行顺序即可,既不会影响原有代码的逻辑也可以实现其他需求。
2022-10-12 12:21:36
972
原创 使用策略模式结合InitializingBean或ApplicationContextAware简化if-else
使用策略模式或ApplicationContextAware简化if-else
2022-07-14 18:35:34
990
1
原创 MapStruct对象属性转换工具使用教程
一、前言我们在开发过程中经常会有对象属性之间相互转换的情况,例如接口请求vo需要映射到数据库实体。通常做法是通过get/set方法进行映射,但是属性过多时显得代码冗长。还有做法是通过Spring或者Apache给我们提供的BeatUtils工具,但其实BeanUtils 就是一个大老粗,只能同属性映射,或者在属性相同的情况下,允许被映射的对象属性少;但当遇到被映射的属性数据类型被修改或者被映射的字段名被修改,则会导致映射失败。使用BeanUtils也有一些注意,他的实现机制是通过反射,导致拷贝属性的花费
2022-04-08 11:42:03
2249
原创 SpringBoot自定义注解实现策略模式
一、引言在程序执行过程中往往有多需要进行if-else判断的情况,通过使用策略模式可以解决在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。本文主要讲解通过使用自定义注解的方式来实现策略模式。二、实现方式1、本文以常见的订单处理为例。首先定义一个订单实体类。package com.example.demo.strategy;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsC
2022-03-18 11:59:18
1538
2
原创 Quartz定时任务工具类
一、前言为了方便定时任务的使用,本文提供一个定时任务的工具类,从而使用方便,随用随取二、使用步骤1、引入相关pom依赖 <!--quartz相关依赖--> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2&l
2021-11-04 14:44:23
534
原创 SpringBoot读取外部配置文件
引言在前文中介绍了SpringBoot通过注解方式读取yml配置文件中的配置,但在实际开发中往往 配置项的增多在yml文件中进行配置则显得十分臃肿,所以SpringBoot提供了@PropertySource和@ImportResource两个注解用于加载外部配置文件使用。下面将介绍这两个注解的使用方法。@PropertySource通常用于属性加载配置文件,注意@PropertySource注解不支持加载yaml文件,支持properties文件。@ImportResource通常用于加载Spri
2021-09-01 17:06:56
2053
原创 springboot 读取 yml 配置文件的几种方式
springboot 读取 yml 配置文件的几种方式前言:在springboot 项目中一般默认的配置文件是application.properties,但是实际项目中我们一般会使用application.yml 文件,下面就介绍一下在springboot 中读取 yml 配置的几种方式.一、yml文件YAML语法基本介绍1、以缩进代表层级关系2、缩进不能使用tab,只能用空格3、空格个数不重要,但是同一层级必须左对齐4、大小写敏感5、数据格式为,名称:(空格)值6、注释单行用#,只能注
2021-09-01 16:26:58
17321
原创 Springboot+mybatis多数据源配置(mysql和postgresql为例)
前言本文主要介绍Springboot-mybatis配置多数据源,以mysql数据库和postgresql数据库为例。本文经过作者按步骤编写,测试可靠,欢迎学习。一、配置application.yml文件spring: datasource: db1: # 数据库1 mysql jdbc-url: jdbc:mysql://localhost:3306/trial_business_v2015?characterEncoding=utf8&useUnicode=true
2021-08-16 16:28:14
1827
原创 SpringBoot访问JSP页面引入tomcat-embed-jasper之后报错找不到其他jar包
之前的Spring项目需要转SpringBoot,页面用的JSP,需要配置tomcat-embed-jasper插件才能访问JSP页面否则会变成下载或者404,但是引入之后,会报错找不到jaxws-rt.jar,手动引入此jar包之后又会报错很多jar包找不到,后来偶然找到解决办法。按照如下引入依赖即可 <!-- 引入Spring Boot 内嵌的Tomcat对jsp的解析包--> <dependency> <groupId>org.apac
2021-07-28 10:21:19
6182
1
原创 Linux修改系统时间
Linux修改系统时间一、修改linux系统时间主要命令:root使用date指令:date -s1、只修改日期,不修改时间,输入:date -s 2021-04-022、只修改时间,输入:date -s 12:00:003、同时修改日期时间,注意要加双引号,日期与时间之间有一空格,输入:date -s “2021-04-02 10:25:00”4、修改完后,记得输入:clock -w把系统时间写入CMOS二、修改时区不重启在root下复制相应的时区文件,替换系统时区文
2021-04-02 10:52:02
10831
原创 MySQL安装和卸载教程
前言有的时候稀里糊涂的就把mysql弄崩了,报错显示各种问题不好解决,有的时候需要通过卸载重新安装来解决问题。本文经详细测试,步骤详细完全可用,欢迎学习。一、MySQL的下载与安装一、下载1、下载地址https://dev.mysql.com/downloads/mysql/2、选择Archives来选择自己需要下载的mysql版本3、如下图所示,这里选择5.7.25版本进行下载二、安装1、将下载后的zip压缩包直接解压到下载位置即可2、配置环境变量我的电脑->属性-&g
2021-03-31 17:44:15
353
原创 idea生成类注释和方法注释的正确方法
前言本文将介绍如何在idea工具中以自定义模板的方式生成类注释和方法注释。虽然在方法注释时idea提供了默认模板注释(/**回车),这种方式只给参数和返回值添加注释,可能不满足需求。所以我们可以自定义模板,来增加开发效率。一、生成类注释1、File -> Settings -> Editor -> File and Code Templates如图所示,选择Class创建模板即可。模板如下:/***@description: ${description}*@author
2020-11-24 12:18:32
3470
原创 java使用httpclient调用其他http接口
java使用httpclient调用其他http接口本文经测试可用,直接创建工具类进行调用即可。工具类代码如下:import com.alibaba.fastjson.JSONObject;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpP
2020-10-23 11:00:23
876
2
原创 结合ajax完成layui的分页
本文为大家介绍layui的分页使用教程,步骤详细,欢迎学习。官网地址:https://www.layui.com/doc/modules/laypage.htmllaypage 的使用非常简单,指向一个用于存放分页的容器,通过服务端得到一些初始值,即可完成分页渲染:一、导入相关JS<script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" s
2020-10-12 09:12:26
835
1
原创 idea运行新导入的maven项目时报错找不到 *.properties配置文件
问题:有的时候新导入idea的maven项目部署运行后,报错找不到配置文件,例如:java.lang.IllegalArgumentException: Properties file not found in classpath: devMode.properties解决办法:这种错误很可能是maven的错误,可以在pom文件中添加资源文件路径 <resources> <resource> <!--java文件的路径-
2020-09-15 15:41:51
1593
原创 什么是消息队列?为什么会用到消息队列以及消息队列需要考虑的问题
前言本文将会介绍什么是消息队列,为什么会用到消息队列,以及用消息队列会产生哪些问题,可以怎样解决等等。也看了很多文章,写的都很好,好记性不如烂笔头,所以自己也归纳总结一下,从而加深理解,欢迎大家一起学习探讨。介绍一、什么是消息队列?(MQ)消息队列我们一般会简称它为MQ(Message Queue),队列(Queue)这个词大家都不陌生,类似于火车站排队进站,先排队的人先进站,这是一种典型的“先进先出,后进后出”的例子。所以其实消息队列就是基础数据结构中“先进先出”的一种数据结构,下图更好的解释了这
2020-07-30 17:38:51
1479
原创 CentOS7卸载安装JDK教程
一、卸载自带的JDK1、检查系统中是否已存在JDK[root@localhost /]# rpm -qa|grep jdkjava-1.8.0-openjdk-headless-1.8.0.65-3.b17.el7.x86_64java-1.7.0-openjdk-1.7.0.91-2.6.2.3.el7.x86_64 java-1.7.0-openjdk-headless-1.7.0.91-2.6.2.3.el7.x86_64java-1.8.0-openjdk-1.8.0.65-3.b17.
2020-07-27 14:42:37
738
原创 解决Idea启动时端口被占用的问题
前言有时候我们刚打开idea,启动项目的时候会发现端口号被占用的问题出现这个问题有的人是关闭idea时选择了Disconnect,继续保持了连接。步骤解决端口号被占用很简单一、首先win+R快捷键打开黑窗口,然后输入命令,查询被占用端口号的进程netstat -ano | findstr 占用端口号(8088)二、输入命令强制、递归 删除本程序及其子进程即可taskkill -f -t -im 进程名然后我们再次重启服务器即可,发现问题已经解决。...
2020-05-21 09:32:03
1821
1
原创 layui复选框根据后台参数值设置默认选中checked
前言本文介绍layui复选框如何根据该参数给定的值来给checkbox设置默认值,步骤非常简单。操作效果如下,刚进入页面时根据参数的值,默认选中复选框代码<div class="layui-form-item"> <label class="layui-form-label">难易级别</label> <div class="layui-input-block"> <input type
2020-05-20 14:29:16
4295
原创 mysql随机查询n条数据
mysql随机查询n条数据遇到一个业务需求是随机查询n条数据,一开始使用这种写法select * from table order by rand() limit n后来发现这种写法的查询效率极低,并且官方也不推荐使用。又经过查询发现网上很多教程更靠谱的写法如下SELECT *FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`))+(
2020-05-14 08:36:45
253
原创 layui的复选框如何向后台传值
前言使用layui复选框的时候需要向后台传递值,值的形式为逗号分割的形式。如下图需要选择多个条件。方法layui的前端样式代码如下 <div class="layui-form-item"> <label class="layui-form-label">复选框</label> <div class="layui-input-block"> <input type="checkb
2020-05-13 18:12:22
3266
原创 JAVA循环批量添加数据时导致uuid重复
前言我在对数据库做批量添加操作时,发现循环添加的UUID是重复的,经过查阅文档发现可能是循环添加时程序运行过快,所以两次添加的数据id为同一个UUID,所以找到解决办法之后特此来记录一下。方法其实解决方案很简单,在生成UUID时我们可以加一个锁,使他进来时每次只生成一个UUID,再继续生成下一条,这样就可以避免重复的情况。代码如下: String uuid=""; syn...
2020-05-08 08:51:33
4857
1
原创 定时任务框架Quartz的存储方式持久化与集群配置
引言前面的博文介绍了Quartz定时任务框架的相关知识,以及如何与Spring进行集成。本文将继续介绍Quartz的存储方式以及集群配置。存储方式一、存储方式 RAMJobStore和JDBCJobStoreQuartz提供两种基本作业存储类型。第一种类型叫做RAMJobStore,第二种类型叫做JDBC作业存储。在默认情况下Quartz默认使用RAMJobStore存储方式将任务调度的运...
2020-04-26 15:29:05
858
原创 定时任务框架Quartz与Spring集成
前言上一篇博文介绍了定时任务框架Quartz的使用方法,Quartz定时任务框架功能强大,使用简单,本文继续介绍在Spring中使用Quartz,本文步骤详细,按步骤操作即可,欢迎学习。Spring集成Quartz步骤一、环境搭建同样首先需要引入Quartz相关依赖jar包和Spring集成的相关依赖<!--quartz相关依赖--> <dependency&g...
2020-04-22 14:48:24
244
原创 定时任务框架Quartz使用教程
概述Quartz 是一个功能丰富开放源码的任务调度框架。几乎可以集成到任何Java应用程序中——从最小的独立应用程序到最大的电子商务系统。可以创建简单或者复杂的调度用来执数十个甚至成百上万个作业;Quartz功能强大可以让你的程序在指定时间执行,也可以按照某一个频度执行,支持数据库、监听器、插件、集群等特性。使用场景:定时消息推送、定时抢购、定时发送邮件、定时统计等。环境搭建...
2020-04-21 15:00:18
848
原创 手动添加jar包到本地maven仓库中
引言:有的时候我们在pom中添加依赖的时候发现系统无法自动下载jar包,这是因为远程仓库中没有这个依赖jar包,所以需要我们在中央仓库中下载jar包之后手动添加到我们的本地仓库中,就可以解决jar包缺失的问题。例子:我在SpringBoot集成websocket的时候,下载有关websocket的依赖失败。如下:<!-- https://mvnrepository.com/artif...
2020-04-17 09:42:32
253
原创 SpringBoot集成mybatis教程
引言:本文主要介绍SpringBoot如何集成mybatis框架。MyBatis简单介绍:MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java...
2020-04-16 14:24:20
415
原创 SpringBoot项目的快速创建以及简单访问html网页
引言:Spring Boot是什么?Spring Boot是由Pivotal团队提供的全新矿建,其设计目的是用来简化Spring应用的初始搭建以及开发过程。改框架使用了特定的方式来进行配置,从而使开发人员不 再需要定义样板化的配置。通过这种方式,Spring Boot致力 于在蓬勃发展的快速应 用开发领域(rapid application development)成为领导者。Spring B...
2020-04-15 16:28:14
9017
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人