<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[LightOfMiracle的博客]]></title><description><![CDATA[好记性不如机械键盘]]></description><link>https://blog.youkuaiyun.com/LightOfMiracle</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; LightOfMiracle]]></copyright><item><title><![CDATA[Spring Boot Ribbon负载均衡配置的坑（避免被ComponentScan扫描）]]></title><link>https://blog.youkuaiyun.com/LightOfMiracle/article/details/82774780</link><guid>https://blog.youkuaiyun.com/LightOfMiracle/article/details/82774780</guid><author>LightOfMiracle</author><pubDate>Wed, 19 Sep 2018 17:08:57 +0800</pubDate><description><![CDATA[配置

Spring Boot Ribbon负载均衡配置很简单，网上一搜类似下面：


@Configuration
public class LoadBalanceConfiguration {

    @Bean
    public IRule rule() {
        return new WeightedResponseTimeRule();
    }
}

坑

在Ribb...]]></description><category></category></item><item><title><![CDATA[Spring Boot 注解方式自定义Endpoint]]></title><link>https://blog.youkuaiyun.com/LightOfMiracle/article/details/80594795</link><guid>https://blog.youkuaiyun.com/LightOfMiracle/article/details/80594795</guid><author>LightOfMiracle</author><pubDate>Wed, 06 Jun 2018 16:07:28 +0800</pubDate><description><![CDATA[概述

在使用Spring Boot的时候我们经常使用actuator，健康检查，bus中使用/refresh等。这里记录如何使用注解的方式自定义Endpoint。可用于满足一些服务状态监控，或者优雅停机等。

准备

Spring Boot项目，pom中加入：


&amp;lt;dependency&amp;gt;
	&amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/gr...]]></description><category></category></item><item><title><![CDATA[Java还要再学一遍基础（十五）获取Unsafe]]></title><link>https://blog.youkuaiyun.com/LightOfMiracle/article/details/80520977</link><guid>https://blog.youkuaiyun.com/LightOfMiracle/article/details/80520977</guid><author>LightOfMiracle</author><pubDate>Thu, 31 May 2018 10:58:41 +0800</pubDate><description><![CDATA[Java中的Unsafe被设计成我们不能随便访问，虽然也可以通过反射获取，但是没有经过严格测试的自己写的代码不能保证它的正确性，这里贴出谷歌api中的Unsafe获取方法，以备后用：private static sun.misc.Unsafe getUnsafe() {
        try {
            return sun.misc.Unsafe.getUnsafe();
  ...]]></description><category></category></item><item><title><![CDATA[基于canal的Spring-Boot-Starter]]></title><link>https://blog.youkuaiyun.com/LightOfMiracle/article/details/79655186</link><guid>https://blog.youkuaiyun.com/LightOfMiracle/article/details/79655186</guid><author>LightOfMiracle</author><pubDate>Thu, 22 Mar 2018 15:59:56 +0800</pubDate><description><![CDATA[前言    canal是阿里巴巴的基于数据库增量日志解析，提供增量数据订阅&amp;amp;消费，目前主要支持了mysql。可以用于比如数据库数据变化的监听从而同步缓存（如Redis）数据等。由于项目中基本都是使用的Spring-Boot，所以写了一个基于Spring-Boot的starter方便使用。特点使用方便。可以通过简单的配置就可以开始使用，当对某些操作感兴趣的时候可以通过注解或者注入接口实现的方...]]></description><category></category></item><item><title><![CDATA[Spring Boot整合oauth2.0搭建统一授权服务（密码模式）]]></title><link>https://blog.youkuaiyun.com/LightOfMiracle/article/details/79151074</link><guid>https://blog.youkuaiyun.com/LightOfMiracle/article/details/79151074</guid><author>LightOfMiracle</author><pubDate>Wed, 24 Jan 2018 15:36:45 +0800</pubDate><description><![CDATA[前言

写这个博客得原因是最近想要将自己得api单独发布给第三方使用，但是又不想被别人滥用，所以想弄一个授权服务，但是网上关于oauth2.0的资料层出不穷，看了之后完全不明白应该如果实际的去整合，现在基本成功后记录下来。

