- 博客(17)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注
原创 CAP原则和BASE原则
CAP和BASE是分布式系统中最常见的两个原则,我们常见的类似的Zookeeper,Eureka中间件,MySQL,Oracle数据库,或者是我们的分布式业务系统,其实都在这两个原则当中。CAP原则一致性(C:Conistency):分布式节点之间的数据或者状态应该保持一致。比如服务注册中间件中注册服务列表应该保持一致,数据库多个从库数据应该保持一致。可用性(A:Avai...
2019-12-17 15:51:20
2921
原创 Java设计模式-结构型-享元模式
在工厂模式的代码中,我们不停的生成的对象,每个对象都是全新的,并在占用了部分的内存,而往往很多的对象内容都是相同的,也就是说可以共用的。享元模式也正是为了解决这种资源上的浪费而提出来的。那么怎么样才能做到共享细粒度的对象呢?参考GoF提供的图片:其中我觉得最关键的就是享元工厂角色中HashMap,他保存了每个实例化后的对象并使用key-value的形式保存起来。当遇到相同的key...
2019-10-10 10:59:14
183
原创 定时任务类ScheduledThreadPoolExecutor和心跳的使用
ScheduledThreadPoolExecutor类并不是什么新出的功能了,在JDK1.5的时候就已经加入进来,开发他的正式并发大神Doug Lea。大概三四年前有整体学习过Java并发的源码。这次在给公司做分布式心跳检测系统的时候,花了点时间重新读了一遍。我很庆幸自己这么做了,虽然并不是完整的读完了,但是真的受益良多。首先看下ScheduledThreadPoolExecutor的类图:...
2019-10-02 07:28:12
919
原创 历程之Spring Boot 2:Eureka注册中心
Eureka是Netflix开发的一套开源服务治理框架,他依托于类似Tomcat,Jetty之类的Web容器才能启动。他类似于Zookeeper和Dubbo的集合,一般将Eureka的注册中心称为服务端,而使用Eureka将服务注册到服务端或者从服务端获取服务的应用称为Eureka的客户端。这个和Dubbo非常明显的分为Provider和Consumer不太一样。本文将依托于Spring Bo...
2019-09-29 10:48:50
171
原创 历程之Spring Boot 2:Redis5缓存数据
Spring和Redis的搭配不算是有多新颖,Redis使用已经非常普遍,在上面的搭配中,Spring收到的请求和请求返回结果可以作为key-value缓存到Redis,在我之前做过的抢购项目中是最常见的方法。在本文中,我将使用之前做的Spring Boot 2 + MyBatis的项目作为基础继续添加Redis的访问,同样需要有Redis集群正常运行中,Redis集群可以访问之前写的Redi...
2019-09-20 17:47:58
150
原创 Redis5的集群搭建
说道Redis,自然少不了集群。真实生产环境,一般使用都是集群,以应对巨大的缓存数据量。Java分布式技术体系中,使用集群的框架非常之多,但是往往在集群中的节点之间是互相同步数据的,也就是无论应用调用到哪个节点,产生的效果都是一样的。尤其是在我了解服务注册类框架的时候,节点之间的一致性更是硬性要求。Redis集群给我印象较深的就是节点之间的数据是完全不需要同步的。首先来讲,集群没有Leader...
2019-09-18 09:26:29
157
原创 redis5单节点下载和安装
无论是传统公司或者互联网公司中,Redis是必备的技术,强大的缓存功能极大的提升了系统的并发能力。他是由Salvatore Sanfilippo写的key-value存储系统,遵守BSD协议、支持网络、可基于内存、可持久化、在很多互联网公司的活动应用中(比如抢购活动),通常直接使用Redis作为数据库使用,当活动结束后再同步到MySQL或者Oracle当中。更多的信息或者下载地址可以访问:re...
2019-09-17 08:31:39
204
原创 历程之Spring Boot 2:MyBatis访问数据库
最近几年接触的项目中,数据库访问中间件都不见Hibernate的踪影了,基本都是MyBatis。MyBatis相对于Hibernate来说的确方便很多,最关键的就是灵活,在绝大多数的项目当中,如果使用Hibernate将一对多或者多对一,主外键关系在数据库和代码中限制死,那么在后期的开发和测试过程中绝对是非常麻烦的事情。所以在使用MyBatis时候,我们一般将这列的数据关系限制在业务中,这样至少数...
2019-09-11 10:38:49
96
原创 Java设计模式-行为型-命令模式
在很多程序员的开发过程可能都不知不觉中用到了这种模式,比如在使用对象的多个方法时候,有methodA,methodB,methodC三个方法可供使用,方法使用者对三个方法是使用是随机组合的。代码如下:public class RemoteControl { public void action1() { Plane plane = new Plane(); ...
2019-09-05 11:00:06
140
原创 历程之Spring Boot 2:Hello, Spring Boot 2
从业10年,经历了技术架构由单一应用部署到分布式部署,业务架构由单一系统到微服务。技术框架由之前的Struts,Struts2为核心,演变到Spring MVC,再到现在的Spring Boot。技术框架的演变方向始终朝着快速开发的目的,让程序员将更多的时间和精力放在业务需求的整理、设计和实现上。当初Spring的XML配置化的IOC的出现给应用的开发带来极大的便捷,于是很快赢得程序员的喜爱,...
2019-09-04 17:16:49
148
原创 本地项目初始化并提交到github上
作者习惯使用GitHub来管理自己写的代码,还有一些正在学习的开源项目。遇到几次的情况都是本地完成代码后,需要提交到GitHub上,特记录如下:本地项目名gitProject,进入到项目的根目录下,执行下面的git指令://初始化项目为git项目git init//添加所有文件到git管理git add .//提交代码到本地库, -m 后面的是Commit Messageg...
2019-09-03 13:39:01
259
原创 聊聊Eureka的心跳机制
Eureka是Netflix公司开发的一套开源服务框架,后被引入到Spring的生态圈中,于是有了Spring Cloud Eureka。Spring Cloud Eureka是对原版的二次开发,再次基础上添加了Spring Boot的自动化配置,使用者可以通过简单的注解配置即可完成注册中心构建,实例的注册和服务的消费。但是这三点都不是本文要讲的,本文要说的是在实例注册后,实例通过心跳告诉注册中心...
2019-09-03 13:22:28
4114
原创 Maven打出可执行JAR,自动引入第三方jar和添加MainClass
其实这个功能平时用的实在不多,之前配置过,之后长期不用又忘记了。百度了一圈,按照他们配置的都失败了,平白为这个简单的东西浪费诸多时间。现总结如下,特意记下提醒自己和需要的朋友。首先如需要的是在打出的JAR包中指定main方法所在的类,也就是启动类:<plugin> <groupId>org.apache.maven.plugins</groupId>...
2019-08-20 11:15:07
1165
1
原创 Java设计模式-创建型-抽象工厂模式
什么是抽象工厂模式抽象工厂模式是工厂模式的一种抽象形态,通常将工厂类定义为abstract,并且在工厂的方法中,所返回的对象也是抽象的。这个返回的对象往往就是客户所需要的。抽象工厂模式的作用抽象工厂模式的主要作用是可以将一系列的对象系统的抽象,并将得到的抽象对象通过工厂模式进行分类。是用户使用对象时候可以更系统和清晰。也就是说我们所要使用的对象就是抽象工厂模式生产出的产品,并...
2014-10-29 16:48:40
303
原创 Java设计模式-结构型-适配器模式
什么是适配器模式Gang of Four 说过,将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。这句话中可以知道,适配器是为方便多个接口或者类协同的工作。客户所要使用的也是他们协作的结果。上面的UML图采集与wiki。 图中可以看到Adaptor类实现了多个接口,每个结构有不同的方法,它的方...
2014-08-28 16:09:12
426
原创 Java设计模式-结构型-修饰模式
什么是修饰模式修饰模式是面向对象模式的一种,该模式可以动态向类中添加新的功能。动态指的是在程序运行时候,而我们常用的扩展功能的方法是写一个子类继承父类,这样的继承是静态的,因为这样的扩展方法是程序编译时候就体现出来了。在上图中可以看到,接口类Component有2个实现,ConcreteComponent类和Decorator类,Decorator类和它的2个子类对Conc...
2014-08-11 14:17:37
2416
原创 Java设计模式-行为型-代理模式
什么是代理模式从代理这两个字就大概可以猜到这个模式应该是做什么用的。代理模式是为被访问的对象提供一个代理,这样的话,对象的访问者访问就是这个代理对象。下面的UML图可以比较清晰的表示这样的关系。(图片来源,wikipedia)从图中可以看出,Proxy类和RealSubject类都实现了接口Subject。RealSubject.DoAction()方法才是访问者真正要调用...
2014-07-31 10:23:13
389
mvn exec:java未执行jar中的main方法问题
2018-11-29
TA创建的收藏夹 TA关注的收藏夹
TA关注的人