- 博客(104)
- 资源 (2)
- 收藏
- 关注
原创 springboot 源码解析之 环境加载 配置文件加载
版本2.1.6此篇文章研究springboot环境的加载,包括系统变量的加载,配置文件的加载SpringApplication.run方法中prepareEnvironment 方法,这儿是开始准备环境的地方ConfigurableEnvironment environment = prepareEnvironment(listeners, applicationArguments)...
2019-11-28 15:43:33
597
原创 springboot 源码分析 内嵌式 tomcat 启动
springboot版本2.1.6研究一下springboot 是如何启动内嵌的tomcat 的首先找到springboot 自动配置时引入的类org.springframework.boot.autoconfigure.EnableAutoConfiguration=\org.springframework.boot.autoconfigure.web.embedded....
2019-11-25 22:14:15
450
1
原创 springboot 源码解析之ApplicationContextInitializer
springboot版本2.1.6ApplicationContextInitializer根据名字,这个类是springboot的初始化器,在容器启动时进行一些初始化的工作。首先提出三个问题1 ApplicationContextInitializer 是如何工作的,2 Springboot框架默认的初始化器都有哪些,他们都干了什么3 自定义一个ApplicationCo...
2019-11-22 16:05:52
366
原创 java语言Long/Double类型数据读写原子性测试
在32位的java虚拟中,Long,Double类型的数据写入主内存的动作并不是原子性的,所以在并发环境中可能会出现读取到一半的值的情况,先写一个程序来进行测试package com.demo;/** * @Description: Long类型的变量在32位虚拟机中的读写原子性测试 */public class LongRWIn32Demo implements Runnable...
2019-11-11 17:10:33
218
原创 springboot 源码解析之MVC
研究mvc 要搞清楚的几个问题1 springmvc 整体架构2 springmvc 初始化过程3 springmvc 是如何封装controller 的4 springmvc 是解析封装参数的5 springmvc 是如何封装结果的6 springmvc 拦截器是如何工作的问题1:架构一目了然。问题2:FrameworkServlet 是...
2019-07-31 17:53:56
338
原创 springboot 源码解析之监听器
事件发布的入口applicationContext.publishEvent(new BlackListEvent());实际上是AbstractApplicationContext 类的方法执行@Override public void publishEvent(ApplicationEvent event) { publishEvent(event, null...
2019-07-31 14:37:49
510
原创 java8时间工具类
package com.example.util;import org.apache.commons.lang.StringUtils;import java.time.Instant;import java.time.LocalDateTime;import java.time.ZoneId;import java.time.ZoneOffset;import java.tim...
2019-03-07 13:58:02
567
原创 错误日志:SpringBoot @autowired 注入为null
springboot整合了netty,将handler交与spring容器管理,在自定义的handler中使用了Service,企图使用依赖注入对应的组件,启动程序后发现注入为null,找了很多资料,最后得出结论;netty中使用的handler不是springboot容器创建的handler,故netty使用的handler无法自动注入service,如图,启动项目后这个Servic...
2019-02-15 09:21:14
3381
原创 深入学习 java jpa (一)实体关系
jpa是完全体对象关系映射的接口规范,其中实体关系分为@OneToOne, @OneToMany, @ManyToOne, @ManyToMany等下面的user实体,使用到了以上的各注解,分别维护了各种关系,构建好实体对象后,直接使用entitymanager进行各种操作即可。@Entity@Table(name = "user")@Datapublic class U...
2019-02-14 16:34:29
699
原创 java netty学习之(三)使用netty实现简单的RPC
dubbo的底层框架使用的就是netty,写一个netty的rpc小demo可以更好的理解对象在网络中的传输和netty的编解码器的使用。具体的实现思路是:1、定义一个ClassInfo包装类,将方法调用的必要条件进行封装,具体指接口名,方法名,方法参数,方法参数类型;2、服务端通过反射,将ClassInfo对应的方法执行并返回结果;3、客户端通过动态代理,构造Proxy,得到Se...
2019-02-10 12:28:17
538
原创 java netty学习之(二)网络通信的简单例子tcp长连接心跳机制
maven依赖 <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.25.Final</version> </dependency&
2019-02-08 13:15:26
620
原创 java netty学习之(一)简述
Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。通过使用netty,可以更好的聚焦到业务,而不必纠结于底层实现,netty提供了默认的包括心跳机制,编解码等handler可以直接使用,实现业务时只需要编写自定义handler即可完成操作;值得注意的是,netty5的两个版本已经不提...
2019-02-08 13:07:32
207
原创 java nio学习之(三)网络编程
服务端package com.example.demo.nioSocket;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.nio.chan...
2019-02-08 11:56:20
140
原创 java nio学习之(二)文件操作
本文展示使用nio操作文件的例子;package com.example.demo.file;import org.apache.commons.lang3.StringUtils;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.nio....
2019-02-08 11:52:35
256
原创 java nio学习之(一)简述
java nio是jdk1.4新增加的特性,之前的io成为bio,是阻塞式同步io -- blocking,他是面向流的,而nio 意思是非阻塞式同步io -- non-blocking IO 是面向通道channel和缓冲区buffer的。当然,很多同学也听说过aio 意思是非阻塞异步io -- Asynchronous io ,那么bio,nio,aio他们在模型上有什么区别呢?我在...
2019-02-08 11:47:12
150
原创 Springboot整合Socket长连接
Socket长连接的实现就是在通讯完后不关闭socket及输入输出/** * @author :zhaoyu * @date :Created in 2019/1/24 8:45 */@Data@Component@PropertySource("classpath:socket.properties")public class DelongServerSocket { ...
2019-01-25 14:26:06
27692
9
原创 代码重构概要
一、重新组织函数1、提炼函数,将一段代码放入独立的函数中,函数名称解释用途;这是最常用的重构手法;2、内联函数此方法与提炼函数相反,是将不必要的函数放进调用他的函数中,并将其删除;3、内联临时变量将对变量的引用操作,替换为对他赋值的那个表达式自身;4、以查询取代临时变量如果程序中以一个临时变量保存其一表达式的运算结果,将这个表达式提炼到一个独立的函数,将这个临时变量的所有引用替换...
2018-11-24 18:40:44
794
原创 内存泄漏排查
最近生产环境某项目突然崩溃,查看堆栈发现虚拟堆已经满了,查看配置,jmap -heap [pic]堆内存为2G,理论上应该是够用的,所以怀疑为内存泄漏,使用jmap -histo:live [pid]打印堆中的对象,发现无法打印,使用jmap -dump:format=b,file=filename.hprof [pid]导出hprof 文件,之后在HeapAnal...
2018-10-12 13:54:52
325
原创 数据库设计(实用技巧)
id 一般是bigint(12)code 一般是varchar(20)状态一般用int(1)如果考虑扩展性,可以使用int(11)日期一般是date时间一般是time创建时间和更新时间一般是datetime能使用int就是用int 因为创建索引的时候效率高很少使用char类型,因为占用空间,而且hibernate映射的时候如果是null 则会抛异常金钱一般使用dec...
2018-10-04 23:40:31
208
转载 java多线程协作Exchanger
一、简介 Exchanger是自jdk1.5起开始提供的工具套件,一般用于两个工作线程之间交换数据。在本文中我将采取由浅入深的方式来介绍分析这个工具类。首先我们来看看官方的api文档中的叙述:A synchronization point at which threads can pair and swap elements within pairs. Each thread prese...
2018-09-27 15:18:18
146
原创 java多线程协作CyclicBarrier
CyclicBarrier 字面意思是循环拦截器, 是java current包下的多线程协作的类, 创建此类必须出入一个 parties 值, 如果拦截的线程数达到 parties 值, 则会释放拦截的锁, 相关线程得以继续执行, 另外创建类对象时也可以在传入一个 Runnable 对象, 表示如果CyclicBarrier 达到释放锁的条件, 首先会开启 Runnable 线程 , 等此线程...
2018-09-27 14:48:42
168
原创 java多线程协作Semaphore
Semaphore的意思是信号量, 多线程中使用此类控制并发量, 常用的方法有acquire() 和 release() Semaphore没有空参构造, 创建对象时必须传入一个permits 值, 代表最大并发数; 当permits = 1 时 ,代表单线程下面看一个例子package _Semaphore;import java.util.concurrent.Executo...
2018-09-27 13:59:10
186
原创 java多线程协作CountDownLatch
CountDownLatch 是current 包下的常用的同步多线程行为的类, 构造中需要输入一个计数值, 当这个值不为零时, 执行 await() 的线程会阻塞, 线程每次执行 countDown() 方法都会是计数值减一;已多人赛跑为例, 建立多线程模型, 演示CountDownLatch 的功能package _CountDownLatch;import java.util....
2018-09-27 12:02:48
190
原创 java多线程类锁与对象锁的研究
静态方法上的同步锁使用的是当前类.class 作为锁对象,实际上是Class对象, 当使用勒种的同步静态方法时会受到类锁的影响,会出现锁的挣用, public synchronized static void eat() throws Exception非静态方法上的锁 , 默认使用的是对象本身 也就是this 作为同步锁, 与同步静态方法对应的锁不冲突;public synch...
2018-09-27 09:37:11
178
原创 jackson高级应用 2.9.x
基于jackson 版本 2.9.xjackson转换json xml 依赖的完整的jar 如果需要maven依赖, 可访问:http://mvnrepository.com/json转换主要类为objectmapper 对象转json的常用方法为writeValueAsString , 此类中以write开头的都是将对象转换成json的;json转对象常用的方...
2018-09-26 20:34:26
2725
原创 java多线程异常的捕获
在多线程中,如果子线程抛出了异常,在main中并不能捕获到;看一个例子package _Executors;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class ExceptionRunnable implements Runnable{ ...
2018-09-20 15:20:03
1546
原创 springboot之整合httpclient
springboot整合httpclient pom.xml 配置<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> ...
2018-09-16 18:38:43
2473
3
原创 springboot之整合log4j2
sprongboot使用的默认日志框架是Logback, 本文展示整合 log4j2 的操作;pom配置, 要将默认的logging去掉 , <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starte...
2018-09-16 14:39:51
337
原创 HttpClient学习之GET&POST
版本httpclient-4.5.3引入三个包, 下面展示一个工具类 , 可以实现简单的post与getpackage _HttpClient;import java.io.IOException;import java.net.URI;import java.util.ArrayList;import java.util.List;import java.util...
2018-09-13 19:55:25
154
原创 springboot之整合jackson
springboot默认配置json转换工具就是jackson, 本文介绍自定义各种配置的方法, 废话不多说 直接上代码配置文件:#jackson#日期格式化spring.jackson.date-format=yyyy-MM-dd HH:mm:ss#spring.jackson.date-format=yyyy-MM-dd#格式化输出 spring.jackson.seria...
2018-09-09 21:34:03
19412
3
原创 springboot之整合kakfa
springboot使用的是2.0.0 使用docker快速搭建环境请看上篇 深入学习docker之部署zookeeper与kafka引入pom依赖<dependency> <groupId>org.springframework.kafka</groupId> <artifactId>...
2018-09-09 20:19:43
372
1
原创 深入学习docker之部署zookeeper与kafka
使用 wurstmeister 下的zookeeper 与kafkadocker pull wurstmeister/kafkadocker pull wurstmeister/zookeeper 然后使用启动两个容器docker run -d --name zookeeper -p 2181:2181 -t wurstmeister/zookeeperdocker ...
2018-09-09 18:44:07
1550
1
原创 springboot之整合mongodb
使用springboot 2.x版本首先引入mongo依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId...
2018-09-03 21:34:40
146
原创 springboot之整合redis
使用springboot 2.0版本引入pom依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency&...
2018-09-02 11:51:04
111
原创 springboot之jpa高级查询
springboot的jpa可以根据方法名自动解析sql 非常方便, 只需要在 dao接口中定义方法即可;下面是一个 demopackage com.bus365.root.dao;import java.io.Serializable;import java.util.List;import org.springframework.data.jpa.repository.J...
2018-08-13 22:36:55
3083
原创 springboot之整合jpa
本文展示一个springboot通过jpa查询数据库的例子, springboot版本 1.5.9 首先引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</art...
2018-08-12 21:12:45
198
原创 springboot之热部署
在pom中添加配置 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> &
2018-08-12 12:53:38
88
原创 springboot之页面跳转thymeleaf
本文介绍springboot页面跳转相关的配置与方法首先在pom中添加配置 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </d...
2018-08-12 12:48:23
1224
原创 springboot之快速入门helloworld
本文介绍使用springboot快速搭建项目,并返回helloworld串环境 jdk 1.8 maven:3.3.9 springboot:1.5.9.RELEASE快速创建maven项目注意是jar类型的项目;创建完成后引入pom<parent> <groupId>org.springframework.boot</groupId>...
2018-08-12 12:29:11
183
原创 深入学习docker之入门
什么是docker Docker 是一个开源的应用容器引擎,可以将应用打包放置到不同的环境并运行,他可以解决环境,标准话,隔离等问题,随着多年的发展,docker已经成为主流开发技术,作为程序员不会点儿docker都不好意思出去打招呼; 本文介绍在windows 下docker的使用,以及常用命令; 下载地址:https://www.docker.com/docker...
2018-07-15 17:12:15
382
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人