自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

qq_43404873的博客

没有伞的孩子,只能奔跑。

  • 博客(107)
  • 收藏
  • 关注

原创 JUC并发编程(四)----ThreadLocalRandom类原理剖析

Random类及其局限性在JDK 7之前包括现在,java.util.Random都是使用比较广泛的随机数生成工具类,而且java.lang.Math中的随机数生成也使用的是java.util.Random的实例。 下面先看看java. util.Random的使用方法。public class RandomTest { public static void main(String[] args) { //创建一个默认种子的随机数生成器 Random random

2021-01-20 13:45:09 339

原创 JUC并发编程(三)----并发编程基础理论知识

什么是多线程并发编程并发和并行的概念:并发是指同一个时间段内多个任务同时都在执行,并且都没有执行结束。并行是说在单位时间内多个任务同时在执行。并发任务强调在一个时间段内同时执行,而一个时间段由多个单位时间累积而成,所以说并发的多个任务在单位时间内不一定同时在执行。在单CPU的时代多个任务都是并发执行的,这是因为单个CPU同时只能执行一个任务。在单CPU时代多任务是共享一个CPU的,当一个任务占用CPU运行时,其他任务就会被挂起,当占用CPU的任务时间片用完后,会把CPU让给其他任务来使用,在单C

2021-01-19 18:14:16 319

原创 JUC并发编程(二)---- ThreadLocal

ThreadLocal多线程访问同一个共享变量时特别容易出现并发问题,特别是在多个线程需要对一个共享变量进行写入时。为了保证线程安全,一般使用者在访问共享变量时需要进行适当的同步,如下图所示:这时候ThreadLocal就出来了。当创建一个变量后,每个线程对其进行访问的时候访问的是自己线程的变量。也就是如果你创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个本地副本。当多个线程操作这个变量时,实际操作的是自己本地内存里面的变量,从而避免了线程安全问题。创建一个Thr

2021-01-18 16:35:35 273

原创 JUC并发编程(一)---- 线程详解

并发编程线程基础什么是线程与进程进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创建、运行到消亡的过程。所有的应用程序都需要进入到内存中执行。临时存储RAM。线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。简而言之:一个程序运行后至少有一个进程,一个进程

2021-01-17 23:35:11 529 4

原创 Java8新特性---Lambad表达式、Stream流、Optional类

并行流与串行流并行流就是把一个内容分成多个数据块,并用不同的线程分别处理每个数据块的流。相比较串行的流,并行的流可以很大程度上提供程序的执行效率。Java8中将并行进行了优化,我们可以很容易的对数据进行并行操作。StreamAPI可以声明性地通过parallel()与sequential()在并行流与顺序流之间进行切换。Lambad表达式为什么使用Lambda表达式Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁

2021-01-16 14:05:16 275

原创 SpringCloud学习笔记(十一)----分布式事务 Seata

SpringCloud Alibaba Seata处理分布式事务分布式事务问题单体应用被拆分成微服务应用,原来的三个模块被拆分成三个独立的应用,分别使用三个独立的数据源,业务操作需要调用三个服务来完成。此时每个服务内部的数据一致性由本地事务来保证,但是全局的数据一致性问题没法保证。比说:用户购买商品的业务逻辑。整个业务逻辑由3个微服务提供支持:仓储服务:对给定的商品扣除仓储数量。订单服务:根据采购需求创建订单。账户服务:从用户账户中扣除余额。架构图如下:按照正常的逻辑来说,当订单服务收

2021-01-14 12:28:40 652

原创 SpringCloud学习笔记(十)----服务熔断与限流 Sentinel

SpringCloud Alibaba Sentinel实现熔断与限流Sentinel概述随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。Sentinel下载地址安装Sentinel控制台Sentinel组件由俩部分组成:后台和前台8080。核心库(Java客户端)不依赖任何框架/库,能够运行于所有Java运行时环境,同

2021-01-11 00:04:00 2586 6

原创 SpringCloud学习笔记(九)---- 服务注册和配置中心Nacos

SpringCloud Alibaba之所以出现SpringCloud Alibaba,是因为Spring CLoud Netflix项目进入维护模式,也就是不再开发新的组件和功能了。所以某些组件都有代替版了,比如Ribbon由Loadbalancer代替等等。支持的功能:几乎可以将之前的Spring Cloud代替。alibaba具体的组件Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。Nacos:一个更易于构建云原生应用的动态服务发现、配

2021-01-07 22:48:38 628

原创 SpringCloud学习笔记(八)----消息驱动Stream、链路追踪Sleuth

Spring Cloud Stream 消息驱动概述为什么需要SpringCloud Stream现在一个大项目可能分为三部分: 前端—>后端---->大数据。如果后端开发使用消息中间件RabbitMQ,而大数据开发使用Kafka,那么一个项目中就存在多个消息中间件,对于程序员来说,不好进行切换、维护 、开发。SpringCloud Stream这时候就出现了,让我们不再关注具体MQ的细节,我们只需要用一种适配绑定的方式,自动的给我们在各种MQ内切换。SpringCloud Strea

2021-01-07 00:10:01 444

原创 SpringCloud学习笔记(七)----配置中心Config、消息总线Bus

SpringCloud config分布式配置中心概述分布式系统面临的配置问题:微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行,所以一套集中式的、动态的配置管理设施是必不可少的。通俗来说,每个微服务都需要一个配置文件,如果有几个微服务都需要连接数据库,那么就需要配4次数据库相关配置,并且当数据库发生改动,那么需要同时修改4个微服务的配置文件才可以。所以有了SpringCloud Config配置中心来

2021-01-06 01:00:19 310

原创 SpringCloud学习笔记(六)----服务网关Gateway

1

2021-01-04 23:20:48 574 2

原创 Spring系列--WebFlux详解

Spring WebFlux介绍是Spring5添加新的模块,用于web开发的,功能和SpringMVC类似的,Webflux使用当前一种比较流行响应式编程出现的框架。 使用传统web框架,比如SpringMVC,这些基于Servlet容器,Webflux是一种异步非阻塞的框架,异步非阻塞的框架在Servlet3.1以后才支持,核心是基于Reactor的相关API实现的。什么是异步非阻塞异步和同步、非阻塞和阻塞 两者都是针对对象不一样。异步和同步针对调用者,调用者发送请求,如果等着对

2021-01-04 00:07:48 3182 1

原创 SpringCloud学习笔记(五)----服务降级Hystrix

Hystrix断路器概述分布式面临的问题复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败。服务雪崩多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务,这就是所谓的"扇出"。如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所谓的"雪崩效应"。对于高流量的应用来说,单一的后端依赖可能会导致所有服务器上的所有资源都在几秒钟内饱和。比失败更糟糕的

2020-12-30 22:00:21 182

原创 SpringCloud学习笔记(四)----服务调用Ribbon、OpenFeign

Ribbon负载均衡服务调用Ribbon概述1.是什么SpringCloudRibbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。可以很容易使用Ri

2020-12-28 19:12:01 327 4

原创 SpringCloud学习笔记(三)----服务注册Zookeeper和Consul

SpringCloud 整合Zookeeper代替Eureka注册中心Zookeeperzookeeper是一个分布式协调工具,可以实现注册中心功能。关闭Linux服务器防火墙后启动zookeeper服务器。zookeeper服务器取代Eureka服务器,zk作为服务注册中心。这里我使用的是SecureCRT连接的zookeeper服务器。 关于在虚拟机上安装zookeeper,可看下面这篇文章。Linux上安装zookeeper服务提供者1.新建cloud-provider-payme

2020-12-28 13:52:25 258 1

原创 Zookeeper学习笔记(四)-- zookeeper开源客户端curator

zookeeper 开源客户端curator介绍curator简介curator是Netflix公司开源的一个zookeeper客户端,后捐献给apache,curator框架在zookeeper原生API接口上进行了包装,解决了很多zooKeeper客户端非常底层的细节开发。提供zooKeeper各种应用场景(比如:分布式锁服务、集群领导选举、共享计数器、缓存机制、分布式队列等)的抽象封装,实现了Fluent风格的API接口,是最好用,最流行的zookeeper的客户端。原生zookeeperAPI

2020-12-26 23:34:16 246

原创 Zookeeper学习笔记(三)-- zookeeper集群及集群中的知识点

zookeeper集群搭建单机环境下,jdk、zookeeper安装完毕,基于一台虚拟机,进行zookeeper伪集群搭建,zookeeper集群中包含3个节点,节点对外提供服务端口号分别为2181、2182、2183。1.基于zookeeper-3.4.10复制三份zookeeper安装好的服务器文件,目录名称分别为zookeeper2181、zookeeper2182、zookeeper2183cp -r zookeeper-3.4.10 zookeeper2181cp -r zookeeper

2020-12-26 17:32:58 632

原创 Zookeeper学习笔记(二)--通过Java操作Zookeeper

Zookeeper JavaAPIznode是zooKeeper集合的核心组件,zookeeper API提供了一小组方法使用zookeeper集合来操纵znode的所有细节。客户端应该遵循以下步骤,与zookeeper服务器进行清晰和干净的交互连接到zookeeper服务器,zookeeper服务器为客户端分配会话ID。定期向服务器发送心跳。否则,zookeeper服务器将过期会话ID,客户端需要重新连接。只要会话ID处于活动状态,就可以获取/设置znode所有任务完成后,断开与zookee

2020-12-24 15:18:13 1594

原创 Zookeeper学习笔记(一)--在Linux上使用Zookeeper

基本概念ZooKeeper是一个集中的服务,用于维护配置信息、命名、提供分布式同步和提供组服务。所有这些类型的服务都以某种形式被分布式应用程序使用。每次它们被实现时,都会有大量的工作来修复不可避免的错误和竞争条件。由于实现这些服务的困难,应用程序最初通常会略过这些服务,这使得它们在出现更改时变得脆弱,并且难以管理。即使正确地执行了这些服务,在部署应用程序时,这些服务的不同实现也会导致管理复杂性应用场景zookeepepr是一个经典的分布式数据一致性解决方案,致力于为分布式应用提供一个高性能、高可用,且

2020-12-23 21:23:27 1649

原创 SpringCloud学习笔记(二)----服务注册Eureka

EurekaEureka基础知识1.什么是EurekaEureka是Netflix公司开发,可以实现服务调用、负载均衡、容错等。实现服务发现与注册。2.什么是服务注册与发现Eureka采用了CS的设计架构,Eureka Server作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用Eureka的客户端连接到Eureka Server并维持心跳连接。这样我们就可以通过Eureka Server来监控系统中各个微服务是否正常运行。 Eureka系统架构图如下:3.Eureka

2020-12-22 22:09:49 321

原创 SpringBoot上传多张图片至七牛云

2020-12-21 19:05:19 947

原创 SpringCloud学习笔记(一)----搭建一个简单的微服务

最近在看尚硅谷的周阳老师的SpringCloud,正好写写博客,方便我以后进行复习。什么是微服务微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值,每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相协作(通常是基于HTTP协议的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外,应当尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适

2020-12-21 18:37:43 315

原创 SpringBoot中集成RabbitMq及使用场景

在前面的博客中我们已经详细的介绍了RabbitMQ的5种模型,接下来让我们来看看在SpringBoot中如何使用RabbitMQ。RabbitMQ5种模型回顾1.点对点模型:生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。生产者和消费者是一一对应关系。如下图所示:2.工作队列模型: 让多个消费者绑定到同一个队列中,共同消费队列中的消息。并且队列中的消息一旦消费,就会消息,因此任务不会被重复执行。如下图所示:3. 广播模型: 可以将一个消息发送给多个消费者。如下图所示:4.路由模

2020-12-20 17:09:59 1262

原创 RabbitMQ系列--主题(Topic)

上一篇博客中,我们使用了direct类型的交换机,使得消费者有能力进行选择性的消息。但是仍然存在一些局限性:它不能够基于多重条件进行路由选择。 我们可以使用Topic类型的交换机解决这个问题。Topic类型的Exchange与Direct相比,都是可以根据RoutingKey把消息路由到不同的队列。只不过Topic类型Exchange可以让队列在绑定Routing key的时候可以使用通配符!这种模型的Routingkey一般都是由一共或多个单词组成,多个单词之间以"."分割,例如:item.insert

2020-12-19 18:40:41 1110 1

原创 RabbitMQ系列-- 路由

在上一篇博客中,我们详细的介绍了广播模型,在Fanout模式中,一条消息会被所有订阅的队列都消费。但是,在某些场景下,我们希望不同的消息被不同的队列消费。这时就要用到Direct类型的Exchange(交换机)。在Direct模型下队列与交换机的绑定,不能是任意绑定了,而是要指定一个RoutingKey(路由key)消息的发送方在向Exchange发送消息时,也必须指定消息的RoutingKeyExchange不再把消息交给每一个绑定的队列,而是根据消息的Routing Key进行判断,只有队列的

2020-12-19 17:52:44 1022 1

原创 Jquery上传多张图片和删除图片

最近需要使用到多张图片上传功能,正好写篇博客记录一下;废话不多说,直接看效果。html代码<!DOCTYPE html><html lang="en"><link><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>标签</title><link rel

2020-12-19 15:40:52 2397 11

原创 RabbitMQ系列-- 广播

在上一篇博客中,我们实现了工作队列,并且我们的工作队列中的一个任务只会发给一个工作者,除非某个工作者未完成任务意外被杀死,会转发给另外的工作者。 在这篇博客中,我们将实现将一个消息发给多个消费者,这种模式称之为广播。本质上来说,就是发布的消息会转发给所有的接收者。交换机(Exchanges)前面的博客中我们都是通过生产者发送消息给队列,接收者从队列中接收消息。 接下来我们将引入Exchanges。生产者只能将消息发送给Exchanges。 Exchanges一边从生产者接收消息,另一边将消息推送到队

2020-12-19 13:13:59 2745 2

原创 RabbitMQ系列-- 工作队列模型

介绍Work queues,也被称为(Task queues)任务模型。当消息处理比较耗时的时候,可以生产消息的速度会远远大于消息的消费速度。长此以往,消息就会堆积越来越多,无法及时处理。此时就可以使用work模型:**让多个消费者绑定到一个队列,共同消费队列中的消息。**队列中的消息一旦消费,就会消失,因此任务是不会被重复执行的。 如下图所示:角色:P: 生产者:任务的发布者。C1:消费者-1,领取任务并且完成任务,假设完成速度较慢C2:消费者-2,领取任务并完成任务,假设完成速度快。工

2020-12-18 20:24:54 194 1

原创 RabbitMQ系列-- HelloWorld模型

1.介绍RabbitMQ,翻译为消息队列,通过典型的生产者和消费者模型,生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。AMQP协议更多用在企业系统内对数据一致性、稳定性和可靠性很高的场景。2.点对点模型在上图的模型中P:生产者,也就是要发送消息的程序C:消费者:消息的接受者,会一直等待消息到来。queue:

2020-12-18 17:55:56 223 1

原创 Linux下安装RabbitMQ详解--亲测可用

第一种方案条件 CentOS-8-x86_64-1905-dvd1RabbitMQ官方下载地址 https://www.rabbitmq.com/download.htmlRabbitMQ由Erlang语言编写而写,所以在下载的时候需要将erlang的包也下载下来。注意:这里的安装包是centos安装的包(.rpm后缀)。 安装包我已经下载好了,地址如下:链接:https://pan.baidu.com/s/1OhFIBEkGBCcyr7ciglPw_g提取码:1vrx1.这里我使用

2020-12-17 20:20:34 384

原创 SpringDataJPA---多表关系

多表设计1.1 表之间关系的划分数据库中多表之间存在着三种关系,如图所示。从图可以看出,系统设计的三种实体关系分别为:多对多、一对多和一对一关系。注意:一对多关系可以看为两种: 即一对多,多对一。所以说四种更精确。一对多:一的一方:主表多的一方:从表外键:需要在从表上新建一列作为外键,它的取值来源于主表的主键多对多:中间表: 中间表最少应该由两个字段组成,这两个字段作为外键指向两张表的主键,同时这两个字段又组成了联合主键。实体类中的关系包含关系:可以通过实体类中的包含关

2020-12-07 18:03:37 346

原创 SpringDataJPA--查询方式

Spring Data JPA的查询方式4.1 使用Spring Data JPA中接口定义的方法进行查询在继承JpaRepository,和JpaRepository接口后,我们就可以使用接口中定义的方法进行查询继承JpaRepository后的方法列表继承JpaSpecificationExecutor的方法列表测试count()方法和exists()方法/** * 测试统计查询: 查询客户的总数量 * count():通过主键id进行统计客户总数量 *

2020-12-07 15:18:14 682

原创 SpringDataJPA--快速入门

Spring Data JPA 与 JPA和hibernate之间的关系JPA是一套规范,内部是有接口和抽象类组成的。hibernate是一套成熟的ORM框架,而且Hibernate实现了JPA规范,所以也可以称hibernate为JPA的一种实现方式,我们使用JPA的API编程,意味着站在更高的角度上看待问题(面向接口编程)Spring Data JPA是Spring提供的一套对JPA操作更加高级的封装,是在JPA规范下的专门用来进行数据持久化的解决方案。Spring Data JPA的快速入门

2020-12-07 15:04:18 136

原创 SpringDataJPA--JPA复杂查询

JPA中的复杂查询JPQL全称Java Persistence Query Language基于首次在EJB2.0中引入的EJB查询语言(EJB QL),Java持久化查询语言(JPQL)是一种可移植的查询语言,旨在以面向对象表达式语言的表达式,将SQL语法和简单查询语义绑定在一起·使用这种语言编写的查询是可移植的,可以被编译成所有主流数据库服务器上的SQL。其特征与原生SQL语句类似,并且完全面向对象,通过类名和属性访问,而不是表名和表的属性。jpql和sql语句的区别sql:查询的是表和表中

2020-12-07 14:48:59 309

原创 SpringDataJPA入门实例---JPA增删改查

1.1需求介绍我们是实现的功能是保存一个客户到数据库的客户表中。maven工程导入坐标 <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.hibernate.version>5.2.12.Final</project.hibernate.version> </prope

2020-12-07 14:47:34 286

原创 java.lang.ClassNotFoundException: javax.xml.bind.JAXBException解决方案--亲测

今天在JDK9版本下使用Spring Data JPA的时候报如下错误解决方案一将JDK9版本降低到JDK8或JDK7版本解决方案二在src/lib 目录下导入这些jar包javax.activation-1.2.0.jarjaxb-api-2.3.0.jarjaxb-core-2.3.0.jarjaxb-impl-2.3.0.jar解决方案三在maven.pom 文件下导入如下依赖 <dependency> <groupId>ja

2020-11-24 17:54:28 478 2

原创 java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException解决办法--亲测

今天使用Jpa的时候出现了java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException错误。我使用的是JDK9版本,解决办法有两个1.将JDK9版本换成JDK7或JDK8就可以。如果不想换JDK版本,可以在pom.xml中加入以下坐标 <dependency> <groupId>javax.xml.bind</groupId> <artifactI

2020-11-23 18:52:31 6659 1

原创 IDEA快速搭建SpringBoot项目--遇到的坑

工具介绍Maven版本3.5.2JDK 9.0.4搭建Springboot环境首先选择的是官网默认的镜像选了个web等项目依赖导入完毕之后,编写个控制类测试项目是否能运行:发现Test模块报错并且pom.xml中2.3.5.RELEASE版本报红,发现版本不对于是试了一下阿里云镜像重新创建SpringBoot项目选择SpringBoot版本为2.3.4RELEASE编写一个控制类测试下项目是否搭建成功@Controller@ResponseBodypublic

2020-11-23 09:05:38 710 2

原创 SSM框架(Spring、SpringMVC、MyBatis)整合

SSM框架整合思路:通过Spring实例化Bean,然后调用实例对象中的查询方法来执行MyBatis映射文件中的SQL,如果能够正确查询出数据库中的数据,就可以认为Spring与MyBatis框架整合成功。如果可以通过前台页面来执行查询方法,并且查询出的数据能够在页面中正确显示,那么可以认为SSM三大框架整合成功。maven项目目录结构如下:环境搭建创建Maven项目在pom.xml文件中导入整合所需的坐标 <!-- 统一管理jar包版本 --> <propertie

2020-11-21 21:21:46 331

原创 SpringMVC系列--异常处理和拦截器

SpringMVC中的异常处理系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。系统的dao、service、controller出现都通过throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理,如下图所示:实现步骤编写异常类和错误页面CustomException .javapackage com.ssm.po;public

2020-11-21 19:01:16 598

空空如也

空空如也

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

TA关注的人

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