关于oauth2.0的概念以及相关的知识等可以建议参阅理解OAuth 2.0。

准备

新建一个Spring Boot的web项目并导入一下依赖：


&amp;lt;depend...]]></description><category></category></item><item><title><![CDATA[Spring Boot整合Swagger2]]></title><link>https://blog.youkuaiyun.com/LightOfMiracle/article/details/79129341</link><guid>https://blog.youkuaiyun.com/LightOfMiracle/article/details/79129341</guid><author>LightOfMiracle</author><pubDate>Mon, 22 Jan 2018 15:29:52 +0800</pubDate><description><![CDATA[Spring Boot整合Swagger2
关于swagger2的阐述以及使用等此处不做描述。


整合步骤
整合之前需要先创建一个Spring Boot的web项目。
POM依赖导入

	io.springfox
	springfox-swagger2
	2.5.0



	io.springfox
	springfox-swagger-ui
	2.5.0

配置
@Confi]]></description><category></category></item><item><title><![CDATA[Java内存区域划分]]></title><link>https://blog.youkuaiyun.com/LightOfMiracle/article/details/75110358</link><guid>https://blog.youkuaiyun.com/LightOfMiracle/article/details/75110358</guid><author>LightOfMiracle</author><pubDate>Fri, 14 Jul 2017 14:48:03 +0800</pubDate><description><![CDATA[阅读了《深入理解Java虚拟机》之后的学习记录。在理解了Java的内存区域划分的情况下对于出现OOM问题等一些列内存问题以及调优方面将会有很大的帮助，也可以让自己在编写代码的时候能够预防某些可能出现内存泄漏或者内存溢出的情况，编写高质量的代码。


运行时数据区域
Java虚拟机在运行的过程中会将虚拟机所管理的内存划分为若干个不同的区域，每个区域存放不同的数据担负着不同的职责。下面是运行时]]></description><category></category></item><item><title><![CDATA[Java还要再学一遍基础（十七）- Object的finalize方法]]></title><link>https://blog.youkuaiyun.com/LightOfMiracle/article/details/75021704</link><guid>https://blog.youkuaiyun.com/LightOfMiracle/article/details/75021704</guid><author>LightOfMiracle</author><pubDate>Wed, 12 Jul 2017 16:01:15 +0800</pubDate><description><![CDATA[概述
Object的finalize方法定义如下：
protected void finalize() throws Throwable { }
使用protected修饰，所以子类是可以重写该方法的。finalize方法将会在jvm对当前对象进行gc回收的时候调用。


实例
下面的代码简单的演示了finalize方法的使用：
public class FinanizeEscap]]></description><category></category></item><item><title><![CDATA[根据二叉树的先序遍历和中序遍历重建二叉树]]></title><link>https://blog.youkuaiyun.com/LightOfMiracle/article/details/74989846</link><guid>https://blog.youkuaiyun.com/LightOfMiracle/article/details/74989846</guid><author>LightOfMiracle</author><pubDate>Tue, 11 Jul 2017 17:19:40 +0800</pubDate><description><![CDATA[题目：
输入某二叉树的前序遍历和中序遍历的结果，请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}，则重建二叉树并返回。




程序：
public class Solution {
	
	public static void main(String[] ]]></description><category></category></item><item><title><![CDATA[【Spring】 - lookup-method和replaced-method使用]]></title><link>https://blog.youkuaiyun.com/LightOfMiracle/article/details/74988243</link><guid>https://blog.youkuaiyun.com/LightOfMiracle/article/details/74988243</guid><author>LightOfMiracle</author><pubDate>Tue, 11 Jul 2017 16:56:52 +0800</pubDate><description><![CDATA[概述
lookup-method和replaced-method是在xml配置bean的时候的可选配置，其中lookup-method可以声明方法返回某个特定的bean，replaced-method可以改变某个方法甚至是改变方法的逻辑。



使用
（略过环境配置）


定义一个User接口，和接口的两个实现Teacher和Student


