自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 问答 (1)
  • 收藏
  • 关注

原创 Session共享问题分析

Session为什么要共享Session共享也可以称为Session保持或者叫做Session一致性,Session存储在服务器的内存中,比如Java中,Session存放在JVM的中,Session也可以持久化到file,MySQL,redis等,SessionID存放在Cookie中。比如一个系统登录后,假如用户的请求通过Nginx被转发到tomcat1上,这时一些当前用户的信息放入session中,比如登录信息让用户一直处于登录状态。那么Nginx负载均衡后,可能用户刷新页面后重新跳转到了to

2020-07-26 22:34:45 184

原创 cron表达式详解

cron表达式由七个位置组成,空格分隔按顺序依次为Seconds(秒) 0~59Minutes(分) 0~59Hours(小时) 0~23Day of Month(天)1~31,注意有的月份不足31天Month(月) 0~11,或者 JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DECDay of Week(周) 1~7,1=SUN或者 SUN,MON,TUE,WEB,THU,FRI,SATYear(年)1970~2099 可选..

2020-07-26 21:53:47 421

原创 分布式任务调度框架Elastic-Job简介及使用

1. Elastic-Job介绍Elastic-Job是当当网开源的一个分布式调度解决方案,基于Quartz二次开发的,由两个相互独立的子项 目Elastic-Job-Lite和Elastic-Job-Cloud组成。本文主要介绍 Elastic-Job-Lite,它定位为轻量级无中心 化解决方案,使用Jar包的形式提供分布式任务的协调服务,而Elastic-Job-Cloud子项目需要结合Mesos 以及Docker在云环境下使用。Elastic-Job的github地址:Elastic-Job

2020-07-26 21:24:31 1112

原创 Linux安装zookeeper-3.6.1

安装jdk,如果已经安装过,跳过此步骤安装步骤参考:https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.6.1/apache-zookeeper-3.6.1-bin.tar.gz下载zookeeper安装包下载地址:https://mirrors.bfsu.edu.cn/apache/zookeeper/zookeeper-3.6.1/apache-zookeeper-3.6.1.tar.gz解压..

2020-07-26 20:22:55 422

原创 Linux安装Jdk-11

首先去官网下载jdk,选择自己要使用的版本https://www.oracle.com/java/technologies/javase-jdk11-downloads.html检查当前系统是否已经安装openJDK,如果已经安装进行卸载检查openJDK是否安装命令:rpm -qa|grep jdk卸载命令:yum -y remove xxxx进入目录 : cd /usr/local创建java安装目录:mkdir /usr/local/java..

2020-07-26 18:14:48 201

原创 任务调度框架Quartz简单使用

引入jar包<!--任务调度框架quartz--><!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz --><dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2&

2020-07-26 17:41:57 94

原创 Linux安装及配置redis-5.0.5

1.下载安装文件​官网下载地址:https://redis.io/download解压并安装解压: tar -zxvf redis-5.0.5.tar.gz下面是移动并修改安装目录的过程,根据个人习惯自定义安装目录编译安装,过程如下:首先到redis目录编译文件cd /usr/local/redismake然后 到src目录下安装cd srcmake install修改配置文件并启动启动cd /usr/local/redis/.

2020-07-25 21:54:06 180

原创 分布式ID生成策略

1. UUID2. 独立数据库的自增ID3. SnowFlake 雪花算法4. 借助Redis的Incr命令获取全局唯一ID

2020-07-25 21:23:14 89

原创 集群时钟同步问题

时钟不同步导致的问题时钟此处指服务器时间,如果集群中各个服务器时钟不一致势必导致一系列问题,试想 “集群是各个服 务器一起团队化作战,大家工作都不在一个点上,岂不乱了套!”举一个例子,电商网站业务中,新增一条订单,那么势必会在订单表中增加了一条记录,该条记录中应 该会有“下单时间”这样的字段,往往我们会在程序中获取当前系统时间插入到数据库或者直接从数据库 服务器获取时间。那我们的订单子系统是集群化部署,或者我们的数据库也是分库分表的集群化部署, 然而他们的系统时钟缺不一致,比如有一台服务器的时间是昨天

2020-07-25 19:08:26 496

原创 Nginx 配置一致性Hash负载均衡策略

