java
java圈
熟悉spring、springboot、springcloud、设计模式、ddd思想
展开
-
缓存的基础知识,你们都了解了吗?
1、什么是缓存?1.1、定义存储在计算机上的一个原始数据的复制集,以便于访问。缓存是介于数据访问者和数据源之间的一种高速存储,当数据需要多次读取的时候,用于监控读取的速度。缓存是有读操作...原创 2020-07-07 07:58:13 · 1262 阅读 · 0 评论 -
设计原则之依赖倒置
依赖倒置简介我们经常在框架开发过程中听说依赖倒置、依赖反转、控制反转、依赖注入、IOC一些名词,我们常听的这些名词和开发设计原则中的依赖反转原则是有关系,我们来看看这几个名词:控制反转(...原创 2020-06-14 11:36:17 · 389 阅读 · 0 评论 -
框架设计之设计模式
来源于架构师训练营第三章,总结。我们都知道设计模式和基础设计原则是架构师掌握的基础知识,就是学java的人掌握java语法一个道理,那我们在日常开发工作中又怎么对待设计模式呢?我们会刻意...原创 2020-06-22 08:00:00 · 534 阅读 · 1 评论 -
Daemon线程
1、简介Daemon线程是一种支持类型的线程,因为它主要被用作程序中后台调度以及支持性工作,这意味着,当一个java虚拟机中不存在非Daemon线程的时候,JAVA虚拟机将会退出,可以通过调用Thread.setDaemon(true)将线程设置为Daemon线程注意:Daemon属性需要在启动线程之前设置,不能再线程启动之后设置2、使用Daemon线程被用作完成支持性工作,但是在...原创 2018-07-19 08:59:51 · 3703 阅读 · 0 评论 -
java并发基础(一)——线程简介
1.1、什么是线程?操作系统调度的最小单元是线程,也叫轻量级进程,在一个进程里面可以创建多个线程,这些线程都拥有各自的计数器、堆栈、局部变量等属性,能够访问共享变量一个java程序从main()方法开始执行,执行的只一个main线程 package cn.sunline.demo.dem2;import java.lang.management.ManagementFacto...原创 2018-07-18 08:40:23 · 675 阅读 · 0 评论 -
java内存模式-volatile
一、volatile写-读的内存语义定义:当写一个volatile变量时,JVM会把线程对应的本地内存中的共享变量值刷新至主内存volatile读的内存语义:当读一个volatile变量时,JVM会把该线程对应的本地内存置为无效,线程接下来将从主内存中读取共享变量总结:1、线程A写一个volatile变量,实质上是线程A向接下来要读volatile变量的某个线程发出消息2、线程B读一个volati...原创 2018-07-12 08:59:16 · 686 阅读 · 0 评论 -
springboot 集成log4j 进程关闭
1、报错信息2018-07-17 18:53:38,267 Thread-2 WARN Unable to register Log4j shutdown hook because JVM is shutting down. Using SimpleLogger2、pom依赖<dependencies> <dependency> <grou...原创 2018-07-17 19:01:29 · 5614 阅读 · 0 评论 -
spring创建事物
TransactionAspectSupport类里面的createTransactionIfNecessary方法用于创建事物1、使用DelegatingTransactionAttribute封装传入的TransactionAttribute实例用于提供更多的功能2、获取事物事物处理当然是以事物为核心,获取事物就是最重要的事情2.1、获取事物创建对应的事物实例,这里使用的是DataSource...原创 2018-07-09 09:11:04 · 1058 阅读 · 0 评论 -
事物增强器
TransactionInterceptor支撑着整个事物功能的架构,TransactionInterceptor继承自MethodInterceptor,改类是从invoke方法开始1、获取事物的属性对于事物处理来说,最基础或者说最首要的工作是获取事物属性2、加载配置中配置的TransactionManager3、不同的事物处理方式使用不同的逻辑4、在目标方法执行前获取事物并收集事物信息5、执行...原创 2018-07-09 09:07:34 · 838 阅读 · 0 评论 -
springmvc-DisPatcherServlet初始化
在springmvc中真正实现逻辑的是在DisPatcherServlet中进行的,DisPatcherServlet是实现servlet接口的实现类,init()方法在其父类HttpServletBean中1、封装及安正初始化参数主要是对初始化的参数进行封装2、将当前servlet实例转化成BeanWrapper3、注册相对应Resource的属性编辑器4、属性注入BeanWrappper为sp...原创 2018-07-09 09:04:55 · 1168 阅读 · 0 评论 -
容器扩展功能(三)-扩展功能
在进入函数postProcessBeanFactory前,spring已经对配置文件进行了解析,ApplicationContext的扩展功能由此扩展一、增加SPEL语言的支持类似OGNL表达式语言,以#{...}作为定界符默认可以使用#{bean.xxx}的形式调用相关的属性二、增加对属性编辑器的支持1、使用自定义属性编辑器通过集成ProoertyEditorSupport,重写setAsTex...原创 2018-06-27 09:33:11 · 907 阅读 · 0 评论 -
bean的加载-缓存中获取单例bean
单例只会在容器里面创建一次,后续获取bean直接从缓存中尝试获取,如果没有在尝试从singletonFactories中获取,创建bean的时候可能会出现依赖注入的情况,为了避免循环依赖,在还没有创建bean之前就会把bean的ObjectFactory加到缓存,依赖时,直接使用ObjectFactory就可以了1、具体的实现方法2、主要分为以下步骤一、检查缓存中是否存在实例二、实例如果为空,则锁...原创 2018-06-20 08:53:40 · 832 阅读 · 0 评论 -
容器的功能扩展(二)-环境准备和加载BeanFactory
一、环境准备prepareRefresh方法主要是做一些准备工作,比如对系统属性及环境变量的初始化验证1.1、initPropertySources复合spring的开放式结构设计,最大扩展spring的能力,可以根据自身的情况重写initPropertySources方法,进行个性化处理1.2、validateRequiredProperties对属性进行验证,如果重写方法initPropert...原创 2018-06-26 08:54:13 · 647 阅读 · 0 评论 -
bean的加载
bean的加载过程比bean的解析复杂的多,主要是AbstractBeanFactory下面的doGetBean方法实现1、转换对应的beanName传入的参数可能是bean的别名,也可能是FactoryBean,所以需要在这里转换2、尝试从缓存中加载单例单例在容器中只会创建一次,后面直接获取bean就行了,首先尝试从缓存中拿,如果不成功就从singletonFactories,因为创建单例存在依...原创 2018-06-19 09:38:16 · 881 阅读 · 2 评论 -
Lock接口
锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源。在lock接口出现之前程序是靠synchronized关键字实现锁功能,lock接口提供了与synchronized关键字类似的同步功能,只是在使用的过程中需要显示的获取和释放锁。缺点:缺少隐士获取释放锁的便捷性有点:拥有锁获取与释放的可操作性,可中断的获取硕=锁以及超市获取锁等特性适合Lock的...原创 2018-07-25 09:04:02 · 1412 阅读 · 0 评论 -
volatile和synchronized关键字
java支持多个线程访问一个对象或者对象的成员变量,由于每个线程可以拥有这个变量的拷贝,所以在程序执行的过程中,一个线程看到的变量并不一定是最新的volatile:用来修饰成员变量,告知程序对成员变量的访问均需要从共享内存中获取,而对它 的改变必须同步刷新回共享内存,保证所有线程对变量访问的可见性synchronized:用于修饰方法或者同步块的形式使用,主要确保多个线程在同一时刻,只能有...原创 2018-07-20 08:58:47 · 1131 阅读 · 0 评论 -
Java代理设计模式(Proxy)的几种具体实现
Proxy是一种结构设计模型,主要解决对象直接访问带来的问题,代理又分为静态代理和动态代理(JDK代理、CGLIB代理。静态代理:又程序创建的代理类,或者特定的工具类,在平时开发中经常用到这种代理模式,这种一般在程序运行前就已经生成对应的class文件;动态代理:在程序运行时通过反射机制动态创建。下面通过一个场景实现以下三种代理方式步骤一:定义商店接口(Subject)步骤二:个人店家运营...原创 2019-09-10 09:04:22 · 1021 阅读 · 0 评论 -
springboot集成分布式事务Seata
springboot集成分布式事务Seata原创 2019-07-19 16:44:22 · 1878 阅读 · 1 评论 -
利用jdk1.8的stream,让你的代码上升一个层次
文章公众号连接:https://mp.weixin.qq.com/s/m5Knf35LFH5DZEiqUsUMqw简介jdk1.8新增了一个接口类stream,和我们之前接触的字节流概念不一样,stream相当于高级版的Iterator,可以通过lambada表达式对集合就行各种遍历高效的聚合操作,或者大批量的数据操作。stream:数据串行操作parallelStream:并行操作,在多...原创 2019-06-06 16:31:19 · 479 阅读 · 0 评论 -
Spring boot集成Nacos-配置中心详解
该文档是基于spring cloud版本进行开发。Nacos持久化可以参考:https://mp.weixin.qq.com/s/6khhRU46J2kFJKUBuDyTGQ项目集成依赖最新版本可以参考https://github.com/spring-cloud-incubator/spring-cloud-alibaba/releases<dependency> <...原创 2019-04-15 13:46:41 · 10204 阅读 · 0 评论 -
nacos持久化及服务注册
#一、Nacos服务端安装最新版本下载地址:https://github.com/alibaba/nacos/releases访问:http://127.0.0.1:8848/nacos用户名/密码:nacos/nacos二、Nacos持久化nacos默认是把数据保存在本地磁盘文件读取mysql脚本脚本在下载的服务端\nacos\conf\nacos-mysql.sqlmysq...原创 2019-04-15 13:42:52 · 4272 阅读 · 0 评论 -
基于Nacos实现Spring Cloud Gateway实现动态路由
简介该文档主要介绍以Nacos为配置中心,实现Spring Cloud GateWay 实现动态路由的功能。Spring Cloud Gateway启动时候,就将路由配置和规则加载到内存里,无法做到不重启网关就可以动态的对应路由的配置和规则进行增加,修改和删除。通过nacos的配置下发的功能可以实现在不重启网关的情况下,实现动态路由。集成Spring Cloud GateWay集成spri...原创 2019-04-15 13:38:23 · 46422 阅读 · 21 评论 -
springboot集成分布式事务Seata
简介github地址spring-boot-starter-seata:https://github.com/itrickzhang/spring-boot-starter-seataseata版本server和client版本为0.4.1,Seata 一直在快速迭代在1.0 之前都有可能出现协议不兼容 尽量使用版本号一致说明目前提供的示例是针对使用dubbo的服务,那Spring B...原创 2019-04-15 13:22:49 · 30218 阅读 · 29 评论 -
springboot源码解析-SpringApplication
说明用过springboot的人应该都知道SpringApplication做boot的一个启动点,但是有多少人知道这个类做了多少事情?我们来看下源码里面的解释:可以通过java主程序(main)来启动spring应用,执行时需要按照以下步骤执行:1、创建一个实例应用也就是程序;2、注册一个资源文件来执行spring属性也就是ResourceLoader需要做的事情;3、刷新应用程序的...原创 2019-04-17 08:37:13 · 593 阅读 · 0 评论 -
企业级基础框架搭建-前期准备
主流框架调研主流微服框架sofa开源地址:https://github.com/alipay/sofa-boot开源公司:蚂蚁金服框架简介:sofa是一系列基础组件统称,底层sofa-boot是以Spring Boot研发,提供健康检查、日志隔离、类隔离等能力;sofa-rpc高可扩展性、高性能、生产级的 Java RPC 框架,提供了丰富的微服务治理方案;sofa-tracer分布式系...原创 2019-04-01 17:00:11 · 953 阅读 · 0 评论 -
线程等待通知机制
等待通知机制,是指一个线程A调用了对象O的wait方法进入等待状态,而另一个线程调用了对象O的notify或者notifyAll方法,线程A收到通知后从对象O的wait方法返回,进而执行后续操作方法名称 描述 notify() 通知一个在对象上对待的线程,使其从wait方法返回,而返回的前提是该线程获取到了对象的锁 notifyAll() 通知所有等待在该对象上的线程...原创 2018-07-23 09:06:01 · 1276 阅读 · 0 评论 -
为什么要使用ConcurrentHashMap
在线程并发中使用HashMap可能导致程序死循环。而使用线程安全的HashTable效率非常低1、线程不安全的HashMap在多线程,使用HaspMap就行put操作会引起死循环,导致cpu100%。所在在并发情况不能使用HashMappackage com.demo.demo4;import java.util.HashMap;import java.util.UUID;...原创 2018-07-26 09:01:36 · 2629 阅读 · 1 评论 -
容器功能扩展(一)
spring中提供了另外一个接口ApplicationContext,用于扩展BeanFactory,ApplicationContext提供了更堵的扩展功能一、设置路径配置文件路径可以以数组的方式传入,解析及功能实现都在refresh()中实现多配置文件,同时支持系统变量二、扩展功能2.1、初始化前的准备工作,例如对系统属性或者环境变量就行准备和验证2.2、初始化BeanFactory,并进行X...原创 2018-06-25 09:11:28 · 756 阅读 · 0 评论 -
bean标签的解析及注册-registerBeanDefinition
1、注册DefaultBeanDefinitionDocumentReader类下的processBeanDefinition方法里面的BeanDefinitionReaderUtils.registerBeanDefinition解析2、BeanDefinitionReaderUtils下面的registerBeanDefinition用于注册bean第一步使用beanName作为标识注册第二步...原创 2018-06-15 09:06:01 · 11238 阅读 · 0 评论 -
spring cloud整合thymeleaf,实现简单登录
1、pom依赖<!-- springboot模板 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependen...原创 2018-03-01 16:36:59 · 4998 阅读 · 6 评论 -
spring cloud 使用maven-assembly-plugin打zip包
1、pom文件<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.6</version> <confi原创 2018-02-27 09:28:07 · 1948 阅读 · 5 评论 -
spring boot + Schedule简单定时任务实现
1、启动类加注解@EnableSchedulingpackage cn.sunline.insd.sso.service;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.sp原创 2018-02-05 15:30:14 · 1059 阅读 · 1 评论 -
spring cloud log4j日志输出到同步kafka
1、jar包依赖 org.springframework.kafka spring-kafka org.apache.kafka kafka-clients 0.9.0.12、application.yml配置文件#指定log配置#需要把日志传到kafka用文件log4j2-kafka.xml,如果不用则使用log4j2-pro.xm原创 2018-02-05 15:59:44 · 4108 阅读 · 0 评论 -
spring boot +commons-io实现文件监控
1、pom文件<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 http://mave原创 2017-12-19 08:49:30 · 7937 阅读 · 0 评论 -
java项目瓶颈排查分析已解决
最近项目遇到一个问题,很让人头痛,服务器上面部署的应用,经常性的挂,cup和内存飙高,还被客户投诉,再次分享排查的过程1、截取了这几次挂的日志,发现mybaits报错了,这个错误大致是,使用方法不对,用selectone查多条数据就会报错,然后频繁操作,开始以为,抛异常会导致链接池不会收回,所以连接数不够,导致的,所以修改了这个bug2、改了这个bug但是情况并没有变好,然原创 2017-12-15 13:48:17 · 2103 阅读 · 0 评论 -
spring cloud +redis整合
1、添加pom依赖文件 org.springframework.boot spring-boot-starter-redis 1.0.1.RELEASE redis.clients jedis 2.4.2原创 2017-12-23 16:35:23 · 21281 阅读 · 1 评论 -
spring-cloud 消费者环境搭建
开发工具idea,jdk1.81、新建maven项目2、配置pom.xml<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.原创 2017-12-02 13:10:44 · 328 阅读 · 0 评论 -
spring-cloud生产者环境搭建
开发工具idea,jdk1.81、新建一个maven项目2、配置pom文件<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ma原创 2017-12-02 12:31:04 · 2283 阅读 · 0 评论 -
spring-cloud 注册中心eureka环境搭建
开发工具idea1、新建一个maven项目2、在初学spring boot时,官方示例中,都是让我们继承一个spring的 spring-boot-starter-parent 这个parent org.springframework.boot spring-boot-starter-parent 1.5.2.RELE原创 2017-12-02 11:40:26 · 2285 阅读 · 0 评论 -
HashMap的实现原理
1. HashMap概述: HashMap是基于哈希表的Map接口的非同步实现(Hashtable跟HashMap很像,唯一的区别是Hashtalbe中的方法是线程安全的,也就是同步的)。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。2. HashMap的数据结构: 在java编程语言中,最基本的结构就是两种转载 2016-08-08 14:19:32 · 369 阅读 · 0 评论