User接口：
publi]]></description><category></category></item><item><title><![CDATA[【Spring】- Bean的生命周期的init和destroy方法的三种方式]]></title><link>https://blog.youkuaiyun.com/LightOfMiracle/article/details/74523461</link><guid>https://blog.youkuaiyun.com/LightOfMiracle/article/details/74523461</guid><author>LightOfMiracle</author><pubDate>Thu, 06 Jul 2017 10:21:12 +0800</pubDate><description><![CDATA[概述
在Spring中，向容器中注入一个Bean的时候可能期望在Bean的创建或者Bean的销毁的时候“做一些事情”，Spring支持三种方式来让我们实现。


实现方法
准备
HelloPrinter类：
public class HelloPrinter {

	public void print() {
		System.out.println("hello");
	}
	
	]]></description><category></category></item><item><title><![CDATA[【Spring】 - 基于xml的两种依赖注入方式（构造函数注入，setter注入）]]></title><link>https://blog.youkuaiyun.com/LightOfMiracle/article/details/74445128</link><guid>https://blog.youkuaiyun.com/LightOfMiracle/article/details/74445128</guid><author>LightOfMiracle</author><pubDate>Wed, 05 Jul 2017 14:51:12 +0800</pubDate><description><![CDATA[概述
Spring中依赖注入dependency injection (DI)一般来说有两种形式：
 1）基于xml的依赖注入， 2）基于注解的依赖注入。
基于xml的依赖注入方式通常又可以分为：1）构造函数方式注入。2）setter方式注入。


环境
Spring4.3.9, JDK1.8  pom添加spring依赖如下：

        org.springframewo]]></description><category></category></item><item><title><![CDATA[【Java并发】- 使用CompletionService异步收集任务结果]]></title><link>https://blog.youkuaiyun.com/LightOfMiracle/article/details/74200009</link><guid>https://blog.youkuaiyun.com/LightOfMiracle/article/details/74200009</guid><author>LightOfMiracle</author><pubDate>Mon, 03 Jul 2017 15:13:03 +0800</pubDate><description><![CDATA[概述
在使用Executor或者直接使用ExecutorService的时候，通常会提交很多个任务同时还需要等待任务的返回结果，这个时候如何快速的回收任务的结果就成了问题。
而使用CompletionService可以生产新的异步任务与使用已完成任务的结果分离开来。比如前端页面的图片这种IO的任务，我们并不关心图片的顺序，只是希望能尽快的将图片展示出来。这个时候如果只是顺序的去取图片结果的话，]]></description><category></category></item><item><title><![CDATA[Java还要再学一遍基础（十六）- DelayQueue使用]]></title><link>https://blog.youkuaiyun.com/LightOfMiracle/article/details/74189167</link><guid>https://blog.youkuaiyun.com/LightOfMiracle/article/details/74189167</guid><author>LightOfMiracle</author><pubDate>Mon, 03 Jul 2017 14:06:47 +0800</pubDate><description><![CDATA[概述

 DelayQueueDelayed>
Delayed 元素的一个无界阻塞队列，只有在延迟期满时才能从中提取元素。该队列的头部 是延迟期满后保存时间最长的 Delayed 元素。如果延迟都还没有期满，则队列没有头部，并且
poll 将返回 null。当一个元素的 getDelay(TimeUnit.NANOSECONDS) 方法返回一个小于等于 0 的值时，将发生到期。即使无法使用]]></description><category></category></item><item><title><![CDATA[【Java并发】- ScheduledThreadPoolExecutor, ScheduledExecutorService使用]]></title><link>https://blog.youkuaiyun.com/LightOfMiracle/article/details/74171982</link><guid>https://blog.youkuaiyun.com/LightOfMiracle/article/details/74171982</guid><author>LightOfMiracle</author><pubDate>Mon, 03 Jul 2017 10:06:26 +0800</pubDate><description><![CDATA[概述
    ScheduledExecutorService的接口集成关系：


Executor
|---ExecutorService
|--ScheduledExecutorService]]></description><category></category></item><item><title><![CDATA[【MySQl】- 随机生成大量测试数据（测试用）]]></title><link>https://blog.youkuaiyun.com/LightOfMiracle/article/details/74004511</link><guid>https://blog.youkuaiyun.com/LightOfMiracle/article/details/74004511</guid><author>LightOfMiracle</author><pubDate>Fri, 30 Jun 2017 16:18:48 +0800</pubDate><description><![CDATA[记录一个随机生成大量数据的存储过程（针对特定的表）


