自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 收藏
  • 关注

原创 线程同步(Lock、Condition、synchronized、AtomicInteger、volatile、ThreadLocal)

线程不安全的问题public class Demo implements Runnable { private long count = 0; @Override public void run() { for(int i=0;i<100000;i++) { count++; } } public static void main(String[] args) { Demo demo = new Demo(); Thread t1 = new Threa

2022-04-15 19:24:46 755

原创 Springboot配置文件相关语法及读取方式

配置文件的形式目前,springboot的配置文件有2种形式。1、.properties文件,一般习惯称其为properties文件,e.g.application.properties;2、.yml/.yaml文件(2个后缀都是一样的文件,一般常用.yml),一般习惯称其为yaml文件,e.g.application.yml/application.yaml;语法它只有2种核心语法,一种是key-value,一种是数组。以下以yaml文件为例。1、key-value形式它支持字

2022-04-06 22:06:04 1470

原创 线程池ThreadPoolExecutor应用

一个老生常谈的问题:线程的创建及销毁是非常消耗时间及资源的。ThreadPoolExecutorThreadPoolExecutor提供了很多构造方法,这里主要说以下这个,其他构造方法都是基于此方法:public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime,

2022-03-21 22:51:22 1006

原创 如何创建线程及线程特性与常用API

继承Thread类public class ExtendsThreadTest extends Thread { @Override public void run() { System.out.println("我是新开的线程:" + Thread.currentThread().getName()); // TODO 执行其他业务 } public static void main(String[] args) { ExtendsThreadTest test = n

2022-03-18 19:39:01 613 1

原创 Sentinel

Sentinel能在项目中干什么Sentinel官方文档链接:https://gitee.com/rmlb/Sentinel/wikis/%E4%B8%BB%E9%A1%B5?sort_id=3419413当前博客内容根据SpringCloud环境编写,非SpringCloud环境使用Sentinel参考官方文档。1、简介Sentinel是阿里开源的项目,提供了流量控制、熔断降级、系统负载保护等多个维度来保障服务之间的稳定性。2、特征a、应用场景丰富;b、完备的实时监控:Sent

2021-07-22 16:30:29 724

原创 SpringCloud Gateway

SpringCloud Gateway中文官方文档:https://cloud.tencent.com/developer/article/1403887SpringCloud Gateway官方文档:https://spring.io/projects/spring-cloud-gateway#overview为什么要有网关什么是网关?API网关是一个服务器,是系统对外的唯一入口。API网关封装了系统内部架构,为每个客户端提供一个定制的API。API网关方式的核心要点是:所有的客户端和消费

2021-07-17 17:29:00 840

原创 Spring Cloud Hystrix(服务保护)

服务容错在整个微服务架构中,每个服务之间都可能会进行相互调用,某些服务如果在被调用的过程中出现故障(就算为某些重要服务部署集群,同样不可能保证100%高可用),可能就会出现连锁效应,导致整个调用链路不可用,进而让这个微服务架构的系统变得不可用。这种情况称为服务雪崩效应。比如:某个业务需要服务A、服务B、服务C配合完成,整个调用链路是服务A-->服务B-->服务C,如果此时服务B或者服务C任何一个变得不可用,就会导致整个链路变得不可用,进而导致整个微服务架构的系统变得不可用。为了使系统变得更加

2021-07-13 22:02:50 205 1

原创 SpringBoot整合Knife4j(Swagger)

Knife4j是一款基于Swagger的增强工具(所以,该集成方式同样适用于swagger),拥有更强的功能以及更符合大众审美观的UI。Knife4j官网:https://doc.xiaominfo.com/knife4j/ (学习以及获取更多的功能用法、资讯一定要习惯去官网获取)友情提示借用官网一个友情提示1、目前已经发行的Knife4j版本,Knife4j本身已经引入了springfox,开发者在使用时不用再单独引入Springfox的具体版本,否额会导致版本冲突。另外在网关层聚合(例.

2021-05-30 21:49:50 2112 1

原创 RestTemplate使用说明

RestTemplate是Spring提供的用于访问http接口的客户端工具,它提供了多种便捷访问http服务的方法。在任意SpringBoot项目中,都有默认集成,不用引入任何多余的jar包。相比较传统的HttpClient、Okhttp以及java原生的URLConnection,有着极高的封装度,能够大大的提高对第三方http接口访问的编写效率。配置RestTemplateRestTemplate工具提供两种装配方式。一种是RestTemplate类,一种是RestTemplateBuilde

2021-05-27 23:14:55 1879 4

原创 Spring Cloud Feign

在Spring Cloud体系中,Feign的作用就是可以与Eureka和Riibon组合在一起简化各服务之间的http调用,它存在的意义就是简化jttp调用,让开发者可以像调用方法一样访问http接口,在非Sping Cloud体系项目中,遇到需要调用第三方接口的需求,也可以使用它去简化一些http的调用。Feign是一个声明式的Rest客户端,它能让http调用更加简单。Feign提供了http请求的模板,通过编写简单的接口和插入注解,就可以定义好http请求的参数、格式、地址等信息,这样,就可以像

2021-05-25 22:21:39 598

原创 Spring Cloud Ribbon

客户端负载均衡Ribbon在整个微服务架构中,为了保证各个服务的高可用,一定少不了负载均衡。目前主流的负载均衡实现就两种:一种是服务端实现负载均衡,有硬件的(比如F5),也有软件的(比如Nginx)。另一种就是客户端根据自己的请求情况实现负载均衡。常见的,一个服务A,部署到3台机器,A1,A2和A3,配合Nginx形成一个简单的集群,当客户端请求过来之后,随机访问A1、A2、A3,这就是服务端负载均衡;同样的,将A服务部署到3台机器,A1、A2、A3,当客户端自己记录自己的请求情况,依次访问A1、A2、

2021-05-22 00:18:29 146

原创 Spring Cloud Eureka

注册中心在微服务中是必不可少的一部分,主要用来实现服务治理功能。本示例基于:Spring Cloud NetflixSpring Cloud发展至今,已经形成了Spring Cloud Netflix和Spring Cloud Alibaba两大阵营以及其他小众开源阵营。犹记得前几年刚接触Spring Cloud,被这个版本各种折磨。创建eureka项目1、创建一个maven项目后引入如下依赖:<parent> <groupId>org.springfram

2021-05-18 23:10:40 197 3

原创 SpringBoot中管理多环境配置文件

在项目开发中,一般会分为开发环境、测试环境和生产环境。如果总是在一个文件中修修改改,难免会出现错误,尤其是在交接的过程中,一旦出现问题,轻则丢失绩效、重则删库跑路。实现1、可以通过配置项 spring.profiles.active 的值来激活对应的环境(思路:使用一个默认的文件作为通用配置文件,不同的配置项写入不同环境的配置文件中,部署不同环境时,只需要修改spring.profiles.active的值即可。个人习惯在通用配置文件只保留spring.profiles.active一个配置项,灵活

2021-05-10 23:03:51 347 4

原创 利用SpringAOP实现单实例系统防重复提交

如果没有防重复提交,当用户在做一个新增操作时,多次点击新增按钮,那么会在数据库生成多条一模一样的数据。前端处理的方式就是,当用户点击新增后,禁用按钮,直到服务端响应成功。有句话说得好,作为一个服务端开发人员,不能相信客户端的任何输入。所以,一个健壮的系统,不仅要有前端校验,服务端校验更是必不可少。实现思路1、当客户端发起第一次请求,记录下该次请求。2、当客户端发起第二次请求的时候,校验上次请求是否在指定的限制重复请求时间内。如果在,抛出指定的异常;如果不在,则放行请求。引入j...

2021-04-28 22:34:27 507 2

原创 在SpringBoot中使用ElasticSearch(7.x版本)

前言ES7.X版本较之前改动比较大,相应的springboot对它的支持改动也特别明显。在spring-date-elasticsearch官网:https://docs.spring.io/spring-data/elasticsearch/docs/4.0.1.RELEASE/reference/html/#new-features,可以查看到版本匹配信息,如下:(一定要学会去官网查看文档)如果版本不匹配,比如我本地安装elasticsearch7.x版本,springboot是2.

2020-12-30 17:26:28 6017 2

原创 elasticsearch的简单使用

基础名词概念理解基础概念有助于更好的理解elasticsearch集群和节点:一个es集群由一个或多个节点组成,每个集群都有一个唯一的标识和唯一的名称(名称默认是elasticsearch,所有的节点都是通过集群名称来加入某个集群),即每个节点都必须有相同的集群名称和标识。索引:含有相同属性的文档集合,类似于mysql的一个数据库(database,一个mysql连接可以创建N个数据库),故此,一个es可以建立任意多个索引,比如:一个政府门户网站,可以建立起政策索引、法律法规索引等。在es中,所

2020-12-24 22:08:07 579

原创 windows下,elasticsearch的安装

单实例下载安装1.下载地址:https://www.elastic.co/cn/downloads/elasticsearch2.下载后解压,如下:bin文件夹:es的操作命令包,包括启动命令;config文件夹:配置文件目录;data文件夹:es的数据存储目录,可以直接拷贝到其他地方或从其他地方直接拷贝使用;jdk文件夹:es运行依赖的java环境,在低版本中没有此文件夹,则需要单独安装java环境(如果有jdk目录且安装了java环境,默认以安装的java环境运行);.

2020-12-07 20:49:56 509 1

原创 在SpringBoot中使用RabbitMQ

开始之前RabbitMQ涉及的重要的概念Channel 信道。消息的读写操作在信道中进行,客户端可以建立多个信道,每个信道代表一个会话。 Message 消息。应用程序和MQ服务之间传送的数据,消息可以非常简单,也可以很复杂。有Properties和body组成。Properties为外包装,可以对消息进行修饰,比如消息的优先级、延迟等高级特性;body就是消息体内容。 Exchange 交换器,一个MQ服务器可以有一个或多个交换器。应用程序通过交换器,按照一定路由规则将消

2020-07-28 10:31:44 502

原创 windows下RabbitMQ安装及配置

下载安装ErlangrabbitMQ运行需要依赖erlang环境下载地址:http://www.erlang.org/downloads下载后的安装包,如下。直接执行安装到任意指定目录即可下载安装RabbitMQ需要注意下载的版本是否与安装erlang版本支持,可在rabbitMQ的更新说明中查看。如下下载地址:https://www.rabbitmq.com/download.html下载后的安装包,如下。直接执行安装到任意指定路径即可。安装好后如下

2020-07-22 16:03:02 203

原创 SpringBoot集成uid-generator

uid-generatoruid-generator是百度开源的,基于雪花算法的一款唯一主键生成器(数据库表的主键要求全局唯一是相当重要的)。要求java8及以上版本。官方介绍传送门:https://github.com/baidu/uid-generator/blob/master/README.zh_cn.md引入uid-generator方式一:下载源码,本地引入下载链接:https://github.com/baidu/uid-generator/blob/master/READ

2020-07-06 21:52:32 3256 3

原创 Springboot:返回客户端的json统一时间格式化及统一处理Null值

统一时间格式化在开发过程,难免会遇到要求将时间统一格式化固定格式。接触过政企客户的同学,肯定有遇到要求格式为:xxxx年xx月xx日 00:00:00这种。如果依依改动,会消耗大量工作。springboot默认使用的json转换器是Jackson。(以下方式不支持fastjson或其他转换器)方式一:在每个返回的视图对象中使用注解。(缺点:太繁琐,每个地方都需要使用。但是它的优先级最高,所以在有特殊要求的地方可以适当使用,否则应该全局统一处理)@JsonFormat(pattern = "

2020-06-24 15:07:05 2440

原创 SpringBoot配置redis

创建SpringBoot项目:https://blog.csdn.net/weixin_41381863/article/details/106504682引入相关依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <!-- 这

2020-06-08 21:59:26 796

原创 SpringBoot配置数据连接信息(Druid+mybatis/mybatis plus)

创建SpringBoot项目:https://blog.csdn.net/weixin_41381863/article/details/106504682配置Druidduird详细介绍信息:https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98springboot集成druid:https://github.com/alibaba/druid/tree/master/druid-spring-boo

2020-06-03 23:03:09 626

原创 SpringBoot(SpringMVC)文件上传下载

话说,springboot不是一个全新的框架,它只是将其它框架整合在一起,提供一个"开箱即用"的环境。此文,利用的正是SpringMVC的功能。创建springboot项目:https://blog.csdn.net/weixin_41381863/article/details/106504682文件上传在开发中,文件上传常用的有两种方式。一、利用base64上传文件思路:客户端将要上传的文件转为base64的二进制数据,服务端利用字符串的形式接收参数,然后将base64转为相应的文件

2020-06-03 00:11:22 98200 1

原创 创建第一个SpringBoot应用

第一步:创建一个maven项目,如下。第二步:继承SpringBoot工程。引入核心依赖。<!-- 指定一些默认属性 --> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEn

2020-06-02 22:18:33 2018

原创 Mybatis Plus

详细学习请移步mybatis plus官网:https://mp.baomidou.com/guide/ 无论是新创建的项目还是旧项目从mybatis升级为mybatis plus,因为mybatis plus只做增强,不会对现有项目做任何入侵、耦合。即引入或升级mybatis plus之后,可以按照mybatis运行,可以完全不使用mybatis plus任何功能。 同样的,这个无侵入性还表现在。Mybatis能用的插件,Mybatis Plus也不会对其做任何更改, 比...

2020-05-28 14:33:39 315

原创 必须要说的java对象排序(实现Comparable接口)

java针对数组提供了一个Arrays.sort(Object[] a)的排序方法,针对List接口提供了Collections.sort(List<T> list)的排序方法。TreeSet<E>类本身也是支持自然排序。但是以上方法或类,针对基本数据类型或String还挺凑效,一旦针对自定义的类(引用数据类型),就会报错,那是因为少了下面这一步。Except...

2019-07-29 21:44:00 542

原创 Servlet3.0 注解特性

虽然很久没有单独的使用Servlet技术了,但是本着温故而知新的态度,整理记录一下笔记。注:tomcat7以上才支持Servlet3.0注解支持Servlet、Filter、Listener无需在web.xml中进行配置@WebServlet注解作用:声明Servlet组件(无需配置web.xml)。主要属性:属性 类型 描述 name String...

2019-07-14 15:48:56 142

原创 java web中的拦截器、过滤器和监听器

目录介绍一下过滤器实现拦截器实现Servlet监听器实现介绍一下1、过滤器和拦截器(只针对Servlet的Filter接口和SpringMVC的HandlerInterceptor接口,不针对其它实现方式,手撸服务器的大神再见)过滤器和拦截器都是将客户端的请求进行拦截处理,然后将请求转交给下一资源。其处理方式如下图所示。拦截器和过滤都能实现相同的功能,那么...

2019-07-13 20:06:23 285

原创 Redis使用笔记

redis安装参考:https://blog.csdn.net/weixin_41381863/article/details/88231397数据结构及常用生产场景1、String(字符串)--一个键最大能存储512MB字符串是最常用的数据类型,能够存储任何类型的字符串(即任意key-value),当然也包括二进制、json化的对象、甚至是Base64编码之后的图片。在Redis中一...

2019-07-04 15:21:54 173

原创 Mybatis调用存储过程

开始之前1、搭建好mybatis环境并建立如下的表和对应的实体类------------------------------------------------------------------------------------------------------public class TUserPO { private Integer userId; priva...

2019-07-02 10:15:19 182

原创 拒绝长篇大论,快速使用JWT(json web token)

拒绝搬砖,拒绝长篇大论什么是JWTJWT全称json web token。是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。它其实就是平常用的token认证机制,只不过它有它自己的一套规范。根据JWT规范生成的token字符串由三部分组成:头部、载荷、签名。示例(中间由.隔开):相较于普通的token生成方式,JWT生成的token由上面...

2019-06-27 12:00:11 575

原创 Spring Boot实践 | 利用Spring Security快速搞定权限控制

目录开始之前快速开始使用内存签名服务使用数据库签名服务使用自定义签名服务限制请求强制使用HTTPS防止跨站点伪造请求用户认证功能在java web工程中,一般使用Servlet过滤器(Filter)对于请求进行拦截,然后在Filter中通过自己的验证逻辑来决定是否放行请求。基于这一原理,常用的SpringMVC实现了自己的拦截器,同样的,Spring Sec...

2019-06-12 14:08:58 764

原创 PowerDesigner16.5安装及基础使用

一、下载下载地址:https://pan.baidu.com/s/1ah2lxZkv-UwfFJgysJys-w 提取码: byy4失效请留言,立即补上。二、安装1、下载安装文件解压后遵循先安装、后破解(破解之前不要启动)、再汉化(当然是不建议汉化的)2、执行安装程序3、破解将破解文件复制替换到安装的根目录下启动...

2019-06-06 16:27:49 21034 13

原创 JSR303参数校验使用手记

参数校验的必要性千篇一律,就不在多言了。快速开始1、引入jar包springboot项目中引入jar包(有了springboot就是好,jsr303直接成了一个starter,不用再去担心版本,jar包不对什么的了)。<dependency> <groupId>org.springframework.boot</groupId> <a...

2019-05-31 15:31:38 614

原创 记一次由jar包冲突引起的异常--Java.Lang.NoSuchMethodError

问题描述需求需要将svg文件转为pdf文件,引用了batik jar包。异常在运行的时候就出现以下异常信息:java.lang.NoSuchMethodError: ....commons-logging....SimpleLog.setLevel(int)....大致就是:没有SimpelLog类中setLevel(int)方法(明明有commons-logging的j...

2019-05-09 17:14:17 2218

原创 spring项目中利用junit单元测试及多线程测试笔记

单元测试的好处不用多说,就光光是能减少bug,减少调试时间,就值得我们认真去对待。快速开始偷个懒,文章基于springboot配置单元测试引入jar包<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot...

2019-05-06 23:06:16 5817

原创 重试框架spring retry使用笔记

在项目开发中,经常会遇到需要重试的地方。除了自己写循环(不是那么优雅,也不方便维护,关键是可能还不那么可靠)重试之外,还可以使用spring retry。spring retry主要实现了重试和熔断。不适合重试的场景:参数校验不合法、写操作等(要考虑写是否幂等)都不适合重试。适合重试的场景:远程调用超时、网络突然中断等可以重试。在spring retry中可以指定需要重试的...

2019-05-06 00:16:42 962

原创 java注解

java中的Annotation功能可用于类、构造方法、普通方法、成员变量(全局变量)、参数等声明中。该功能不影响程序的正常运行。定义Annotation基本语法:定义Annotation的关键字是@interface。@Target(ElementType.METHOD)//表示该注解只能用于方法//................还可以有其它设置public @inter...

2019-04-30 17:05:19 126

原创 索引

索引是一个单独的、存储在磁盘上的数据结构,它们包含着对数据表里所有记录的引用指针。索引是在存储引擎中实现的。每种村粗引擎的索引都不一定完全相同,并且每种存储引擎也不一定支持所有索引类型。所有存储引擎支持每个表至少16个索引,总索引长度至少为256字节。MySQL中的索引存储类型由两种:BTREE和HASH,具体和表的存储引擎有关。MyISAM和InnoDB存储引擎只支持BTRE...

2019-04-23 23:37:18 292

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除