- 博客(35)
- 资源 (1)
- 收藏
- 关注
原创 SpringBoot项目返回格式化日期
在实际开发中,数据库中保存得日期格式是datetime或timestamp,显示的日期格式不易阅读,前端需要指定格式的日期,有两种方式可以在项目中格式化日期配置文件中指定日期格式如果实体类的日期类型是Date,可以直接在配置文件中指定日期格式spring: jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8如果实体类的日期类型是Java8中的LocalDateTime,上面的方法会失效,需要用到下面这种方式实体
2021-02-22 23:12:20
29
1
原创 Java8几种常用字符串拼接方法总结
字符串的拼接在Java开发过程中经常被使用,Java中提供了6中常用的字符串拼接方法,本文主要介绍这几种拼接方法的使用1、使用"+"号public static void main(String[] args) { String str1 = "Hello"; String str2 = "World"; long startTimes = Instant.now().toEpochMilli(); System.out.println("开始时间:" + startTi
2021-01-10 17:17:20
214
1
原创 Idea2020设置导入包不带*
在使用Idea进行Java开发的过程中,导入的包过多就会变成*,阅读代码时容易分不清导入的具体是哪个jar包下的文件,本文以此为背景介绍如何设置导入包不带*
2021-01-09 12:17:31
160
原创 Nacos实现分布式配置
概述Nacos提供用于存储配置和其他元数据的key/value存储,为分布式系统中的外部化配置提供服务器端和客户端支持,使用Nacos可以替换Config作为分布式配置中心。首先配置好Nacos运行环境,不清楚的小伙伴可以访问Nacos服务在win10上安装和启动引入依赖包新建多模块项目,在父项目pom.xml文件中加入依赖<properties> <java.version>1.8</java.version> <project.buil
2021-01-03 20:16:55
173
原创 nacos服务在win10上安装和启动
nacos是SpringCloud Alibaba所使用的注册/配置组件,从github上下载nacos-server 1.4.0压缩文件解压后直接双击bin目录下startup.cmd脚本会报错db.num is null从异常日志可以看出应该是跟数据库相关在conf目录下有application.properties配置文件和nacos-mysql.sql文件...
2020-12-08 23:11:51
462
原创 SpringBoot2.3.4整合Dubbo和Zookeeper实现分布式架构搭建
概述随着互联网的发展,分布式服务架构越来越受到开发人员的青睐,常用的分布式架构有阿里的Dubbo和SpringCloud,本文将主要介绍SpringBoot整合Dubbo实现分布式架构的搭建。大家都知道Dubbo是阿里开源的一个高性能优秀的服务框架,使得应用可以通过高性能的RPC实现服务的输出和输入功能。主要提供三大核心能力:面向接口的远程方法调用、智能容错和负载均衡、服务自动注册和发现。Dubbo架构如下图:Provider:暴露服务的服务提供方Consumer:调用远程服务的服务消费方Re
2020-11-20 15:36:00
240
原创 SpringBoot2.3.4整合JavaMail实现发送邮件
概述在实际开发中,经常会涉及到发送邮件的需求,比如用户激活。Spring中提供了javamail库用于发送电子邮件,发送电子邮件的主接口是MailSender,用于发送普通邮件,继承于它的JavaMailSender接口用于发送复杂的邮件,JavaMailSender还提供了一个回调接口MimeMessagePreparator用于准备MimeMessage。Spring中提供了三种发送普通邮件的方式,本文都做了代码实现。更多详情请查阅spring官网中关于邮件的描述spring-framework官网
2020-11-07 20:36:04
203
原创 SpringBoot整合vue-admin-template实现登录
vue-admin-template简介前后端分离开发模式越来越受开发人员的喜爱,开源项目vue-admin-template 是一个后台前端解决方案,它基于 vue 和 element-ui实现。更多详情请阅读vue-template-admin官网,vue-admin-template项目是其基础模板,本文基于vue-admin-template实现与SpringBoot的整合SpringBoot整合vue-admin-template...
2020-11-04 16:31:51
613
2
原创 SpringBoot2.3.4整合xxl-job实现分布式定时任务
概述xxl-job是一个分布式任务调度平台,其核心设计目标时开发迅速、学习简单、轻量级、易扩展。现已开放源码并接入多家公司线上产品线,开箱即用更多详情参阅xxl-job官网xxl-job是一个十分优秀的开源任务调度平台,已经有很多知名的公司都接入了自己的系统。本文基于SpringBoot2.3.4整合xxl-job实现分布式定时任务。下载xxl-job源码码云地址github地址本文下载最新稳定版本2.2.0作为整合版本搭建环境在doc/db目录下找到sql文件tables_xxl_jo
2020-11-03 19:54:10
356
原创 SpringBoot2.3.4整合Sharding-JDBC实现分库分表
概述什么是ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,由JDBC、Proxy和Sidecar三部分组成。其定位为关系型数据库中间件,旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库。更多详情请参阅ShardingSphere官网什么是分库分表随着时间和业务的发展,造成表里面的数据越来越多,如果再去对数据库表curd操作,很容易造成性能问题,这个时候,为了解决由于数据量过大而造成数据库性能降低的问题,常见的解决方案其一
2020-11-02 19:48:11
290
原创 SpringBoot2.3.4整合SpringSecurity+Jwt实现权限管理
概述本文主要介绍SpringBoot整合SpringSecurity和Jwt实现权限管理的认证和授权,所用到的技术栈及版本如下:SpringBoot:2.3.4SpringSecuritymybatis-plus:3.4.0jjwt:0.9.1hutool:5.4.5fastjson:1.2.74若想先了解SpringBoot整合SpringSecurity的实现过程可以参考另一篇SpringBoot2.3.4整合SpringSecurity实现权限管理JWT简介什么是JWTJWT是J
2020-10-30 15:58:48
390
1
原创 SpringBoot2.3.4整合SpringSecurity实现权限管理
概述Spring是非常流行的Java应用开发框架,Spring Security是基于Spring框架,提供了一套Web应用安全性的完整解决方案。主要有两个方面,用户认证(Authentication)和用户授权(Authorization),用户认证指的是验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统。用户授权指的是验证某个用户是否有权限执行某个操作。SpringSecurity的主要特点如下:和Spring无缝整合全面的权限控制专门为Web开发而设计重量级框架Sprin
2020-10-28 19:52:00
580
原创 SpringBoot2.3.4整合Shiro实现权限管理
概述Shiro是一个功能强大且灵活的开源Java安全框架,相比于SpringSecurity更加简单,Shiro可以执行身份验证、授权、加密和会话管理等Shiro的主要功能如下图:Authentication:身份认证/登录,验证用户是不是拥有相应的身份;Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能进行什么操作,如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限;SessionManager:会话管理,即
2020-10-23 14:09:27
329
4
原创 SpringBoot整合shiro-spring-boot-web-starter启动报错
最近在做一个SpringBoot整合常用框架的系统,在整合Shiro时启动就报错,先将解决办法总结如下:SpringBoot使用的是最新的2.3.4版本,Shiro使用的是shiro-spring-boot-web-starter1.6.0版本,在配置文件ShiroConfig中添加安全管理器,代码如下:@Beanpublic SecurityManager securityManager(UserRealm userRealm) { DefaultWebSecurityManager sec
2020-10-15 10:10:59
365
原创 SpringBoot2.3.4整合Redisson实现分布式锁
概述在分布式项目中经常需要用到分布式锁,直接使用redis相关命令SET key value [EX seconds] [PX milliseconds] [NX] [XX]或者命令SETNX可以实现分布式锁,使用命令方式实现分布式锁存在一些问题,比如解锁之前发生程序异常,导致无法解锁,或者设置了过期时间,线程A获得的锁因过期被redis删除,而此时A还去执行DEL命令等问题,为了解决这些问题,还需要引入Lua脚本,这样就使程序更加复杂了,redis推出了更加方便实现分布式锁的组件Redisson,详情参
2020-10-12 20:45:53
443
原创 SpringBoot2.3.4整合Redisson和SpringCache实现分布式锁和分布式缓存
概述为了提升访问效率,适应高并发访问,在程序中引入了缓存,常见的缓存有本地缓存和分布式缓存,分布式缓存中常使用Redis中间件实现。在高并发下缓存会存在失效问题,常见的缓存失效有以下三种:缓存穿透查询一个一定不存在的数据,由于缓存是不命中,将去查询数据库,但是数据库也无此记录,我们没有将这次查询的null写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义风险:利用不存在的数据进行攻击,数据库瞬时压力增大,最终导致崩溃解决:null结果缓存,并加入短暂过期时间缓存雪崩
2020-10-12 20:43:54
361
原创 SpringBoot2.3.4整合Ehcache3.8.1
概述Ehcache是一个开源的进程内缓存框架,可以提高系统性能,减轻数据库负载并简化可伸缩性。广泛用于基于Java的缓存开发,拥有健壮,可靠,功能齐全和便于与其他流行的库和框架集成等优点。详见Ehcache官网Ehcache2和Ehcache3之间的差异比较大,本文主要介绍SpringBoot2.3整合Ehcache3.8,Ehcache有编码方式和xml配置方式引入项目,本文使用xml配置方式引入相关依赖Ehcache核心的依赖如下:<dependency> <gr
2020-10-09 23:06:00
336
1
原创 SpringBoot2.3.4整合Elasticsearch7.6.2
概述全文检索是程序员开发过程中常见的需求之一,开源的Elasticsearch是目前全文搜索引擎的首选,常用于快速存储、搜索和分析海量数据,Elasticsearch封装了Lucene,提供REST API操作接口,使用方便,本文介绍SpringBoot2.3.0整合Elasticsearch7.6.2,为了方便测试,持久层使用Mybatis-Plus,测试使用Swagger3.0。若需要了解SpringBoot整合Mybtis-Plus相关内容,请阅读另一篇SpringBoot2.3.0整合MyBati
2020-10-09 21:47:08
730
1
原创 SpringBoot2.3.4整合MyBatis-Plus3.4.0和Swagger3.0
简介MyBatis是常用的持久层框架,深得广大程序员的喜爱,MyBatis-Plus是在MyBatis的基础之上实现的增强版持久层框架,开发更加简洁,效率更高。详见MyBatis-Plus官网本文主要介绍基于SpringBoot2.3.0集成MyBatis-Plus3.4.0,并使用Swagger3.0测试数据库表新建数据库springboot并在其下建立测试表sys_userDROP TABLE IF EXISTS `sys_user`;CREATE TABLE `sys_user` (
2020-10-02 14:26:20
694
7
原创 byte数组转浮点数总结
最近在做一个水厂的检测项目,4G设备向服务器发送socket请求,涉及到了整数和浮点数的传输,需要将字节数组还原成可读的数据,总结如下:读取数据时,每4位数字是一个值,前2位是低字节,后2位是高字节,先读取高字节数,再读取低字节数byte[] data = {-15, 71, 60, 109, 18, 51, 63, 95, 33, 15, 66, 81, 57, -32, 62, -125, -13, 37, 0, 0};//offset:从哪位开始读起private static float r
2020-09-29 09:40:40
282
原创 redis的持久化机制总结
redis提供了两种方式实现持久化,即RDB和AOFRDB在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是说通过创建快照来获得存储在内存里面的数据在某个时间点上的副本。创建副本后,可以对其备份或者恢复,恢复时是将快照文件直接读到内存里备份是如何执行的呢?redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能RDB保存的文件在配置文件re
2020-09-27 19:55:54
193
原创 设计模式之单例模式八种写法
单例模式就是确保一个类只有一个实例,并提供全局访问点;主要被用于一个全局类的对象在多个地方被使用并且对象的状态是全局变化的场景。实现单例模式需要私有构造器、一个静态方法和一个静态变量。常见的单例模式有八种实现方式饿汉式(静态常量)在类中直接定义全局的静态对象的实例并初始化,然后提供一个方法获取该实例对象。在定义单例对象的同时将其实例化,直接可以使用,也就是说在Class Loader完成后该类的实例已经存在于JVM中了。构造器私有化类的内部创建对象提供一个公有的静态方法,返回实例对象publ
2020-09-26 20:38:34
196
原创 redis过期策略与内存淘汰机制总结
Redis过期策略与内存淘汰机制总结redis常用于有时间限制的数据存储,可以在set key的时候给一个expire time(过期时间),通过设置过期时间可以指定这个key可以存活的时间,那么设定的过期时间到了后,redis是怎么对过期的key进行删除的呢?下面分别从redis过期策略和内存淘汰机制说起redis过期策略针对数据库key过期,通常有三种删除策略:定时删除:在设置key的过期时间的同时,创建一个定时器(timer),让定时器在键的过期时间来临时,立即执行对键的删除操作惰性删除:放
2020-09-18 22:58:52
229
原创 几种IO模式总结
BIO(blocking IO) 编程同步阻塞IO(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有链接请求时服务器端酒需要启动一个线程进行处理,如果这个连接不做任何事会造成不必要的线程开销,可以通过线程池机制改善(实现多个客户连接服务器)BIO适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序简单易理解BIO工作原理图BIO编程流程服务器端启动一个ServerSocket客户端启动Socket对服务器进行通讯,默
2020-08-07 17:49:56
447
原创 Chrome如何安装vue-devtools调试工具
vue是现在前端开发很流行的框架,开发vue项目需要先安装好调试工具vue-devtools,正如工欲善其事必先利其器,现将安装过程总结如下下载vue-devtools源码打开github地址,选择master分支下载源码下载的源码如下解压源码,用超级管理员权限打开命令行,进入源码路径执行npm install命令安装依赖将vue-devtools-master/shells/chrome/manifest.json文件中的"persistent": false修改为"persist
2020-07-06 21:32:09
281
原创 Java8常用日期时间类
概述Java8中推出了全新的日期时间类,使用起来更加简单和安全,常用的有以下几个LocalDate:本地日期,只包括日期LocalTime:本地时间,只包括时间LocalDateTime:本地日期时间,包括日期和时间ZonedDateTime:完整的本地日期时间,包括日期,时间,和时区获取当前日期LocalDate localDate = LocalDate.now();System.out.println("当前日期为:" + localDate);//当前日期为:2020-06-19
2020-06-19 17:44:06
322
原创 win10安装node.js和vue并配置环境变量
下载node.js直接从node.js官网下载最新版本node.js建议下载长期支持版,根据自己电脑的版本选择32位或者64位,点击下载即可下载后软件如下安装node.js双击下载的node.js软件,直接点击运行即可直接点击下一步勾选同意,点击下一步node.js默认安装在c盘,建议安装在其他盘,点击下一步直接点击下一步勾选自动安装构件工具选择,点击下一步点击安装即可等待node.js安装完成安装完成后,点击完成即可安装完成后,会自动安装构建工具,因为一些npm模块需要使用C
2020-06-07 15:21:18
682
2
原创 Java常用集合框架总结
集合是Java中最重要的基础知识之一,集合类存放于java.util包中,主要有3大类:list、set、map。Collection是集合List、Set、Queue的最基础的接口,Iterator可以通过迭代器遍历集合中的元素,Map是映射表(map类集合)的基础接口。集合框架List集合是存储有序元素的集合,集合中的元素可以重复,通过元素的下标来访问集合中的元素。Set集合是存储无序元素的集合,集合中的元素是不可以重复的,通过元素本身来访问集合中的元素。Mpa集合以key-value对形式存储
2020-06-02 20:47:26
254
原创 Win10安装VSCode详细步骤
最近在开发基于vue技术的前后端分离项目,前端开发需要安装Visual Studio Code开发工具,具体安装过程记录如下:下载安装软件首先到官网下载需要的安装软件:VSCode官网地址进入官网后进入官网页面如下:直接点击左侧的Download for Windows后会进入下面页面,同时会默认下载User版本点击右上角的Download会进入:根据需要下载不同的版本即可,在这里有User版本和System版本,两者的区别主要是:User版本只适用于当前用户下使用,如果换着其他用户就无法使用V
2020-05-28 10:16:29
1580
1
原创 数据结构与算法之四种查找算法
概述在Java中,常用的查找算法有四种:顺序(线性)查找、二分查找/折半查找、插值查找、裴波那契查找线性查找算法原理按着数组的顺序逐一比对,如果相等就返回下标,不相等又进行下一个元素的比较,直到数组中元素对比完。代码实现private static int seqSearch(int[] arr, int value) { for (int i = 0; i < arr.length; i++) { if (arr[i] == value) {
2020-05-22 15:39:10
340
原创 数据结构与算法之八种排序算法
排序是将一组数据,依据指定的顺序进行排列的过程。常见的排序算法可以分为内部排序和外部排序,内部排序指将需要处理的所有数据都加载到内部存储器(内存)中进行排序;外部排序指由于数据量过大,无法全部加载到内存中,需要借助外部存储(文件等)进行排序。冒泡排序(BubbleSort)原理通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就像水底下的气泡一样逐渐向上冒。图解代码实现public static void bubble
2020-05-21 16:27:28
221
原创 Java8 Stream学习笔记
Java8中新加入了流(Stream),可以以声明性方式处理数据集合,可以简单的理解成一种新型的遍历数据集的高级迭代器。流操作有两个重要的特点:1.流水线------流操作会返回一个流,这样多个操作就可以链接起来,形成一个大的流水线,流水线的操作可以看作对数据源进行数据库式查询。2.内部迭代------与使用迭代器显式迭代的集合不同,流的迭代操作是在内部进行的。流操作可以分成两部分,中间操...
2019-04-19 15:12:00
233
原创 BigDecimal详细用法
引言:一般整数计算时可以使用int类型的数据,数值较大时使用long类型数据,精度要求不高的小数计算时使用float和double类型数据,当精度要求高的计算时需要使用BigDecimal类型数据。1.BigDecimal数据定义BigDecimal a = new BigDecimal(int val);BigDecimal b = new BigDecimal(long val);B...
2019-03-26 15:11:14
252
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人 TA的粉丝