自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(81)
  • 资源 (3)
  • 收藏
  • 关注

原创 tkinter复选框选择后无效

tkinter可以定义复选框进行操作,如:def __init__(self): self.root = Tk() self.status = IntVar() Checkbutton(self.root, variable=self.status, command=self.func).place(x=100, y=30) self.root.mainloop(...

2019-09-22 21:49:14 757 3

原创 从零学spring boot-集成redis时未使用连接池的问题

在之前spring boot集成redis的文章中曾今指出如果没有配置redis连接池的信息(即使存在默认的连接信息),那么在使用redisTemplate的时候,是不会使用连接池的。这一篇文章我们将从源码中分析这其中的原因。首先我们需要看一下redisTemplate获取redis连接的源码://redisTemplate获取连接实际上是通过JedisConnectionFactory来获取...

2019-09-21 12:26:01 958

原创 从零学spring boot-集成redis

添加依赖<!-- spring boot2.0后,默认使用的redisConnectionFactory为LettuceConnectionFactory,这里想要继续用jedis,就做个exclusion --><dependency> <groupId>org.springframework.boot</groupId> &l...

2019-09-21 12:25:25 201

原创 spring boot2.1后的版本不打印Mapped日志问题

spring boot项目启动时候会打印对外提供的rest接口的Mapped的信息,但是有的时候会出现不打印的情况,那是因为spring boot的版本是2.1以上了,源码做了一定的修改。解决方案解决方案很简单,只需要在application.properties中添加以下配置即可:logging.level.org.springframework.web=trace问题出现的原因我们...

2019-09-21 12:24:45 2163

原创 从零学nginx-windows下reload配置无效及如何重启

在windows环境下安装的nginx,如果修改了配置,想要通过nginx -s reload去刷新配置,会发现很多时候都是无效的,这个时候我们就需要重启,但是nginx是master,work模式,所以会存在多个进程的情况,当我们关闭掉work进程后,master会开启另一个work进程,所以会有点烦,通过以下指令,我们可以直接关闭掉所有的nginx进程:taskkill /IM nginx...

2019-09-21 12:23:56 4032

原创 从零学nginx-配置反向代理

nginx反向代理工作方式nginx作为方向代理服务器,其工作方式有两个点需要注意:当转发请求的时候,nginx会接收完所有的请求数据,再去转发请求。在响应的时候,nginx是一边接收响应数据,一边将响应数据返回给客户端的。配置upstream配置示例:upstream testUrl{ #ip_hash; server 服务器1 #weight=5 max_...

2019-09-21 12:23:23 161

原创 从零学nginx-root,alias,index

1. rootroot模块就是用来指定访问资源的document_root,nginx会将root的值和location的值进行拼接,然后再拼接上url剩余的部分及index指定的值,举例:location /a/{ root /usr/local; index 1.html;}访问结果如下:/a --> /usr/local/a/1.html/a/...

2019-09-21 12:21:43 1937 1

原创 从零学nginx-location配置及匹配规则

1. 配置语法1.1. =: 严格匹配,只有完全一样的才能匹配上,这里有一些要注意:1. 严格匹配如果需要匹配一个文件的时候,需要将路径具体到这个文件,不能使用index进行拼接2. 如果匹配的是一个文件夹,在最后最好要加一个/(浏览器会为你的url添加一个/,导致匹配不上),否则会4041.2. 无修饰符: 最大前缀的匹配,和配置文件中的顺序无关,取匹配度最高的配置,例如:locat...

2019-09-21 12:21:06 237

原创 从零学nginx-安装nginx

1. 安装前的准备1.1. 环境linux2.6以上的版本,因为只有2.6以上的版本才支持epoll,可通过uname -a查看版本1.2. GCC编译器nginx在1.2.x一下的版本是不支持二进制文件直接安装的,所以可能需要使用GCC编译器对nginx的源码进行编译,安装指令:yum install -y gcc1.3. pcer库该库支持正则表达式,如果在nginx.conf...

2019-09-21 12:20:19 153

原创 redis运行lua脚本

1. 在客户端直接运行脚本内容1.1. 执行脚本格式:eval "脚本内容" key的个数 key... arg...其中key和arg都是变长参数例如: eval "return 1" 0 eval "redis.call('SET', KEYS[1], ARGV[1])" 1 key value1.2. 加载脚本语法:script load "脚本内容"例如:...

2019-09-21 12:19:15 175

原创 linux下安装redis

1. 下载redis资源下载链接:redis下载,并上传到linux,或者直接是wget在linux上进行下载,这里我下载的是redis-4.0.14.tar.gz2. 解压资源tar -zxvf redis-4.0.14.tar.gz3. 编译安装cd redis-4.0.14makecd srcmake install PREFIX=/usr/local/redis在运行...

2019-09-21 12:18:33 76

原创 jxl操作excel很慢的问题

jxl是操作excel常用的工具,但是有的时候我们会发现当使用jxl读写excel的时候会很慢,就像卡住了一样。通过分析,我们发现是workbook对象进行close的时候,会有很长时间的停顿,进入close方法源码:public void close(){ if (lastSheet != null) { lastSheet.clear(); } ...

2019-09-21 12:17:50 939 1

原创 如何将excel中的日期和数字转换成文本

当我们使用程序读取excel文件的时候,如果读取日期或者数字数据的时候,总是会遇到将日期转换成一个5位数字,将数字添加.0等情况,遇到这类情况我们就需要在程序中做特殊处理了,下面我们使用通过操作excel将其数据转换成text,无需修改程序的方法。1. 将需要处理的数据选中2. 设置单元格格式,选择我们要的显示类型,例如我们需要日期格式,我们就在自定义中选择我们想要的格式3. 选中数据复制...

2019-09-21 12:16:36 2945

原创 rabbitmq接收控制台发送的消息为一个字节字符串的问题

rabbitmq的控制台可以直接向指定队列发送消息,很方便我们在开发消费者的过程中进行调试,当我们在rabbitmq指定的queue中发送一条消息时:而我们的接收端收到的消息却不是“我是中国人这段字符串”,而是它的字节字符串:-26,-120,-111,-26,-104,-81,-28,-72,-83,-27,-101,-67,-28,-70,-70这明显是不符合我们的预期的,经过查看生...

2019-09-03 09:18:37 5350 2

原创 解决windows下Error:node with name "rabbit" already running on “XXX” 和管理页面打不开问题

背景:重启电脑后,发现rabbit的控制台页面无法打开,启动rabbit,抛如下异常:Error:node with name "rabbit" already running on “XXX”这个是因为rabbit已经启动了,不能再次启动,通过tasklist指令,发现进程是存在的:tasklist | find /i "erl"如果有结果,那么说明已经启动了,通过任务管理器kill...

2019-09-02 12:44:41 14980 6

原创 mybatis的批量insert和update

批量insert<insert id="batchInsert" parameterType="java.util.List">insert into 表名(字段1,字段2,字段3……)values<foreach collection="list" item="item" index="index" separator=","> (#{item.字段1,jd...

2019-09-02 12:43:40 1455

原创 spring源码-messageSource和监听器的初始化

这一节我们来看一下容器启动时messageSource的初始化和监听器的初始化。这一节主要的源码分四块:initMessageSource();initApplicationEventMulticaster();onRefresh();registerListeners();其中onRefresh方法是留给用户自定义的,所以这里主要看一下其他三个方法的源码。initMessageS...

2019-08-31 11:27:41 1676

原创 spring源码-4.注册bean的后处理器

执行完beanFactory的后处理器后,在实例化beanDefinition前,我们需要将bean的后处理器注册到容器中,这样才能在实例化beanDefinition的时候去执行这些后处理器。首先我们来看一下这个方法的入口(AbstractApplicationContext):protected void registerBeanPostProcessors(ConfigurableLis...

2019-08-31 11:27:05 1287

原创 spring源码-3.beanFactory后处理器

上一节我们已经讲完了beanFactory是如何初始化,并且是如何将需要注入到容器中的bean的beanDefinition注册到beanFactory中的。这一节我们再来看一下beanFactory的后处理器是如何运行的。这里从初始化完beanFactory到beanFactory的后处理器的执行有三步:beanFactory的准备工作自定义方法对beanFactory中的后处理器在执行...

2019-08-31 11:26:06 1317

原创 从零学spring boot-springboot集成swagger

日常开发中,前后端的开发联调都需要定义一个接口文档,定义接口文档是比较耗时的,这边推荐一款插件来根据接口来自动生成接口文档,并且会根据接口的变化而自动更新,解放一部分开发人力。spring boot集成swagger非常简单,只需要以下四步:1. 引入swagger依赖<dependency> <groupId>io.springfox</groupId&...

2019-08-26 17:22:33 1251

原创 spring源码-2.3.自定义标签的解析

上一节已经详细的看了一下默认标签的解析了,这一节我们来看一下自定义标签是如何解析的。首先,来看一下自定义标签解析的入口方法,delegate.parseCustomElement(ele):public BeanDefinition parseCustomElement(Element ele, @Nullable BeanDefinition containingBd) { //根据...

2019-08-25 20:07:23 1285

原创 spring源码-2.2.默认标签的解析

上一节中,我们详细分析了spring在解析xml,创建beanFactory的前期准备工作,这一节我们将会详细分析一下spring是如何解析系统默认标签的。首先进入解析默认标签方法的入口,parseDefaultElement(Element ele, BeanDefinitionParserDelegate delegate):private void parseDefaultElement...

2019-08-25 20:06:49 1312

原创 spring源码-2.1.解析xml准备

这一节我们来看一下obtainFreshBeanFactory都做了什么,这个方法主要就是创建了BeanFactory:protected ConfigurableListableBeanFactory obtainFreshBeanFactory() { //创建BeanFactory refreshBeanFactory(); //返回BeanFactory return ge...

2019-08-25 20:06:15 1225

原创 spring源码-1.容器刷新前准备

这一节我们来看一下prepareRefresh方法都做了什么。首先看一下这个方法的源码:protected void prepareRefresh() { //记录开始时间 this.startupDate = System.currentTimeMillis(); //设置状态 this.closed.set(false); this.active.set(true); //这...

2019-08-25 20:05:39 1404

原创 spring源码-xml解析概述

我们都知道ApplicationContext就是spring的容器,下面我们来看看spring容器是如何启动的。首先我们来看一下查看的源码的一些背景:spring版本:spring5启动的xml内容:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/sc...

2019-08-25 20:05:01 1334

原创 推荐几款Intellij IDEA好用的插件

以下几款插件是我在开发中常用的,非常方便 ,这里分享一下。1. Free Mybatis plugin作用:再也不需要手动去寻找dao方法中对应的sql的xml的位置了,和正常的代码跟踪一样了。2. MyBatis Log Plugin作用:将sql语句完整的打出来,再也不需要我们自己手动去填写参数了使用方法:安装完成后,在tools中打开该插件的窗口,在运行程序的时候,就会将sql...

2019-08-21 09:23:35 1367

原创 从零学springboot—— Conditional系列注解

1. @Conditional首先来看一下@Conditional注解的源码:@Target({ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Conditional { Class<? extends Conditio...

2019-08-17 16:02:58 1389

原创 从零学springboot—— 如何在junit测试中只mock一部分类

假设有一个类A,我们要对其进行测试:class A{ private B b; private C c; @Value("${str}") private String str;}如果我们想要mock调对B和C的调用,那么我们在测试类中只要这样写即可:@InjectMocksprivate A a;@Mockprivate B...

2019-08-17 16:02:05 2128 1

原创 reentrantLock公平锁和非公平锁源码解析

ReentrantLock非公平锁源码分析ReentrantLock lock = new ReentrantLock();lock.lock();上面这段代码是最简单的获取ReentrantLock的非公平锁的代码,我们来看看这段代码后面的源码是如何运行的。final void lock() { //首先尝试看看能不能获取到锁,如果CAS成功,那么就获取到了 if (compa...

2019-05-22 19:50:09 5173

原创 深入理解synchronized实现原理

四种锁状态无锁状态偏向锁轻量锁重量锁JVM是如何来识别锁状态的synchronized关键字是一个对象锁,锁的状态以及谁持有锁,都是记录在这个对象中的,首先我们来看一下一个对象在内存中是如何组成的。从上图可以看出,一个对象的对象头中除了指向该对象的Class对象的指针和数组长度(如果对象为数组,会记录数组的长度)外,还有一个Mark Word。这个Mark Word中主要存储的...

2019-05-21 16:31:34 1362

原创 ArrayList和LinkedList的对比

List数据结构在实际开发中是非常常见的,其中Arraylist和LinkedList又是这种数据结构中最常见的,本篇文章将会从不同角度来记录讲解这两种list的实现方式及优缺点,以及在实际开发中该如何去选择

2019-04-13 12:38:21 1421

原创 如何动态修改docker的端口映射

docker的端口映射关系一般是在将镜像打开成容器的时候通过参数p来设置的,但是如果我们需要对已经在运行的容器进行端口映射的添加,那么就需要将容器从新打成镜像(可能对容器进行了修改),然后再转换成容器,这样就比较笨重,下面介绍一种通过修改配置的方式,动态的去修改docker容器的端口映射。动态修改docker的端口映射很简单,只需要以下五步:...

2019-01-05 15:29:39 5267

原创 Idea破解--将IntelliJ IDEA license server服务器安装至linux

下载IntelliJ IDEA license server编写启动脚本vi /etc/systemd/system/intellij-license.service[Unit]Description=Intellij license server[Service]ExecStart=/var/local/software/IntelliJIDEALicenseS...

2018-06-25 17:43:25 2223

原创 异常:getReader() has already been called for this request

一个流不能读两次异常,这种异常一般出现在框架或者拦截器中读取了request中的流的数据,我们在业务代码中再次读取(如@requestBody),由于流中的数据已经没了,所以第二次读取的时候就会抛出异常。解决方案:定义一个过滤器将流中的数据读取到一个数组中,并重写getInputStream()和getRead()方法,后续获取流中的数据的时候,直接去数组中读取,代码实现如下:clas...

2018-06-14 17:06:45 18378 2

原创 从零学springboot—— springboot集成junit测试

在日常的开发中,使用junit测试是必不可少的,下来我们来学习下,在springboot中如何使用junit测试。导入测试所需要的依赖:&lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-test...

2018-06-14 14:03:56 4966 1

原创 使用python实现http及ftp服务进行数据传输

服务器之间的http数据传输直接使用python内置的http服务:python -m SimpleHTTPServer 8000此时,输入指令的目录就已经开启了http服务,8000为端口(如不指定,默认为8000),如果我们需要在其他机器下垃取该目录下的文件,只需在目标机器运行:wget ip:port/文件名速度杠杆的。开启ftp上传文件安装ftp的py...

2018-06-05 13:04:20 2994

原创 从零学springboot—— servlet,过滤器,监听器,拦截器

自定义servlet@WebServlet(urlPatterns = "/myServlet/*")public class MyServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) { ...

2018-05-25 18:24:17 1830

原创 从零学springboot—— 配置druid数据源,并开启监控

导入依赖&lt;dependency&gt; &lt;groupId&gt;com.alibaba&lt;/groupId&gt; &lt;artifactId&gt;druid&lt;/artifactId&gt; &lt;version&gt;1.0.18&lt;/version&gt;&lt;/dependency&gt;添加配置

2018-05-25 15:18:48 1600

原创 从零学springboot—— springboot集成jsp

导入依赖&lt;dependency&gt; &lt;groupId&gt;javax.servlet&lt;/groupId&gt; &lt;artifactId&gt;javax.servlet-api&lt;/artifactId&gt; &lt;scope&gt;provided&lt;/scope&gt;&lt;/dependency&amp

2018-03-18 18:37:06 1335

原创 从零学springboot——将springboot项目打成jar包并部署

当我们开发完成一个spring boot项目后,是需要将其打包,并且部署到linux服务器上的,这里介绍以jar包的方式部署。将项目打成jar包对pom文件中的maven插件进行扩展&lt;build&gt; &lt;plugins&gt; &lt;plugin&gt; &lt;groupId&gt;org.springframewor...

2018-03-18 13:49:53 5661 4

ssm框架搭建

ssm框架的搭建示例,直接下载即可运行,最基本的配置已经配好

2017-11-04

eclipse启动时间插件

将该资源复制到eclipse的plugins文件夹下即可,当启动eclipse的时候,就会跳出一个窗口,显示这次eclipse启动一共花费了多少时间。

2017-09-03

java内存分析工具

java内存分析工具

2017-08-19

空空如也

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

TA关注的人

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