- 博客(80)
- 资源 (5)
- 收藏
- 关注
原创 Spring Boot启动报错:Failed to configure a DataSource: ‘url‘ attribute is not 本质问题解析
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.本质解析
2021-12-28 10:36:44
1004
原创 自定义starter并与Spring boot完成整合
自定义starter与Spring boot完成整合在了解Spring boot自动配置及第三方starter整合(例如 mybatis-spring-boot-starter)的原理后,准备自己实现一个starter,并与Spring boot完成整合。1.首先回顾下mybatis-spring-boot-starter关键点的实现点击进入 mybatis-spring-boot-starter 依赖内部,有一个mybatis-spring-boot-autoconfigure依赖,关键配置文件sp
2021-12-16 20:44:29
735
原创 Spring boot自动配置及整合第三方框架的原理简析
Spring boot自动配置及整合第三方框架的原理简析 Spring boot与传统的Spring+SpringMVC相比优势在于它的自动配置,像Spring的监听器(初始化Spring容器)、SpringMVC的DispatchServlet以及一些相关的xml配置都不需要关心,现在我们简单解析下自动配置的原理。...
2021-12-14 16:18:46
1638
1
原创 HttpPost请求参数中文乱码问题;com.google.gson.Gson将json字符串转换为map,数值类型字段值改变
前几天帮助其他项目组做了一个API对接的项目,遇到了以下两个问题,在这里总结一下:1.HttpPost请求参数中文乱码问题2.Gson将json字符串转换为map,数值类型字段值改变一、HttpPost请求参数中文乱码问题项目中发送Post请求的工具方法如下:public static String doPost(String requestUrl, Object param) throws IOException { CloseableHttpClient httpClient = ge
2021-10-13 14:37:38
1132
原创 DashBoard----Hystrix熔断器监控仪表板的使用
DashBoard----Hystrix熔断器监控仪表板的使用被DashBoard监控需要满足两个条件:1.使用了Hystrix熔断器2.应用中引入的spring boot的健康管理依赖 actuator <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator<
2021-09-26 21:27:29
230
原创 SpringBoot项目构建为镜像并Docker部署(jar包和war包两种方式)
SpringBoot项目构建为镜像并Docker部署(jar包和war包两种方式)使用SpringBoot构建一个简单的web项目,用于docker部署测试@RestControllerpublic class HelloController { @GetMapping("/hello") public String hello(){ return "hello,docker"; }}一、jar包部署1.打jar包执行package,springbo
2021-08-20 14:27:03
1422
原创 Docker不同容器之间的网络访问
Docker不同容器之间的网络访问1.默认情况下使用Docker0作为路由器进行网络分配和通信Docker安装成功后,会安装一个docker0的网卡,由docker0分配网络和通信,整体流程图如下:从上图中可以看出,容器直接的通信不是直连的,而是通过docker0间接通信,docker默认使用的是桥接模式,每启动一个容器,docker0会自动分配IP地址给容器,例如:docker0的ip为172.17.0.1,则第一个启动的容器ip为172.17.0.2,后启动的容器依次类推。默认的docker0
2021-08-18 16:40:26
1919
原创 DockerFile制作自己的tomcat镜像
DockerFile制作自己的tomcat镜像1.DockerFile脚本#基础镜像FROM centos#镜像作者信息MAINTAINER liuhongfei<2411107785@qq.com>#安装jdk和tomcatADD jdk-8u144-linux-x64.tar.gz /usr/localADD apache-tomcat-8.5.69.tar.gz /usr/local#配置Java和tomcat的环境变量ENV mypath /usr/local
2021-08-15 17:15:48
279
原创 Docker卷挂载机制的使用(Docker部署mysql)
一、Docker部署mysql1.拉取mysql镜像2.在未设置卷挂载的情况下启动MySQL容器3.Navicat客户端连接mysql,并创建库,创建表4.删除mysql容器,再启动,发现新创建的库和表丢失Docker容器删除会造成容器内数据的丢失,所以我们需要想一个方法让容器内的数据能够持久化,由此出现了docker数据挂载的机制二、Docker卷挂载机制其基本原理是将宿主机上的文件或者目录与容器内的文件或者目录进行挂载关联,实现实时读写持久化docker挂载语法有两种,-v和–m
2021-08-04 16:49:25
517
1
原创 Docker部署Tomcat(注意tomcat的容器端口,宿主机端口以及外网访问端口的关系)
Docker部署Tomcat1.从Docker仓库拉取Tomcat镜像,不指定版本的话默认拉取最新版本2.运行镜像,启动容器docker run -d --name my_tomcat -p 8080:8080 tomcat-d:后台运行–name:指定容器别名-p:指定容器端口和宿主机端口映射关系这里需要注意:容器和宿主机是相互隔离的,宿主机是不能直接访问容器内的应用的,需要配置端口映射8080:8080---- 宿主机端口:容器tomcat运行端口在宿主机访问本机的8080端口会
2021-08-04 15:01:51
3315
1
原创 Linux下Docker的下载和安装(CentOS)
1.使用docker -v或者docker version检查是否已安装了docker,已安装的话请先卸载yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrota
2021-08-04 11:14:37
2481
原创 ElasticSearch实现高亮、范围查询和多条件组合查询(java和kibana)
ElasticSearch客户端配置参考之前的博客1.高亮高亮的本质其实是将搜索结果中需要高亮的字段进行替换public List<Map<String,Object>> searchHighLight(String keyWord,int currentPage,int pageSize) throws Exception{ List<Map<String, Object>> list = new ArrayList<>()
2021-07-25 19:50:24
1487
原创 爬虫京东数据作为索引库,模拟分页搜索
1.创建索引库index_one,并指定字段类型和使用IK分词器/** * 创建索引(索引库) * * * kibana返回结果 * * * PUT /test * * { * "acknowledged" : true, * "shards_acknowledged" : true, * "index" : "test" * } * */@Testpublic void createIndex() throws Exception{ CreateIn
2021-07-23 21:11:09
331
原创 Spring Boot整合ElasticSearch实现索引和文档的CRUD(与Kibana语法结合)
1.创建SpringBoot项目,pom文件如下:<?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.0.0 https://maven.
2021-07-21 19:26:36
207
1
原创 基于SchedulingConfigurer实现多定时任务注册及动态修改执行周期
基于SchedulingConfigurer实现多定时任务注册及动态修改执行周期Java中实现定时任务有三种方式:1.JDK自带的Timer2.Spring中的Spring Task3.借助第三方的Quartz工作中常用的是Spring Task和Quartz,今天主要用一下Spring Task。Spring Task有两种实现方式:1.@Scheduled(cron表达式)2.基于SchedulingConfigurer注册定时任务这两者的区别主要有1.@Scheduled不支持动态
2021-05-25 19:11:08
7986
10
原创 ArrayList、LinkedList、HashMap、HashTable集合源码分析
ArrayList、LinkedList、HashMap、HashTable集合源码分析JDK1.8和JDK1.7及以下 两个版本中集合类区别还是很大的,所以就按这两个版本来说一、ArrayList1.JDK1.8和JDK1.7及以下版本中,ArrayList集合底层都是由数组实现,不同的是默认长度2.JDK1.8中,在不指定集合长度时,默认长度为0,只有在添加第一个元素的时候,集合长度才会变为10private static final Object[] DEFAULTCAPACITY_EMPT
2021-04-10 15:46:56
147
原创 JDK1.8新特性之Lambda表达式及List.forEach()的使用
JDK1.8新特性之Lambda表达式Lambda表达式是对函数式接口的实现,本质是一个匿名函数,从字面理解匿名函数,就是一个没有方法名的函数,类似于这样(){}那么什么是函数式接口呢?一个接口有且仅有一个方法需要被实现类实现,那么这个接口就是函数式接口,例如public interface Action { void say();}这个就是一个函数式接口,接口内只有一个抽象方法,它的实现类也只需要实现这一个方法...
2021-04-10 10:56:20
1307
原创 Redis Cluster集群模式搭建过程想法记录
Redis Cluster集群模式搭建过程想法记录 Redis三种集群模式的介绍、各自的特点及Cluster集群模式的搭建在博客https://blog.csdn.net/qq_34944535/article/details/106787640中已经讲的非常详细,在此不再赘述。重点记录下我在搭建Cluster集群中想到的问题及实践过程 C
2021-04-03 20:27:44
72
原创 对Redis高并发的理解
对Redis高并发的理解 毕业工作两年多了,一直没有接触过高并发的项目,即便是现在接触的集群项目,也几乎涉及不到高并发的处理,希望在以后的工作中能够接触并学习。 项目中用到了Redis+哨兵的集群,用来缓存会话和数据信息,因为使用场景的问题,也几乎涉及不到高并发,想学习,所以今天看了看Redis高并发下的问题,有些博客看得我自己都有些矛盾:首先Redis是单线程的,
2021-03-25 19:49:26
154
原创 验证码生成之Captcha(接上篇博客)
验证码生成之Captcha(接上篇博客)今天看了下新项目中验证码的生成,主要是想知道和旧版本项目的区别。新项目中验证码的生成使用了Captcha,上代码一步步看一、验证码的生成前端Vue发起生成验证码的请求,后端代码中使用SpecCaptcha直接生成四位数的验证码,以UUID为key,以验证码为value,设置超时时间,存储到redis中,并将验证码、key返回给前端。二、验证码的校验前端提交表单,后台接收到key以及页面用户输入的验证码,通过key从redis中获取到对应的验证码,若
2021-03-23 20:20:16
745
原创 验证码生成之Jcaptcha源码分析,
验证码生成之Jcaptcha今天看了下之前项目的验证码生成逻辑,发现使用的是Jcaptcha,很好奇验证码生成后是存储在哪里的,所以Debug研究了下源码,从头说吧。一、验证码的生成及存储1.页面如何展示验证码的页面通过请求/pub/jcaptcha.servlet地址,生成验证码,找了下这个地址,发现是最简单的servlet请求,配置在了web.xml中,如下所示:随即进入对应的类ImageCaptchaServlet2.验证码逻辑处理类ImageCaptchaServlet如上图所示
2021-03-22 20:18:08
554
原创 MyBatis Plus的主键生成策略及fill自动填充
MyBatis Plus的主键生成策略及fill自动填充 最近系统学习了MyBatis Plus,他是MyBatis的增强工具,只做增强,不做改变(国产框架哦),与MyBatis最主要的区别在于基础性的CRUD操作被封装,原来的Mapper接口只需要继承BaseMapper,就可以实现基础的增删改查操作,如下:其他印象比较深的功能有两个:Mybatis Plus的主键生成策略以及fill自动填充功能一、Mybatis
2021-03-10 20:16:53
2879
2
原创 Zookeeper的事务性请求之后台日志分析
Zookeeper的事务性请求之后台日志分析客户端发送事务性请求到Zookeeper集群,集群中任何一台接收到,都会将该事务性请求转发给Leader,由Leader通过原子广播给其他服务器进件事务持久化操作,超过半数以上的服务器返回事务执行成功,则该事务请求操作完成后。自己在本地测试了下,发现日志如下1.Leader节点2021-02-25 15:05:39,007 [myid:2] - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2182:NIOServe
2021-03-04 17:28:55
526
1
原创 Zookeeper修改日志打印到指定目录(亲测有效)
Zookeeper修改日志打印到指定目录(亲测有效) 最近在搭建Zookeeper集群,zookeeper启动失败,想查看日志,发现日志在bin目录下的zookeeper.out文件中,因为搭建的是集群,所以想把日志文件放在统一的目录下,并且每个服务器的日志文件名称不同,在conf目录下看到有log4j.properties文件,便修改了各个服务器的如下配置:zookeeper.log.file=zookeeper1.logzook
2021-03-03 14:41:27
506
原创 SpringMVC防止表单重复提交(拦截器实现)
SpringMVC防止表单重复提交(拦截器实现) 之前项目中在表单提交的时候由于网络原因造成响应慢,用户会重复点击,造成新增或修改时数据库产生脏数据,首先想到的解决方式就是在表中加索引,但是由于业务需求,加索引不太合适,便选择了使用SpringMVC的拦截器实现防止表单重复提交的方式解决。实现思路:1.自定义注解PreventRepeat,标注表单提交的后台处理方法上,方便拦截器选择性处理2.自定义拦截器类Repeat
2021-02-19 15:47:57
556
1
原创 RocketMQ发送顺序消息
RocketMQ发送顺序消息如何实现rocketMQ的顺序消息呢?默认情况下生产者发送消息到broker,broker中一个Topic默认有四个队列,消息会被随机分配到各个队列上,消费者消费消息也需要从各个队列上取,并且如果消费者是多个线程的话,更不能保证消息的顺序消费。从生产者、消费者的角度来看,生产者发送消息时把消息发送到同一个队列,消息者消费消息时只用一个线程消费,队列又是先进先出的,这样就满足的消息的顺序消费。总结下:1.生产者发送消息时发送到同一个队列2.消费者使用单线程消费3.队列
2021-01-28 17:24:03
353
原创 RocketMQ消息发送结果状态SLAVE_NOT_AVAILABLE
RocketMQ消息发送结果状态SLAVE_NOT_AVAILABLE接上一篇博客《RocketMQ集群搭建(2m-2s-sync)及搭建中遇到的问题》,使用测试代码发送同步消息,返回结果SendResult中的消息状态sendStatus为SLAVE_NOT_AVAILABLE,从节点不可用。从节点不可用,再结合集群的原理图,大致可以想到应该是生产者发送消息到broker主节点,主节点与从节点完成数据同步的时候出现了问题,,查看相关资料,最终定位到了brokerIP上。上篇博客有说到过,198.1
2021-01-28 15:03:26
2852
原创 SpringBoot配置Redis哨兵模式
SpringBoot配置Redis哨兵模式 所谓哨兵模式,其实是一个伪集群,即便是在多个哨兵的情况下,哨兵监控的都是同一个主节点,也就是一主多从的模式。 SpringBoot配置哨兵模式,只需要配置哨兵的IP和端口,不需要配置主从节点的信息,当主节点挂掉后,哨兵会自动完成主从切换,直接上代码@Configurationpublic cla
2021-01-28 09:47:58
2280
原创 RocketMQ集群搭建(2m-2s-sync)及搭建中遇到的问题
RocketMQ集群搭建(2m-2s-sync)及搭建中遇到的问题 在学习一门技术之前,首先应该弄明白这门技术的使用流程或者说是运行流程,这样在代码开发、环境搭建上都会有很大的帮助,首先我们梳理下2m-2s-sync的原理图,如下:1.各个角色及功能(1)Producer生产者:生产并发送消息(2)Consumer消费者:消费处理消息(3)Broker:消息存储,生产者发送消息到broker,同时broker可完成消息的持久化
2021-01-23 17:25:06
693
原创 清除JSP中input输入框的缓存
清除JSP中input输入框的缓存多数浏览器默认会缓存input输入框的值,只有使用Ctrl+F5强制刷新才可以清除缓存记录如果不想让浏览器缓存input的值,有两种方法:(1)在不想使用缓存的input中添加autocomplete=“off”,例如:<input type="text" name="name" autocomplete="off"/>(2)在input所在的form标签中添加autocomplete=“off”;例如:<form action="###"
2021-01-16 15:28:26
1529
1
原创 Redis的哨兵模式
Redis的哨兵模式 单纯的主从复制,一主一从或一主多从,当主节点挂掉后,从节点无法晋升为主节点,而从节点又是只读的,导致redis无法使用,所以需要配置成哨兵模式 哨兵模式:其对应的配置文件为sentinel.conf,其中 sentinel monitor mymaster 198.1.245.202 6381
2021-01-12 20:07:04
223
原创 redis的主从复制(全量复制、部分复制)
redis的主从复制redis主从复制指将一台redis服务器的数据复制到其他redis服务器,前者称为主节点(master),后者称为从节点(salve),数据的复制是单向的,只能从主节点到从节点默认情况下,每台redis服务器都是主节点,添加从节点配置后才会变成从节点,一个主节点可以有多个从节点,一个从节点只能有一个主节点。从节点配置:在redis.conf文件中,添加配置 slaveof 主节点IP 主节点port主从复制除了实现数据同步复制外,还实现了数据的读写分离,主节点负责写,从节点负责
2021-01-12 17:45:04
468
原创 RedisUtil工具类
RedisUtil工具类简单写了一个RedisUtil工具类,供大家参考package com.ssm.service;import com.alibaba.fastjson.JSON;import com.ssm.entity.LoanInfo;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.core.RedisTemplate;impor
2021-01-11 22:05:03
444
原创 redis的内存淘汰机制
redis的内存淘汰机制在学习redis的过期key删除策略时,了解到redis有一种内存淘汰机制,趁有时间就学习了下。在redis配置文件redis.conf中有如下配置: maxmemory:数据占用内存最大值,单位字节,默认没有限制 maxmemory-policy:达到最大值时采用的内存淘汰策略,默认值为noevictionredis.conf中对这两个配置已经解释的很详细了,具体如下# redi
2021-01-10 19:53:19
85
原创 Redis过期key的删除策略
Redis过期key的删除策略 使用redis desktop manager操作redis,当键值对过期后,再使用get命令获取时,键值对已经不存在了,当时产生疑虑,是redis自动删除了吗?如果是的话是过期立马就删除吗? 之前用Shiro+SSM写过一个项目,shiro中的session是保存在内存中的,shiro可以配置类似定时任务来检查session是否过期并进行删除;后来
2021-01-08 22:28:10
330
原创 Redis持久化方式RDB、AOF详解
Redis持久化方式RDB、AOF详解 之前已经写过一篇博客大概介绍了什么是RDB、AOF持久化,今天自己在本地搭建redis环境并实践了两种持久化方式。持久化文件保存的路径在配置文件中的dir进行配置,默认为./ 当前路径下1.RDB持久化 RDB快照方式(默认的持久化方式):通过设定指定时间段内的key值变化数量来触发redis的快照存储,一次性将内存中的所有数
2021-01-07 22:58:06
52
原创 List<T>、List<?>、List<Object>的区别
List、List<?>、List的区别List:集合中的元素类型为T类型,也就是常说的泛型,如果是T类型之外的类型进行存储,则编译会报错,元素可读可写(可以调用add()和remove()方法)。List<?>:集合中的元素类型为任意类型,但只可读(不能调用add()方法)。List:集合中的元素类型为Object类型,也可以说是任意类型,因为Object是所有类的父类,基本数据类型需要转换为包装类(java可以完成自动装箱,此步骤可以忽略)。...
2020-12-15 20:25:25
897
原创 联合索引的最左原则
联合索引的最左原则对表中col1、col2、col3创建一个联合索引,实际上建立了三个索引col1、(col1,col2)、(col1,col2,col3),最左原则简单来说即一定要有最左边的列,单独使用col2和单独使用col3联合索引都不会生效。...
2020-12-10 16:51:28
199
原创 shiro整合redis实现session共享
shiro整合redis实现session共享 通过nginx实现负载均衡后,同一客户端的请求会被分配到不同的服务器,减少了单机模式下服务器的压力,但同时也带来了问题,用户第一次访问服务器后,session保存在了一台服务器,之后再次请求,若nginx将请求分配到其他服务器,其他服务器根据cookie中的sessionId找不到对应的session,用户就需要重新登录。 &nb
2020-12-04 16:08:07
1641
原创 shiro中MemorySessionDAO源码解读
shiro中MemorySessionDAO源码解读shiro中通过sessionDao来实现对session的持久化,简单的说就是CRUD.SessionDao是最顶层的接口,AbstractSessionDAO实现了简单的CRUD操作,AbstractSessionDAO的子类MemorySessionDAO将session保存在了内存中,适用于单机模式下的应用,下面简单看下MemorySessionDAO的源码,private ConcurrentMap<Serializable, Ses
2020-12-01 20:07:21
737
1
vue安装包式插件.zip
2021-03-22
根据主键查找sql语句Java代码实现
2021-01-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人