自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 Feign原理解析(三)参数的处理

参数的处理之前的章节提到过接口方法的解析,现在再看一下这个方法: public Map<String, MethodHandler> apply(Target key) { List<MethodMetadata> metadata = contract.parseAndValidatateMetadata(key.type()); Map...

2019-10-17 16:02:59 1584

原创 Spring之@RefreshScope探秘(二)

ContextRefresher:refresh()的调用 public synchronized Set<String> refresh() { Set<String> keys = refreshEnvironment(); this.scope.refreshAll(); return keys; } public synchronized Set...

2019-10-12 18:11:47 1017

原创 Spring之@RefreshScope探秘(一)

Spring BeanFactory对于含有@RefreshScope注解的bean加载Spring BeanFactory对于Bean的加载是大致分为三种的,第一种:单例bean,Scope为Singleton,第二种:多例bean,Scope为Prototype,然后就是第三种,除上述两类的都属于第三种,其中就有Scope为refresh的bean,即被@RefreshScope注解过的be...

2019-10-08 11:10:13 3628

原创 Feign原理解析(二)接口方法的解析

ParseHandlersByNameParseHandlersByName是Feign解析接口定义的方法的实现,在Feign.Builder的build()方法中会初始化一个它的实例传递给ReflectiveFeign,以便在生成代理对象时通过ParseHandlersByName类的实例来解析接口方法.如下代码片段: public Feign build() { Syn...

2019-09-30 14:29:35 1307

原创 Spring bean销毁的过程

一:DefaultSingletonBeanRegistry之destroySingleton(String beanName)销毁单例bean public void destroySingleton(String beanName) { // Remove a registered singleton of the given name, if any. removeSinglet...

2019-09-05 11:12:34 2278

原创 Feign原理解析(一)Feign调用对象的创建

Feign.Builder 链式调用 public static class Builder { private final List<RequestInterceptor> requestInterceptors = new ArrayList<RequestInterceptor>(); private Logger.Level...

2019-08-22 17:13:10 1917

原创 zookeeper集群模式(十三)zookeeper的observeLeader流程

observeLeader()流程Leader选举出来之后,处于OBSERVING状态的zookeeper服务会创建一个Observer实例,然后调用observeLeader()方法进行observeLeader流程,如下: void observeLeader() throws Exception { zk.registerJMX(new ObserverBean...

2019-08-13 15:26:16 727 1

原创 EasyUI 递归遍历tree以及全选与全不选

EasyUI网上的全选与全不选都是只针对根节点的,并没有对子节点进行处理,因此自己略做改进写了一版,如下:function treeChecked(selected, treeMenu) { var _tree = $('#' + treeMenu); var roots = _tree.tree('getRoots');//返回tree的所有根节点数组 if (sele...

2019-08-12 17:11:43 1720

原创 Spring MVC 判定返回view的依据

问题起因利用@Controller注解可以在一些特定条件下返回view视图,两段看似长得相近的代码却是截然不同的处理,如下:@Controllerpublic class TestController { @GetMapping("/test1") public void delete(HttpServletRequest request, HttpServletResponse r...

2019-08-06 10:24:34 402

原创 zookeeper集群模式(十二)zookeeper的followLeader流程

followLeader流程Leader选举出来之后,非Leader的zookeeper服务会创建一个Follower实例,然后调用followLeader()方法进行followLeader流程,接下来看一下followLeader()方法: void followLeader() throws InterruptedException { self.end_fle...

2019-07-31 18:02:13 1978

原创 zookeeper集群模式(十一)zookeeper之Leader与Learner网络交互之LearnerHandler

LearnerCnxAcceptor这个是Leader的一个内部类,Leader是通过它来与Learner建立连接的,接下来看看这个类: class LearnerCnxAcceptor extends ZooKeeperCriticalThread { private volatile boolean stop = false; public Le...

2019-07-26 19:13:14 2100

原创 HTTP Basic身份认证 - JavaMelody实践

JavaMelody的身份认证鉴于项目原因,接入了JavaMelody以及Jwt,由于Request header冲突的原因造成Jwt认证失败,大致出错代码如下: String jwt = request.getHeader("Authorization"); if (!StringUtils.isEmpty(jwt)) { retur...

2019-07-25 09:52:50 990

原创 MyBatis参数为0时跟空字符串''判断相等的分析以及解决办法

起因之前在一个Mapper文件中写了这样一个if标签,结果当参数为0时不论如何if标签的判断都是false,打印sql也发现当参数为0时这个条件会不起作用,因此查看了一下MyBatis中相关的源码,if标签如下: <if test="backCarType != null and backCarType != ''"> and m.back_car = #{...

2019-07-16 18:21:28 1583 2

原创 MyBatis日志设置未生效的分析以及解决方法

日志设置方式:这是一个基于spring boot框架的项目,配置的MyBatis日志类是在application.yml中的,但是实际上并没有记录日志,也就是说这个配置没有生效mybatis: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImplMyBatis SQL日志记录实现原理分析M...

2019-07-12 17:53:12 6937 1

原创 zookeeper集群模式(十)zookeeper的lead流程

lead流程Leader选举出来之后,会创建一个Leader实例,然后调用lead()方法进行lead流程,接下来看一下lead()方法: void lead() throws IOException, InterruptedException { self.end_fle = Time.currentElapsedTime(); long electio...

2019-07-05 18:58:13 2363

原创 zookeeper集群模式(九)zookeeper的Leader选举之FastLeaderElection

基于TCP实现的Leader选举:FastLeaderElection从3.4.0版本开始,zookeeper官方就只推荐FastLeaderElection用作Leader选举的唯一方式了,因此对于Leader选举就只讲解这个类的一些核心方法和内部类.Notification static public class Notification { /* ...

2019-06-26 14:24:45 467

原创 zookeeper集群模式(八)zookeeper的Leader选举与事务投票之SyncedLearnerTracker与Proposal

投票统计器:SyncedLearnerTracker这个类的主要作用是为本轮选举或事务投票提供一些统计性的功能,如下:1.添加投票验证器以及初始化ackset,ackset是一个zookeeper服务发送ack应答列表2.添加ack应答到相应的列表中3.验证当前缓存的投票验证器中是否存在指定serverId的参与投票角色4.检验是否通过本轮选举或事务投票提案:Proposal ...

2019-06-26 14:23:59 478

原创 zookeeper集群模式(七)zookeeper的Leader选举与事务投票过半策略之QuorumHierarchical

基于权重实现的投票验证器:QuorumHierarchical上篇文章解析了基于机器数量实现的投票验证器,基于权重的有一个优点,就是可以让部署在性能更好的机器、网络更好的机房等能提供更稳定、更优质的zookeeper服务拥用更大的投票权.官方给出的一份权重配置:group.1=1:2:3group.2=4:5:6group.3=7:8:9weight.1=1weight.2=1...

2019-06-26 14:23:15 451

原创 zookeeper集群模式(六)zookeeper的Leader选举与事务投票过半策略之QuorumMaj

投票验证器QuorumVerifier投票验证器承担了事务投票、Leader选举等过程中是否保证过半的责任,接口结构如下:public interface QuorumVerifier { long getWeight(long id); boolean containsQuorum(Set<Long> set); long getVersion();...

2019-06-26 14:22:30 956

原创 zookeeper集群模式(五)zookeeper的Leader选举之QuorumPeer

QuorumPeer这个类就是zookeeper的Leader选举的启动类,负责创建选举算法,zk数据恢复,启动leader选举等zookeeper的服务器状态: public enum ServerState { LOOKING, FOLLOWING, LEADING, OBSERVING; }1.LOOKING状态:这个状态表示当前服务器还未选举出L...

2019-06-26 14:21:46 1307

原创 zookeeper集群模式(四)zookeeper进行leader选举跟Follower之间网络交互之QuorumCnxManager

QuorumCnxManager之前提到在QuorumPeer启动的时候会进行Leader选举的准备工作,主要实现方法是startLeaderElection():startLeaderElection() synchronized public void startLeaderElection() { try { if (getPeerSt...

2019-06-26 14:20:38 1393

原创 zookeeper集群模式(三)zookeeper数据库ZKDataBase的加载

QuorumPeer之重写继承自Thread之后的start()方法 @Override public synchronized void start() { if (!getView().containsKey(myid)) { throw new RuntimeException("My id " + myid + " not in ...

2019-06-26 14:19:36 1027 1

原创 zookeeper集群模式(二)zookeeper配置文件的解析

QuorumPeerConfig上文中说到initializeAndRun(String[] args)会进行zookeeper配置文件的解析,其实这个解析就是通过QuorumPeerConfig的parse(String path)这个方法来进行的,zookeeper默认path是/config/zoo.cfg,如下: public void parse(String path) ...

2019-06-26 14:18:27 1850

原创 zookeeper集群模式(一)zookeeper集群模式的启动

QuorumPeerMain这是zookeeper服务的启动类,它提供了一个main()方法用来启动zookeeper服务,如下: public static void main(String[] args) { QuorumPeerMain main = new QuorumPeerMain(); try { main.ini...

2019-06-26 14:16:40 780

亿级流量网站架构核心技术

亿级网络核心架构,专家所写书籍,专为学习架构以及搭建高可用系统的人学习。

2019-02-13

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

TA关注的人

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