核心模块简介进入nginx的安装目录进入/src/http目录如上图,Nginx http 核心功能模块都在这个目录,功能如下负载均衡器ngx_http_upstream_consistent_hash 模块是一个负载均衡器,使用一个内部一致性hash算法来选择合适的后端节点。该模块可以根据配置参数采取不同的方式将请求均匀映射到后端机器,consistent_hash $remote_addr:可以根据客户端ip映射consistent_hash $request_ur

2020-07-25 17:26:00 647 1

原创 一致性Hash分析

Hash算法应用场景Hash算法在很多分布式集群产品中都有应用,比如分布式集群架构Redis、Hadoop、ElasticSearch,Mysql分库分表,Nginx负载均衡等主要的应用场景归纳起来两个请求的负载均衡(比如nginx的ip_hash策略)Nginx的IP_hash策略可以在客户端ip不变的情况下,将其发出的请求始终路由到同一个目标服务器上,实现会话粘滞,避免处理session共享问题 ,我们可以对ip地址或者sessionid进行计算哈希值,哈希值与服务 器数量进行取模

2020-07-25 15:10:46 96

原创 初识Hash算法

定义Hash,也称“哈希”或者“散列”,是一种重要的存储方式,也是一种常见的检索方法。散列方法的主要思想是根据结点的关键码值来确定其存储地址:以关键码值K为自变量,通过一定的函数关系h(K)(称为散列函数),计算出对应的函数值来,把这个值解释为结点的存储地址,将结点存入到此存储单元中。检索时,用同样的方法计算地址,然后到相应的单元里去取要找的结点。为什么需要使用Hash?通过散列方法可以对结点进行快速检索。Hash算法较多的应用在数据存储和查找领域,最经典的就是Hash表,它的查询效率非常之高,

2020-07-25 14:47:17 340 1

原创 tomcat体系结构

体系结构简图核心配置文件<Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <!--Initiali

2020-07-24 18:06:03 221

原创 Nginx核心配置及应用

Nginx的核心配置文件conf/nginx.conf包含三块内容:全局块、events块、http块全局块从配置文件开始到events块之间的内容,此处的配置影响nginx服务器整体的运行,比如worker进 程的数量、错误日志的位置等events块events块主要影响nginx服务器与用户的网络连接,比如worker_connections 1024,标识每个workderprocess支持的最大连接数为1024http块http块是配置最频繁的部分,虚拟主机的配

2020-07-20 00:39:47 74

原创 CentOs安装nginx-1.18.0

1上传nginx安装包到linux服务器,nginx安装包(.tar文件)下载地址:http://nginx.org ,这里安装的是nginx-1.18.0.tar.gz2 安装Nginx依赖,pcre、openssl、gcc、zlib(推荐使用yum源自动安装)yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel3 解包Nginx软件包tar -xvf nginx-1.18.0.tar4 进入解压.

2020-07-19 23:45:04 187

原创 tomcat性能优化

