自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Synchronized锁升级之轻量级锁

线程之间存在锁的伪竞争行为,即同一时刻绝对不会存在两个线程申请获取锁,各个线程尽管都有使用锁的需求,但是是交替使用锁(轻量级锁情况下,线程还是不会发生堵塞)

2023-03-30 23:20:57 560

原创 synchronized的工作原理

synchronized修饰代码块是,通过在生成的字节码指令中插入monitorenter和monitorexit指令来完成对 对象监视器的获取和释放synchronized修饰普通方法和静态方法的时候,通过在字节码中的方法头信息中添加ACC_SYNCHRONIZED标识,线程在执行方法前会先获取对象的 对象监视器(monitor)如果获取成功则执行方法代码,执行完毕后释放 monitor对象synchronized的使用修饰代码块,锁对象就是代码块中的对象。

2023-03-30 23:20:12 408

原创 Synchronized锁升级之重量级锁

线程之间存在实际的锁竞争行为,线程间都有获取锁的需求,但是时间不可交错,互斥锁的等待大白话就是:在同一时刻存在两个即两个以上线程对同一把锁产生竞争行为。

2023-03-30 23:19:03 234 1

原创 Synchronized锁升级之无锁和偏向锁

为了优化synchronized锁的效率,在JDK1.6中,HotsPot虚拟机开发团队提出了锁升级的概念,包括偏向锁、轻量级锁、重量级锁,锁的升级值的是 无锁态 >> 偏向锁 >> 轻量级锁 >> 重量级锁synchronized同步锁相关信息保存在锁对象的对象同中的Mark Word中,锁升级功能主要是依赖Mark Word中锁的标准为何是否偏向锁来实现的从上图我们可以看到,无锁态对应的锁标志位位 01,是否偏向锁标志位 0,下面通过两个简单的Java case来演示无锁态和轻量级锁。

2023-03-30 23:18:19 330

原创 Synchronized锁升级 - 锁的基本概念及优缺点

synchronized在JDK1.6的时候做了比较大的改动,在之后的JDK版本中,synchronized存在偏向锁、轻量级锁、重量级锁三种状态。

2023-03-30 23:16:58 154

原创 如何自定义线程池工具类(ThreadPoolUtils)

