- 博客(45)
- 资源 (1)
- 收藏
- 关注
原创 【Java】RedisTemplate来控制某段时间内执行最大次数
RedisTemplate来控制某段时间内执行最大次数的Java示例代码。假设我们希望限制某个操作(如发送邮件、访问特定API等)在1小时内最多执行n次
2024-04-26 17:40:30 470 5
原创 【Tools】Eclipse MemoryAnalyzer(MAT)工具使用笔记
记录一次使用Eclipose的MAT分许工具分析oom的问题的过程
2022-01-07 16:38:00 1868
原创 【Note】Mybatis generator插件自动生成代码
1.创建一个maven项目在pom.xml中,配置mybatis插件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4
2021-10-22 11:20:49 147
原创 【Note】阿里云ECS服务器(centos7.8)安装Java8和maven
一、前言现在已经安装了mysql、Redis和Nginx,再安装Java。环境版本服务器阿里云ECS(Centos7.8)Java1.8二、安装因为之前已经下载好了linux版本的包,直接用sftp工具上传到服务器。2.1 解压tar -zxvf jdk-8u111-linux-x64.tar.gz2.2 配置环境变量vi /etc/profile#set java environmentJAVA_HOME=/usr/lib/jvm/jre-1.6.
2021-09-12 22:47:09 318
原创 【Note】阿里云ECS服务器(centos7.8)安装Nginx
一、前言前面已经安装了mysql和redis,再安个Nginx吧。环境版本服务器阿里云ECS(Centos7.8)Nginx1.18.0二、安装2.1 基础环境首先还是检查gcc和c++环境,如果没有安装请用下面命令安装# gccyum -y install gcc# gcc-c++yum -y install gcc-c++还要安装pcre, zlib,pcre是为了重写rewrite,zlib是为了gzip压缩。不安装这些在编译nginx的时候会报
2021-09-07 22:43:05 194
原创 【Note】阿里云ECS服务器(centos7.8)安装Redis
一、前言前面以及安装了Mysql,现在我们再来安装一个单机版的Redis吧。类别版本服务器阿里云ECS(Centos7.8)redis6.0.6二、安装2.1 检查gcc环境众所周知Redis是C语言开发的。因此,在安装redis之前应该确认下有没有安装gcc。gcc -v如果没有安装就用下面的命令安装yum -y install gcc2.2 下载redis并解压下载wget http://download.redis.io/releases/
2021-09-07 22:18:00 151
原创 PulsarClientException$ProducerBusyException: Producer with name ‘XX‘ is already connected to topic
Pulsar同一个topic启动多个生产者时报异常,PulsarClientException$ProducerBusyException: Producer with name ‘XXXXXX’ is already connected to topic。异常信息如下:org.apache.pulsar.client.api.PulsarClientException$ProducerBusyException: Producer with name 'register_producer' is al
2021-09-07 09:20:26 1671
原创 【Note】阿里云ECS服务器(centos7.8)安装mysql 8.0
一、前言突然想起来去年双十一趁着阿里云服务器新用户打折,买了一个三年期的服务器。然后就一直放着,一直也没管过。。。。。。啊,我已经受不了自己了。。。。。。不能在放着吃土了。。。不然白白浪费了我的人民币~~~先来个mysql,顺便做个笔记吧。二、环境信息环境版本服务器阿里云ECS(Centos7.8)mysql8.0.26三、安装3.1 安装Mysql3.1.1 安装MySQL官方的 Yum Repository下载wget -i -c http://dev.
2021-09-05 17:35:35 1033
原创 【Java】Aop+自定义注解实现水平分库
文章目录一、前言1.1 环境信息1.2 源码1.3 思路二、代码实现2.1 maven依赖2.2 配置文件2.3 数据源Spring配置类2.4 实现数据源路由抽象类2.5 自定义注解2.6 aop2.7 策略管理者2.8 水平分库抽象策略类2.9 自定义分库策略(参数是产品信息)2.10 自定义分库策略(第二个参数是店铺Id)2.11 使用三、总结一、前言前面我们已经用自定义注解+mybatis的拦截器实现了水平分表(传送门)。但是当数据量增加到一定程度时,我们不仅要水平分表还需要水平分库。当遇到这些
2021-09-01 22:32:24 1293 1
原创 【Spring-boot】自己开发一个SpringBoot的starter-->实战
文章目录一、前言1.1 环境信息1.2 源码地址二、starter开发2.1 代码开发2.1.1 首先创建一个最简单的maven项目2.1.2 pom依赖2.1.3 配置类2.1.4 参数配置类2.1.5 创建spring.factories2.2 打包三、测试3.1 在新创建的项目中引入自定义starter的依赖3.2 测试的controller3.3 application.properties配置3.4 测试保存3.5 测试查询一、前言上一篇文章我们已经研究了spring boot starter
2021-08-29 16:23:28 3708
原创 【Spring-boot】自己开发一个SpringBoot的starter-->原理详解
文章目录一、前言1.1 starter的作用二、原理2.1 概述2.2 什么是spi2.3 Spring的SPI2.4 Springboot中对spring SPI的使用三、扒一扒一个springBoot starter的源码3.1 引入依赖3.2 druid-spring-boot-starter jar包的基本结构3.3 源码3.4 在项目中的使用四、总结一、前言在日常开发中springboot是我们应用非常普遍的开发框架。springboot可以帮助我们快速的开发一个后端应用,我们只需引入依赖,添
2021-08-29 15:46:02 1131
原创 【Mybatis】mybatis拦截器+自定义注解完成简单的水平分表
文章目录一、背景1.1 环境信息1.2 场景1.3 表信息二、实现思路2.1 概述2.2 代码实现2.2.1 自定义mybatis拦截器2.2.2 自定义注解2.2.3 策略管理者2.2.4 分表策略抽象类2.2.5 产品表分表策略2.2.6 产品描述表分表策略2.3 使用2.3.1 产品信息表mapper接口2.3.2 产品信息表mapper.xml2.3.3 产品描述表mapper接口2.3.4 产品描述表mapper.xml三、个人总结一、背景1.1 环境信息依赖版本wind
2021-08-26 00:01:54 2248 1
原创 【Sharding-JDBC】SpringBoot2 + sharding-jdbc实现分库分表读写分离
文章目录一、背景1.1 环境信息1.2 前言1.3 表结构信息1.4 数据库信息二、代码实现2.1 概述2.2 主要代码2.2.1 pom.xml2.2.3 application.properties2.2.4 application-dxfl.properties2.2.5 ProductInfoMapper.xml2.2.6 ProductInfoMapper.java三、个人总结一、背景1.1 环境信息组件版本版本windows10mysqlMysql 8.0.2
2021-08-25 22:01:15 685 1
原创 【Sharding-JDBC】SpringBoot2 + Sharding-jdbc实现分库分表
目录一、背景1.1 表结构1.2 水平分库水平分表情况1.3 开发环境二、代码实现2.1 pom.xml2.2 application.properties2.3 application-fkfb.properties2.4 ProductInfoMapper.xml2.5 ProductInfoMapper.java2.6 ProductInfo.java2.7 ProductInfoService.java2.8 ProductInfoServiceImpl.java三、个人总结一、背景有一个产品库
2021-08-24 23:06:14 1754 1
翻译 【Sharding-JDBC】Sharding-JDBC基础
目录一、介绍1.1 历史由来1.2 Sharding-JDBC二、基本概念2.1 数据节点2.2 逻辑表2.3 真实表2.4 绑定表2.5 广播表2.6 分片键2.7 分片算法2.8 分片策略2.9 SQL Hint三、执行步骤3.1 SQL解析3.2 执行器优化3.3 SQL 路由3.3.1 分片路由1. 直接路由2. 标准路由3. 笛卡尔路由3.3.2 广播路由1. 全库表路由2. 全库路由3. 全实例路由4. 单播路由5. 阻断路由3.4 SQL 改写3.5 SQL 执行3.5.1 内存限制模式3.5
2021-08-22 19:54:32 634
原创 分库分表基础知识
一、面临问题我们在后端开发中,经常会用到数据库,数据库往往是系统中不可或缺的一部分。伴随着业务量的增长,数据量也随之增长。当增长到一定程度时,数据库往往会成为系统的瓶颈。当热点数据太多,数据库缓存放不下时,每次查询时会产生大量的IO。请求的数据太多,网络带宽不够。单表数据量太大,查询时扫描的行太多,SQL效率低。二、 解决问题当单个数据库和表无法承受巨大的业务量时,我们就要考虑分库分表。也就是将单节点压力分散到多个节点上,从而提高系统的并发量和吞吐量。分库:将单个数据库拆分成多个数据库,
2021-08-21 23:23:20 636
原创 Windows10配置Mysql80主从同步
一、环境信息Windows 10Mysql 8.0.25二、数据库信息Ip端口角色localhost3306主库localhost3307从库三、操作步骤3.1 从库安装3.1.1 复制Mysql安装目录找到原先安装的mysql,并将其(MySQL Server 8.0)复制一份,重命名为 (MySQL Server 8.0-S1)如下图:3.1.2 查找Mysql配置文件位置打开系统的服务找到MySQL80,右键->属性查看mysql
2021-08-20 00:17:12 377
原创 【Tools】Windows环境下.bat脚本启动和关闭Nginx
1、启动nginx(start-nginx.bat)@echo offtitle redis-serverset ENV_HOME="C:\tools\nginx-1.20.0"color 03cd %ENV_HOME%start nginxchcp 65001echo "-------------nginx--------启动成功------------"pause2、关闭nginx脚本(stop-nginx .bat)@echo offtskill nginxchcp 650
2021-05-20 11:28:20 710
原创 【Tools】Windows环境下.bat脚本启动和关闭Redis
start-redis.bat@echo offtitle redis-serverset ENV_HOME="C:\tools\redis"color 03cd %ENV_HOME%redis-server.exe redis.windows.confexitredis-startup.vbsset ws=wscript.createobject("wscript.shell")ws.run "start-redis.bat /start",0stop-redis.bat@ec
2021-05-20 11:23:38 709 1
原创 【Oracle】分批删除大量数据
平时我们要删除某个表的数据时-- 删除同一个证件号,状态为0和1的重复的记录,只保留其中一条DECLARE CURSOR MYCURSOR IS SELECT * FROM (SELECT COUNT(1) CNT, MIN(ID) ID, A.CERT_ID FROM UNION_LOAN_USER_INFO A WHERE A.CHANNEL_CODE = '10001' AND
2020-11-21 13:57:51 1410
原创 【Oracle】批量造测试数据
由于测试环境需要造许多测试数据,一条条insert比较麻烦,就写了下面的这段sql造数很方便。DECLARE --声明变量 NUMCOUNT NUMBER; V_CERTID VARCHAR2(64); V_NAME VARCHAR2(64); V_APPLY_NO VARCHAR2(64);BEGIN --赋初始值 NUMCOUNT := 201; V_CERTID := '411324166654'; V_NAME :.
2020-11-21 13:36:21 912
原创 【RocketMQ】Windows环境安装RocketMQ和控制台
一、基本信息系统:WindowsJDK1.8、Maven、GitRocketMQ4.7.1二、安装2.1 下载安装包到官网下载安装包解压安装包2.2 配置环境变量配置环境变量变量名:ROCKETMQ_HOME变量值:MQ解压路径\MQ文件夹名2.3 启动MQ启动NAMESERVER打开cmd命令窗口,切换到mq的bin目录下。然后执行’start mqnamesrv.cmd’命令,启动NAMESERVER。启动成功后不要关闭。启动BROKERCmd
2020-07-29 21:12:40 798
原创 Java开发SDK详解->客户端测试
一、前言前面已经开发好了服务端(服务端开发),并且已经打包好了SDK(SDK开发),现在我们在客户端引用SDK进行测试吧。二、详情2.1首先在项目中引入SDK创建一个SpringBoot项目,包sdk复制到项目的lib目录下。2.2 pom中引入jar包<dependency> <groupId>com.lh.hope</groupId> <artifactId>hope-sdk</artifactId>
2020-07-19 01:08:28 4477 3
原创 Java开发SDK详解->SDK开发
一、前言前面已经将服务端开发好了(服务端开发),现在我们来开发SDK吧。二、详情2.1 创建项目创建一个普通的maven项目 maven----》jdk选择1.8-----》next输入groupId和artifactId输入项目名称,和项目存放位置2.2 开发代码先看看项目的整体结构2.2.1 pom文件依赖的jar包<dependencies> <!--json相关--> <dependency> &l
2020-07-19 01:07:41 17954 1
原创 Java开发SDK详解->服务端开发
前言最近在对接外部接口,对方提供了一个sdk,开发中直接引入到项目中。自己只需要组装参数,直接调用sdk中的方法就可以直接调通对方接口,省去自己很多的开发量。sdk中包含了参数校验,加密验签,Http接口调用,还提供了各个接口入参和出参的实体类。...
2020-07-19 01:06:49 6022 3
原创 优雅的使用PageHelper分页工具类
一、前言平时开发中分页是一个很常见的功能,一般我们会选择一些分页插件,用的较多的是PageHelper,它可以让我们少些很多分页相关的代码。由于平时用的较多,结合自己的业务代码,写了一个工具类供大家参考。二、代码2.1 分页工具类package com.lh.utils;import com.github.pagehelper.Page;import com.github.pagehelper.PageHelper;import com.lh.entity.common.PageMode
2020-07-16 00:27:18 1530
原创 Mybatis实现批量新增的工具类
文章目录前言代码实现一、单数据源1.批量新增的工具类(BatchInsertUtil)2.调用演示3.获取SpringBean的工具类(SpringUtil )4.Mybatis的Mapper(CustDetailMapper )5.Mapper的xml文件二、多数据源1.找到对应的SqlSessionFactory2.新增一个批量新增的方法3.调用示例三、总结前言最近接了一个需求要把项目里的批量新增改掉,以前批量新增都是用Mybatis的foreach拼接的,生产环境由于list数据太多导致拼接的s
2020-07-13 22:46:17 1283
原创 【Java8新特性】Optional类详解及使用
文章目录一、前言1.1 null的原罪1.2 Optional类诞生二、Optional类介绍2.1 Optional类的方法2.2 方法详解2.2.1 创建Optional对象1)empty2)of3)ofNullable2.2.2 从Optional中获取值1)get2)orElse3)orElseGet4)orElseThrow5) ifPresent2.2.3 其他方法1) isPresent2)map和flatMap3)filter三、使用实例3.1 综合使用一、前言我们在开发过程中,遇到的最
2020-07-13 00:00:42 947
原创 Base64原理及Java中的使用
Base64介绍Base64是网络上最常见的用于传输8Bit字节码的编码方式之一。Base64就是一种基于64个可打印字符来表示二进制数据的方法。Base64不是加密算法,而是可读性算法。Base64目的不是保护数据,而是为了可读性。Base64是有64个字符组成,分别为 大写A-Z,小写 a-z,数字 0-9, 两个符号 +和/。Base58 一般是比特币里面的一种编码方式,比Base64 少数字0 小写字母o 大写字母I 也没有 + 和/。Base64原理B
2020-07-11 23:56:13 364
原创 SpringBoot+vue+shiro前后端分离开发整合部署详解
一、前言1.综合概述前后端分离项目越来越成为主流,目前应用较多的是前端为vue+elementUI 后端用SpringBoot。一般的管理系统都要有登录和权限管理的功能,这里选用Apache的Shiro做为项目的安全框架。它是一个非常易用的安全框架,提供了包括认证、授权、加密、会话管理等功能,与Spring Security一样属基于权限的安全框架,但是与Spring Security 相比,Shiro使用了比较简单易懂易于使用的授权方式。Shiro属于轻量级框架,相对于Spring Securit
2020-07-11 20:09:02 3982 1
原创 【Java】Java实现非对称加密(RSA算法)
1、 简介非对称加密算法又叫做现代加密算法非对称加密,有两个秘钥,一个公钥一个私钥.公钥和私钥是一对,叫做密钥对如果使用公钥加密必须使用私钥解密如果使用私钥加密必须使用公钥解密处理数据的速度较慢,因为安全级别高2、 对称加密算法的对比优点:其安全性更好,对称加密的通信双方使用相同的秘钥,如果一方的秘钥遭泄露,那么整个通信就会被破解。而非对称加密使用一对秘钥,一个用来加密,一个用来解密,而且公钥是公开的,秘钥是自己保存的,不需要像对称加密那样在通信之前要先同步秘钥。缺点:非对称加密的缺点
2020-07-05 21:57:31 778
原创 【Java】Java实现MD5、SHA-1、SHA-256、SHA-512加密
文章目录1 散列函数(也叫作hash函数)1.1 消息摘要1.2 特点1.3 常见算法1.4 代码实现1 散列函数(也叫作hash函数)1.1 消息摘要消息摘要(Message Digest)又称数字摘要(Digital Digest)。他是一个唯一对应一个消息或者文本的固定长度的值,它是一个单向的hash加密函数对消息进行作用而产生的。使用数字摘要生成的值是不可以篡改的,为了保证文件或者值的安全。1.2 特点无论消息有多长,计算出来的消息摘要的长度总是固定的。例如用MD5算法摘要的消息
2020-07-05 17:03:42 539
原创 【Java】对称加密DES和AES
文章目录前言1、 核心原理2、 特点3、 常见的加密算法4、 加密模式5、 填充模式6、DES加密实现7、AES加密实现前言对称加密,加密和解密用的同一个秘钥,也叫单密钥加密。1、 核心原理流加密和块加密流加密(序列密码):是对信息中的每一个元素(一个字母或者一个比特)作为基础的处理单元进行加密。例如:1234678 先加密1再加密2再见3,以此类推。块加密(分组密码):是先对信息进行分块,在对每一块分别加密。例如:1234678 先分块 分为 1234 和 5678 再先加密1234 再
2020-07-05 00:52:33 418
原创 【Java】Java实现凯撒加密解密及频度分析法破解
前言古典密码学的核心原理为替换法和移位法。其中替换法是将明文字母按照表单进行替换得到密文,解密时用密文根据表单进行替换获取明文。------例如:表单 abcde----->swtrp ,明文bee,将b替换成w,e替换成p 明文就变成了密文wpp移位法就是字母按照在字母表上的位置进行移位,最著名的就是凯撒加密------例如 abcde 往后移动两位 cdefg凯撒加密的破解方法为频率分析法。每种语言文字中字母的出现频率是有比例的,其中英文中出现频率最大的字母为‘e’, 频率分析法就
2020-07-04 20:04:49 1376
原创 【Java】Java中用redis生成每天从0开始的业务ID
场景业务场景是生成一个唯一主键,主键格式为 字母前缀 + 年月日 + 自增数字(位数固定每天从0开始)示例:TEST2020042900000015思路Redis Incr 命令将 key 中储存的数字值增一。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。利用redis的Incr方法实现自增的序列,由于每天都要从0开始,因此每天生成一个k...
2020-04-29 20:33:38 2338 4
原创 Oracle 用触发器实现主键自增及某列添加默认值
前言:Oeacle中有一张cust_info表, 主键是 ID(对应的sequence是 SEQ_CUST_INFO) ,新增时间字段是INPUT_TIME(date)。现在用触发器,实现新增一条记录是主键自动自增赋值,且INPUT_TIME字段默认赋值当前时间。sql如下-- /* * TRG_CUST_INFO:触发器名字 * CUST_INFO:表名字 * SEQ_CUST_IN...
2019-11-25 21:42:23 905 2
原创 Java多线程实现接口调用
前言有一张客户信息表,数据量很大。需要把这些记录调用某个接口(这个接口一次只能查询10个客户信息),然后把接口返回信息解析保存到另一个表里。客户信息表(cust_info)如下:idcust_idstatusremarkinput_timeupdate_tiem1201911110000012019-11-23 10:45:042019-11-23 10...
2019-11-23 19:37:24 12378 1
谷歌生成二维码插件qrgo_0.1.0.2.crx
2020-07-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人