系统性能的衡量指标响应时间:执行某个操作的耗时;吞吐量:系统在给定时间内能够支持的事务数量,单位为TPS(Transactions PerSecond的缩写,也 就是事务数/秒,一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。Tomcat优化JVM虚拟机优化(优化内存模型)Java 虚拟机的运行优化主要是内存分配和垃圾回收策略的优化内存直接影响服务的运行效率和吞吐量垃圾回收机制会不同程度地导致程序运行中断(垃圾回收策略不同,垃圾回收次数和回收效率都是 不同的)J

2020-07-19 21:57:02 132

原创 Tomcat类加载机制

Tomcat类加载器类加载器功能及作用类加载器作用引导类加载器BootstrapClassLoaderc++编写,加载java核心库 java.*,比如rt.jar中的类,构造ExtClassLoader和AppClassLoader扩展类加载器ExtClassLoaderjava编写,加载扩展库 JAVA_HOME/lib/ext目录下的jar 中的类,如classpath中的jre ,javax.*或者java.ext.dir 指定位置中的类系统类加载器Syst

2020-07-19 19:10:28 129

原创 tomcat请求处理流程

请求处理流程分析请求处理流程示意图Mapper组件体系结构具体处理流程tomcat请求处理最终都经过FilterChain的doFilter方法,FilterChain的实现类是ApplicationFilterChain,所以可以在ApplicationFilterChain的doFilter方法中打断点看执行流程,具体代码执行找如下service:728, HttpServlet (javax.servlet.http)internalDoFilter:231, Applicati.

2020-07-19 15:58:56 179

原创 Tomcat加载资源流程

资源配置spring和springmvc整合的时候资源加载入口配置在web.xml中,代码如下<web-app> <display-name>Archetype Created Web Application</display-name> <!--springioc容器管理bean及aop声明式事务配置文件--> <context-param> <param-name>contextCo

2020-07-19 11:50:48 292

原创 spring和springmvc父子容器

父子容器概念在spring和springmvc进行整合的时候,一般情况下我们会使用不同的配置文件来配置spring和springmvc,配置入口在web.xml文件,配置如下<web-app> <display-name>Archetype Created Web Application</display-name> <!--springioc容器管理bean及aop声明式事务配置文件--> <context-param

2020-07-19 11:09:50 186

原创 Tomcat初始化及启动流程

初始化及启动流程图tomcat bin目录下start.sh脚本有上图可知,实际执行的是catalina.sh,脚本内容如下由上图可知最终执行的是org.apache.catalina.startup.Bootstrap的start方法

2020-07-18 21:35:22 184

原创 IDEA构建Tomcat源码

源码下载源码导入IDE之前准备工作解压 tar.gz 压缩包,得到目录 apache-tomcat-8.5.57-src进入 apache-tomcat-8.5.57-src 目录,创建一个pom.xml文件,文件内容如下<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2

2020-07-18 17:28:57 652

原创 手写简易版tomcat

功能Minicat要做的事情:作为一个服务器软件提供服务的,也即我们可以通过浏览器客户端发送http请求, Minicat可以接收到请求进行处理,处理之后的结果可以返回浏览器客户端。目标提供服务,接收请求(Socket通信)请求信息封装成Request对象(Response对象)客户端请求资源,资源分为静态资源(html)和动态资源(Servlet)资源返回给客户端浏览器改进V1.0需求:浏览器请求http://localhost:8080,返回一个固定的字符串到⻚面"Hello

2020-07-18 16:21:36 271

原创 SpringIoc容器初始化流程

一. 核心方法概览二 、bean初始化总体流程 public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { // Prepare this context for refreshing. // 准备更新上下文,设置开始时间,标记活动标志,初始化配置文件中的占位符 prepareRefresh();// Tell the

2020-07-18 10:38:09 548

原创 SpringIoc容器加载方式

1. 纯xml配置(beans信息定义全部在xml文件中)JavaSE://加载当前项目资源文件,常用ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");//加载系统文件,不方便迁移,不常用FileSystemXmlApplicationContext fileSystemXmlApplicationContext = new FileSystem

2020-07-18 10:34:51 127

原创 spring循环依赖时序图

2020-07-18 10:15:45 240 1

原创 Tomcat 核心配置详解

Tomcat核心配置在tomcat目录下conf/server.xml文件,本文主要是针对 server.xml 配置讲解主要标签结构如下 <!--Server 根元素,创建一个Server实例,子标签有 Listener、GlobalNamingResources、Service --><Server> <!--定义监听器--> <Listener/> <!--定义服务器的全局JNDI资源 --> ..

2020-07-17 21:53:10 301

转载 tomcat系统架构

1. 浏览器访问服务器的流程2. Tomcat 系统总体架构3. Tomcat 请求处理大致过程

2020-07-16 23:03:17 124 1

原创 springboot Thymeleaf模板引擎及国际化

Thymeleaf模板引擎及国际化Thymeleaf是一种现代的基于服务器端的Java模板引擎技术,也是一个优秀的面向java的XML、XHTML、HTML5页面模板,具有丰富的标签语言、函数和表达式,在使用springboot框架进行页面设计时,一般会选择Thymeleaf模板。代码示例<!DOCTYPE html><html lang="en" xmlns:th="http://www.thymeleaf.org"><head> <meta

2020-07-15 18:32:39 232

原创 springboot-mybatis整合

创建springboot项目

2020-07-13 21:32:20 140

原创 SpringApplication.run 源码分析

SpringBoot 程序启动入口@SpringBootApplicationpublic class Springboot01DemoApplication { public static void main(String[] args) { SpringApplication.run(Springboot01DemoApplication.class, args); }}点击SpringApplication.run查看源码 /** * 运行 Sp

2020-07-13 20:00:19 519

原创 SpringBoot自动配置

概念能够在我们添加jar包依赖的时候,自动的为我们配置一些组件的相关配置,我们无需配置或者只需要少量配置就能运行编写的项目。如何自动配置springboot项目启动入口是@SpringBootApplication注解标注类中的main方法。@SpringBootApplication注解能够扫描spring组件并自动配置SpringBoot,下面开始进行源码分析,示例代码如下@SpringBootApplicationpublic class SpringbootDemoApplicat

2020-07-13 19:46:02 165

原创 SpringBoot依赖管理

为什么导入dependency时不需要指定版本在springboot项目中顶级pom.xml文件中有个核心依赖spring-boot-starter-parent,示例代码如下 <!--SpringBoot父项目依赖管理--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-par

2020-07-13 13:10:21 710

原创 springboot参数配置

全局配置文件application.properties 配置文件先准备两个pojo实体类Pet和Person@Component//用于将Person类作为Bean注入到spring容器中@ConfigurationProperties(prefix = "person") //将配置文件中以person开头的属性注入到该类中public class Person { private int id; //id private String nam

2020-07-12 15:45:23 1484

原创 springboot热部署配置

热部署功能在开发过程中,通常会对一段业务代码不断的修改测试,在修改之后往往需要重启服务,有些服务需要加载很久才能启动成功,这种不必要的重复操作极大的降低了程序开发效率,为此,SpringBoot框架专门提供了进行热部署的依赖启动器,用于进行项目热部署,而无需手动重启项目。如何配置在pom.xml文件中添加spring-boot-devtools热部署依赖启动器 <!-- 引入热部署依赖--> <dependency> <

2020-07-11 22:42:07 145

原创 Spring-SpringMVC-JPA整合

整合策略SSM = Spring + SpringMVC + JPA= (Spring + JPA)+ SpringMVC先整合 Spring + JPA然后再整合 SpringMVCJPA整合Spring整合目标创建工程导入坐标(Java框架于我们而言就是一堆jar)配置 Spring 的配置文件(配置指定框架执行的细节)编写实体类 Resume,使用 JPA 注解配置映射关系编写一个符合 Spring Data JPA 的 Dao 层接口(ResumeDao接口)操作

2020-07-10 16:55:55 256

原创 Spring-SpringMVC-Mybatis整合

整合策略SSM = Spring + SpringMVC + Mybatis = (Spring + Mybatis)+ SpringMVC先整合 Spring + Mybatis然后再整合 SpringMVCMybatis整合Spring整合目标数据库连接池以及事务管理都交给Spring容器来完成SqlSessionFactory对象应该放到Spring容器中作为单例对象管理Mapper动态代理对象交给Spring管理,我们从Spring容器中直接获得Mapper的代理对象

2020-07-10 16:29:41 110

原创 springmvc源码解析(5)--processDispatchResult

视图渲染入口方法注释简单翻译过来就是 处理handler执行结果,不管结果是ModelAndView还是异常,最终都被处理为ModelAndView如果有异常就处理异常视图渲染,核心方法执行拦截器最终的afterCompletion方法render方法主要有以下两个功能根据view名称封装view视图对象渲染数据遍历视图解析器封装视图,初始化九大组件时知道默认视图解析器是InternalResourceViewResolverInternalResourceV

2020-07-08 12:06:39 499

原创 springmvc源码解析(4)--handle处理请求并返回结果视图

方法入口处理请求之前先获取handler并作为参数传入,此处不需要拦截器,所有没有传入HandlerExecutionChain调用 AbstractHandlerMethodAdapter中的handle方法判断当前是否需要支持在同一个session中只能线性地处理请求如果当前不需要对session进行同步处理,则直接对HandlerMethod进行适配synchronizeOnSession默认false,所以走第二个分支下面是执行的核心方法首先封装了一个webR

2020-07-07 23:11:32 207

原创 springmvc源码解析(3)--getHandler和getHandlerAdapter

getHandler这一步是循环遍历handlerMappings,从里面匹配一个返回。handlerMappings在前面的文章中分析过是在初始化九大组件的时候就初始化好的。上一步的mapping.getHandler是由AbstractHandlerMapping实现的,主要有以下一个功能查找handler处理器的,具体留给子类去重写实现的, 比如根据URL去查找匹配等等构建出一个处理器链 ,和handler绑定,并且内部获取所有的拦截器,然后添加到处理器链里面去如果设置了跨域

2020-07-07 14:21:28 809

空空如也

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

TA关注的人

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