1.线程池对象java.util.concurrent.ThreadPoolExecutor2.线程池核心参数了解在自定义线程池之前先来了解一下在创建并初始化线程池时有那些所需知的前置条件(线程池有那些核心参数),详细入下代码:public ThreadPoolExecutor(int corePoolSize, //线程池核心线程大小 int maximumPoolSize, //线程池最大线程数

2021-11-04 00:42:28 4907 4

原创 分布式定时任务调度框架【Quartz】学习与实战记录完整篇

1.Quartz的概念Quartz就是一个基于Java实现的任务调度框架,用于执行你想要执行的任何任务。Quartz是OpenSymphony开源组织在Job scheduling(定时调度)领域的开源项目,它可以与J2EE和J2SE应用程序相结合也可以单独使用。Quartz是开源且具有丰富特性的任务调度库,能够集成任何的Java应用。它能创建简单的或者复杂的调度任务,以执行上十,上百,上千,上万的任务。任务job被定义为标准的Java组件。能工执行任何你想要实现的功能。Quartz调度框架包含许多企

2021-07-19 11:09:57 5472 10

原创 SpringBoot整合Quartz实现动态的创建或删除定时任务并将定时调度任务持久化到MySQL以及Quartz集群配置

1.创建quartz数据库并导入quartz的SQL脚本文件quartz源码下载地址:http://www.quartz-scheduler.org/downloads/下载完成后解压,在/src/org/quartz/impl/jdbcjobstore可以找到对应数据库的SQL脚本我这里使用的是MySQL数据库,SQL脚本如下:CREATE DATABASE `quartz` /*!40100 DEFAULT CHARACTER SET utf8 */;DROP TABLE IF EXIS

2021-07-19 11:00:26 754

原创 Quartz监听器

1.Quartz监听器1.1.概念Quartz的监听器用于当任务调度中你所关注事件发生时,能够及时获取这一事件的通知。类似于任务执行过程中的邮件,短信的提醒。Quartz监听器主要有JobListener、TriggerListener、SchedulerListener三种,顾名思义,分别表示任务,触发器,调度器对应的监听器。三者的使用方法类似,在开始介绍三种监听器之前,需要明确两个概念:全局监听器与非全局监听器。两者的区别在于:全局监听器只能够接收到所有的Job、Trigger的事件通知。

2021-07-19 10:58:59 947 1

原创 Quartz配置资源介绍

1.配置、资源SchedulerFactoryQuartz以模块方式架构,因此要使它运行。几个组件必须要很好的咬合在一起。【现在已经有了一些现成的助手可以完成这些工作】所有scheduler实例是由SchedulerFactory创建。Quartz的三个核心概念:调度器,任务,触发器。调度器,任务,触发器三者之间的关系为:一个作业,比较重要的三个要素是Scheduler,JobDetail,Trigger;而Trigger对于Job而言就好比一个驱动器;没有触发器来定时驱动作业,作业就无法运行;对

2021-07-19 10:55:17 418

原创 Quartz - Trigger触发器的介绍

注意:本文应用了Quartz入门中的入门案例作为基础1.Trigger触发器的介绍上图即是Quartz的触发器类型,常用的为SimpleTriggerImpl,CronTriggerImpl1.SimpleTriggerImpl的使用设置触发的开始时间和结束时间及执行计划/** * @Author ScholarTang * @Date 2021/7/13 10:45 * @Desc 任务类 */@Slf4j@PersistJobDataAfterExecutionpu

2021-07-19 10:51:51 721

原创 Quartz中的常用组件之间的关系

注意:本文应用了Quartz入门中的入门案例作为基础1.Job和JobDetail的关系介绍Job:工作任务调度接口,任务类需要实现的接口。该接口中定义了execute方法,类似JDK提供的TimeTask类的run方法。在这里面编写任务执行的业务逻辑Job实例在Quartz中的生命周期:每次调度器执行Job时,它在调用execute方法前会创建一个新的Job实例,当调度完成后,管理的Job对象实例将会被释放,释放的实例会被垃圾回收机制回收@Slf4jpublic class Hello

2021-07-19 10:47:25 321

原创 Quartz入门

1.Quartz的概念Quartz就是一个基于Java实现的任务调度框架,用于执行你想要执行的任何任务。Quartz是OpenSymphony开源组织在Job scheduling(定时调度)领域的开源项目,它可以与J2EE和J2SE应用程序相结合也可以单独使用。Quartz是开源且具有丰富特性的任务调度库,能够集成任何的Java应用。它能创建简单的或者复杂的调度任务,以执行上十,上百,上千,上万的任务。任务job被定义为标准的Java组件。能工执行任何你想要实现的功能。Quartz调度框架包含许多企

2021-07-19 10:39:10 196 1

原创 分布式定时任务调度框架 - Quartz学习及实战记录笔记

11

2021-07-19 10:36:10 204 1

原创 Spring-Cache缓存技术的使用

1.为什么要数据缓存?一个程序的瓶颈在于数据库,因为内存的速度是大大快于硬盘的速度的。当我们需要重复的获取相同的数据时,一次又一次的请求数据库获取远程服务,会导致大量的时间浪费在数据库查询或者远程方法调用上,导致程序性能恶化,这便是数据缓存要解决的问题。2.Spring-Cache缓存支持Spring定义了org.springframework.cache.CacheManager和org.springframework.cache.Cache接口用来统一不同的缓存技术。其中CacheManag

2021-06-28 16:29:49 1121 1

原创 @Async注解失效可能产生的原因及解决方案

1.@Async注解失效可能产生的原因及解决方案1.1.未开启异步配置需要在SpringBoot启动类上添加@EnableAsync注解@SpringBootApplication@EnableAsync//开启异步线程配置public class AsyncDemoApplication { public static void main(String[] args) { SpringApplication.run(AsyncDemoApplication.class,

2021-05-11 16:00:42 11333 4

原创 Mybatisplus搭建多租户模式(共享库表,按租户id字段区分租户)

前言近期工作中有遇到多租户模式的应用场景,对此自己查阅了大量的资料。对可行性进行分析后选择了共享库表,按租户id字段区分租户的方式去实现。以此记录一下方便日后所需查阅1.熟悉多租户之前先来了解一下什么是SaaS系统以下内容来着百度百科SaaS平台是运营saas软件的平台。SaaS提供商为企业搭建信息化所需要的所有网络基础设施及软件、硬件运作平台,并负责所有前期的实施、后期的维护等一系列服务,企业无需购买软硬件、建设机房、招聘IT人员,即可通过互联网使用信息系统。SaaS 是一种软件布局模型,

2021-05-11 11:28:12 8948 6

原创 Java实现AES对称加密算法的加密和解密

前言近期在工作中遇到这样一个需求,详细如下:服务A向服务B请求数据,服务B查询对应的数据并对数据进行加密响应至服务A。加密流程如下:随机生成AES KEY,对数据进行对称加密,得到密文使用服务A传过来的公钥对随机生成的AES KEY 进行加密将数据密文与加密后的AES KEY一并返回给服务A在实现过程中,查阅了大量的资料。其中参考了以下这两篇文章。本文大致内容摘用了这两篇文章中的内容,以此记录实现过程。方便需要时查阅https://blog.csdn.net/hbcui1984/ar

2021-04-19 18:11:27 550

原创 ElasticSearch入门学习教程

前言本片博客是本人通过观看狂神说的视频记录的笔记,以此记录方便需要时查阅。视频地址:https://www.bilibili.com/video/BV17a4y1x7zq1.ElasticSearch的简介ElasticSearch,简称ES。ES是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身的扩展性很好,可以扩展到上百台服务器,处理BP(大数据)级别的数据。ES也使用Java开发并使用Lucene作为其核心来实现所有缩影和搜索功能,但是它的目的是通过简单的RE

2021-04-19 17:40:56 607 1

原创 MySQL数据库或表导入导出操作

1、导出注意以下命令都是远程导出方式,如果是本地导出您需要手动去掉 -h目标服务器IP -PMySQL服务端口1.1、MySQL导出整个数据库-- 命令mysqldump -h目标服务器IP -PMySQL服务端口 -uMySQl数据库登录用户名 -p 数据库名称 > /文件存放路径/文件名称.sql-- 会车后输入密码,即可导出库SQL文件-- 示例mysqldump -h127.0.0.1 -P3306 -uroot -p mysql_optimize > /Users/

2021-03-19 18:25:02 833 2

原创 JDBC连接工具类

前言记录YML配置# 其他数据源配置,通过JDBC连接other-datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://{ip}:{host}/database?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=

2021-03-16 12:25:35 250

原创 SQL优化的详细步骤及工具的使用

SQL优化1.为什么要对SQL语句进行优化在应用开发过程中,由于初期数据量小,开发人员在编写SQL时更重视功能上的实现,但是当应用系统正式上线后,随着生产数据量的急剧增长,很多SQL语句开始逐渐显露出性能问题,对生产的影响也越来越大,此时这些有问题的SQL语句就成为整个系统的瓶颈,因此我们必修要对它们进行优化2.SQL优化的步骤2.1.查看SQL执行频率MySQL客户端连接成功后,通过show[session|global] status命令可以提供服务器状态信息。show[session|

2021-03-01 21:15:43 1832 5

原创 Linux常用命令

前言记录工作中用到的Linux命令,已备需要时查阅。查看系统信息arch 显示机器的处理器架构uname -m 显示机器的处理器架构uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI) hdparm -i /dev/hda 罗列一个磁盘的架构特性 hdparm -tT /dev/sda 在磁盘上执行测试性读取操作 cat /proc/cpuinfo 显示CPU info的信息 cat /proc/interrupts

2021-02-23 16:40:30 145 2

原创 Docker配置MySQL的最大连接数及导出/导入数据库操作

Docker配置MySQL的最大连接数详细的过程:我们使用docker pull了一个MySQL的镜像,通过镜像构建了一个MySQL的容器。容器构建成功并启动后我们通过命令docker exec -it mysql /bin/bash进入到容器里面。通过命令mysql -u用户名 -p密码连接MySQL通过命令show variables like '%max_connections%';查看MySQL的默认的最大连接数。默认情况下MySQL的最大连接数max_connectio

2021-01-27 12:21:48 741 1

原创 SpringBoot+MyBatis-Plus+MySQL多数据源的使用

前言近期的工作中协助同事解决一个SpringBoot+MyBatis-Plus+MySQL多数据源的问题,借此记录一下。业务背景:从一个数据库中获取某个字段为空的的所有记录,将这些记录集作为一个接口的请求参数调用接口将接口返回值再插入到对应的数据库中从业务上来说,这个场景只需要单纯的使用多数据源即可。并不牵涉到主从数据库的概念。本片文章通过一个简单的案例来描述一下多数据源的配置及使用。实现的功能:查询数据库1中的一条数据,将其插入到数据库2中准备SQL-- 创建数据库db1,db2

2021-01-26 18:05:20 410 1

原创 MySQL的存储引擎

1.存储引擎1.1.概述和大多数数据库不同,MySQL中有一个存储引擎的概念,针对不同的存储需求可以选择最优的存储引擎。存储引擎就是存储数据,建立索引,更新查询数据等等技术的实现方式。存储引擎是基于表的,而不是基于库的。所以存储引擎也可以被称为表类型。Oracle,SqlServer等数据库只有一种存储引擎。MySQL提供插件式的存储引擎架构。所以MySQL存在多种存储引擎,可以根据需要使用响应引擎,或者编写存储引擎。MySQL5.0支持的存储引擎包含:InnoDB、MyISAM、BDB、ME

2021-01-21 18:29:49 514

原创 启动、停止、查看某个目录下所有JAR程序脚本

前言近期工作中有遇到这样一个需求:编写一个脚本用来控制某个目录下所有JAR程序的起停已经查看程序的状态。过程中查阅的大量的资料并实现了功能,借此记录一下。脚本1、启动脚本脚本名称:start.sh#!/usr/bin/env bash# 配置文件名称 (该配置文件放置在jar包同级目录下并且必须存在已经配置文件名称具备统一性!!!请根据实际的配置文件名称进行修改)CONFIG_FILE_NAME="application.yml"# 启动一个目录下的所有jar包function

2021-01-12 15:14:08 554 1

原创 Git的基本使用及分支操作

1.基本使用1、GitHup上创建一个远程仓库点击右上角的+点击 New repository 创建一个远程仓库填写仓库名称和描述后点击create repository创建远程仓库2.分支操作1、在本地提供开发工具(IDEA)创建一个项目push到远程仓库(初始化远程仓库内容)项目创建好后,点击工具底栏的Terminal命令行工具,执行以下命令;将项目push到远程仓库# 使用git命令初始化项目git init# 将所有文件添加到暂存区git add .# 创建项目描述

2021-01-10 13:54:06 296

原创 MySQL的体系结构

MySQL的体系结构概述猛眼一看这个结构体系图好像很繁琐,其实这个体系和我们在做web开发时的三层架构是有些类似的。用户发起一个请求到控制处理层,控制处理层调用service服务进行服务处理,service服务再调用dao层为service提供数据层的支持返回对应的数据(内容),最终响应给用户。类似这样,详细的来分析这个结构图。先讲这个结构图分成两部分,如下图所示:1、Connectors:连接层。可以把它看成一个客户端2、MySQL Server:服务层。可以把它看成MySQL服

2021-01-05 16:28:25 2931 6

原创 MySQL触发器

1.触发器1.1.介绍触发器是与表相关的数据库对象,指在insert/update/delete之前或者之后,触发并执行触发器中定义的SQL语句集合。触发器的这种特征可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作使用别名OLD和NEW来引发触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持行级触发,不支持语句级触发触发器类型NEW和OLD的使用INSERT型触发器NEW表示将要或者已经新增的数据UPDTE型触发器OLD表示修改之

2021-01-04 18:32:20 170 1

原创 MySQL存储过程和存储函数

3.存储过程和存储函数3.1.存储过程和函数概述存储过程和函数是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程和函数可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据的处理的效率是有好处的。存储过程和函数的区别在于函数必须有返回值,而存储过程没有。函数:是一个有返回值的过程;过程:是一个没有返回值的函数;3.2.创建存储过程语法:create procedure performance_name ([proc_parameter[...

2021-01-04 18:28:56 369

原创 MySQL视图

1.视图1.1.视图概述视图(View)是一种虚拟存在的表。视图并不在数据库中实际存在,行和列数据来自,定义视图的查询中使用的表,并且是在使用视图时动态生成的。通俗的讲,视图就是一条SELECT语句执行后返回的结果集。所以我们在创建视图的时候,主要工作就落在创建这条SQL查询语句上。视图相当于普通的表的优势主要包括以下几项:简单:使用视图的用户完全不需要关心后面对应的表的结构,关联条件和筛选条件,对用户来说已经是过滤好的复合条件结果集。安全:使用视图的用户只能访问他们允许查询的结果集,对表的权

2021-01-04 18:23:00 129

原创 MySQL高级学习笔记(持续更新中)

前言抽工作之余,完整性的学习了一下MySQL相关的知识。借此保存一下自己的学习笔记,以便需要的时候查阅。内容MySQL索引

2021-01-04 18:18:51 604 2

原创 MySQL索引

1.MYSQL索引1.1.索引的概述MySQL官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构。在数据之外,数据库系统还维护着特定查找算法的数据结构,这些数据结构以某种方式应用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引,如下图所示:左边是数据表,一共有两列七条记录,最左边的是数据记录的物理地址(注意逻辑上相邻的记录在磁盘上也并不是一定物理相邻)。为了加快Col2的查找,可以维护一个右边所示的二叉树,每一个节点分别包含索引键值和一个指

2021-01-04 18:12:45 211 1

原创 Linux服务器上实用的Jar包部署脚本

1.脚本#!/bin/bash# 定义变量# 要运行的jar包路径,加不加引号都行。 注意:等号两边 不能 有空格,否则会提示command找不到JAR_NAME="修改成jar包所在路径"# 如果输入格式不对,给出提示!tips() { echo "" echo "WARNING!!!......Tips, please use command: sh xxx.sh [start|stop|restart|status]. For example: sh xxx.sh start

2020-11-23 17:58:39 608

原创 将Excel表格中的数据导出为Json数据小工具

前言近期工作中有一个简单的导入数据的功能,这个数据是业务方提供的。而业务提供给我的是一个Excel表格,表格中的表头有将进20个,而我需要的也就4个字段。于是自己便写了一个简单的小工具,用来将Excel中的数据进行有选择性的导出。在此记录一下实现过程在线使用1.SwaggerAPI地址http://39.106.65.147:8088/swagger-ui.html2.使用说明1.调用接口conversion/readFileReturnHeader读取excel文件,返回excel文件

2020-11-23 17:46:28 1369 1

原创 消息中间件之RabbitMQ入门详细篇

1.RabbitMQ1.1.简介:MQ全称为Message Queue,即消息队列,RabbitMQ是由erlang语言开发,基于AMQP协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统中应用非常广泛。RabbitMQ官方地址:http://www.rabbitmq.com/erlang:erlang语言是专门针对于开放高并发程序AMQP:Advanced Message Queue 高级消息队列协议1.2.应用场景开发中消息队列通常有如下应用场景1.任务异步

2020-10-22 12:05:48 392 1

原创 MYSQL定时任务的使用

前言在近期工作中有遇到一个需求,需求详细如下:编写一个SQL脚本,在每天的0点清除指定表中前七天的数据。借此在此记录我实现的过程1.检测event是否开启执行如下SQL,查看event是否开启SHOW VARIABLES LIKE '%event_sche%';如果执行结果的Value值为OFF,则说明event未开启,请您执行下面这条SQL开启eventSET GLOBAL event_scheduler = 1;2.定时事件执行计划:清除指定表中7天以前的数据前

2020-10-15 17:04:09 184

原创 记录在阿里云服务器Windows Server部署应用经历

前言记录在阿里云服务器Windows Server上部署应用经历实施步骤1.登录阿里云2.点击控制台,选择云服务器ECS3.点击云服务器,打开实例信息4.查看实例的公有IP和私有IP5.查看安全组,设置需要开放的端口左边菜单栏 >>> 网络安全 >>> 安全组如果没有安全组信息可以自己创建一个安全组。点击安全组的配置规则,可以提供添加安全组规则或者快速创建规则设置入、出方向安全规则(简单来说就是在这里去开放端口的,设置了入方向,出方向

2020-09-29 12:09:08 582

原创 ArrayList集合排序方式总结

前言List集合是日常开发中最常用的集合类,没有之一。在有些场景可能会需要通过程序对集合中的元素进行排序,本文总结一下List集合排序可以通过哪些方式来实现1.使用集合的工具类Collections对ArrayList集合进行排序简单的整数型排序:当集合的范型为Integer类型或者为String类型并且集合中的元素为数字字符串,我们可以使用集合的工具类Collections类来对集合中的元素进行排序。CodeList<Integer> numbers = new Arra

2020-09-19 21:35:23 22370 2

空空如也

空空如也

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

TA关注的人

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