第一步：
创建表：
CREATE TABLE `person` (
  `id` bigint(20) unsigned NOT NULL,
  `fname` varchar(100) NOT NULL,
  `lname` varchar(100) NOT NULL,
  `age` tinyint(3) unsigned NO]]></description><category></category></item><item><title><![CDATA[Java还要再学一遍基础（十五） - 接口的多继承]]></title><link>https://blog.youkuaiyun.com/LightOfMiracle/article/details/73826810</link><guid>https://blog.youkuaiyun.com/LightOfMiracle/article/details/73826810</guid><author>LightOfMiracle</author><pubDate>Wed, 28 Jun 2017 10:21:39 +0800</pubDate><description><![CDATA[概述
初学Java的时候经常都能看到--Java类不能继承多个类，但是可以实现多个接口。
学了一段时间之后突然发现：原来接口还能继承接口。
再过一段时间可能终于发现：接口可以继承多个接口！


其实也是在情理之中，因为Java不支持继承多个类一定程度上是因为继承多个类而多个类拥有相同的方法的问题。但是接口不一样，一般来说接口里都是抽象类，所以不存在类的具体实现，就算多继承的时候有相同名]]></description><category></category></item><item><title><![CDATA[【Java设计模式】- 观察者模式]]></title><link>https://blog.youkuaiyun.com/LightOfMiracle/article/details/73801040</link><guid>https://blog.youkuaiyun.com/LightOfMiracle/article/details/73801040</guid><author>LightOfMiracle</author><pubDate>Tue, 27 Jun 2017 16:13:37 +0800</pubDate><description><![CDATA[概述
观察者模式又叫做发布订阅模式（Publish/Subscribe），定义了一个目标管理对象（Subject）和多个观察者对象（Observer），形成一个一对多的关系，当满足某种条件的时候由目标管理对象像所有依赖与自己的观察者对象发送通知。这种模式多用于事件处理。


原理
观察者模式类图：


（图片来源于网络）


Subject：抽象主题（角色），内部用某种数据结]]></description><category></category></item><item><title><![CDATA[【MySQL】－事务的隔离级别]]></title><link>https://blog.youkuaiyun.com/LightOfMiracle/article/details/73779311</link><guid>https://blog.youkuaiyun.com/LightOfMiracle/article/details/73779311</guid><author>LightOfMiracle</author><pubDate>Tue, 27 Jun 2017 12:21:37 +0800</pubDate><description><![CDATA[概述
在标准的SQL中事务的隔离级别一共有四种。事务的隔离级别主要定义了一个事务做出的修改在别的事务中的可见性情况。事务的隔离级别越高通常开销越低，同时并发程度也越高。事务的隔离级别在不同的存储引擎中的实现也是不尽相同的，这里只简单介绍四种标准的隔离级别。（本文很多摘抄自《MySQL》第三版）


四种标准的隔离级别分别为：READ UNCOMMITTED(未提交读)，READ COMMI]]></description><category></category></item><item><title><![CDATA[【Java设计模式】- 装饰器模式]]></title><link>https://blog.youkuaiyun.com/LightOfMiracle/article/details/73733011</link><guid>https://blog.youkuaiyun.com/LightOfMiracle/article/details/73733011</guid><author>LightOfMiracle</author><pubDate>Mon, 26 Jun 2017 10:32:07 +0800</pubDate><description><![CDATA[概述
    装饰器模式：可以动态的为运行时的类添加行为。相比继承而言，继承是直接对某个类的行为进行扩展而装饰器模式是对某个对象进行扩展。
    原理：增加一个修饰类去实现被修饰类相同的接口，同时接收一个被修饰类的实例，并在修饰类中用自己的方法去包裹被修饰类的方法。


    经常使用的Collections的synchronizedList(List list)等方法就是使用了装饰]]></description><category></category></item></channel></rss>