Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
aalansehaiyang committed Mar 10, 2018
1 parent dfeacb6 commit efa959d
Show file tree
Hide file tree
Showing 18 changed files with 212 additions and 171 deletions.
27 changes: 17 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
* [连接池](data-base/数据库连接池.md)
* [事务](data-base/transaction.md)
* [分库分表](data-base/分库分表.md)
* [id生成器](data-base/id生成器.md)
* [id生成器](data-base/id-generate.md)
* [读写分离](http://blog.csdn.net/itomge/article/details/6909240)
* [SQL调优](data-base/sql-optimize.md)
* [其它](data-base/other.md)
Expand Down Expand Up @@ -87,17 +87,11 @@
* [tsharding](middle-software/tsharding.md)
* [tddl](https://github.com/alibaba/tb_tddl)
* [sharding-jdbc](middle-software/sharding-jdbc.md)
* [dbsplit](https://gitee.com/robertleepeak/dbsplit)

* 分布式协调服务
* [zookeeper](middle-software/zookeeper.md)

* 大数据
* [Hbase](middle-software/Hbase.md)
* [Spark](middle-software/Spark.md)
* [Hadoop](middle-software/Hadoop.md)
* [Hive](middle-software/Hive.md)
* [other框架](middle-software/big-data.md)

* 配置管理

* [super-diamond](other/super-diamond源码分析.md)
Expand All @@ -107,6 +101,19 @@
* 分布式文件系统
* [FastDFS](middle-software/FastDFS.md)

* 分布式任务调度框架

* [Elastic-Job](https://github.com/elasticjob/elastic-job)
* [详解当当网的分布式作业框架elastic-job](http://www.infoq.com/cn/articles/dangdang-distributed-work-framework-elastic-job)
* [TBSchedule](http://blog.csdn.net/taosir_zhang/article/details/50728362)

* 大数据
* [Hbase](middle-software/Hbase.md)
* [Spark](middle-software/Spark.md)
* [Hadoop](middle-software/Hadoop.md)
* [Hive](middle-software/Hive.md)
* [other框架](middle-software/big-data.md)

* 其它
* [数据库binlog的增量订阅&消费组件](https://github.com/alibaba/canal)
* [数据库同步系统](https://github.com/alibaba/otter)
Expand All @@ -122,7 +129,7 @@
### 项目管理

* [论需求调研的重要性](project-management/论需求调研的重要性.md)
* [项目管理](project-management/项目管理案例.md)
* [项目管理](project-management/project-management.md)
* [代码管理](project-management/code.md)
* [测试相关](project-management/test.md)

Expand Down
131 changes: 131 additions & 0 deletions basic-knowledge/springboo-note.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
## spring boot 笔记
---

#### 框架---模块---体系---生态

#### 简介

springboot是基于spring+java+web容器,微服务框架的杰出代表。微服务其实就是将服务粒度做小,使之可以独立承担对外服务的的职责。

##### 特征
* 遵循“约定胜于配置”的原则,使用spring boot只需要很少的配置,大部分时候可以使用默认配置
* 项目快速搭建,可以配置整合第三方框架
* 可完全不使用xml配置,借助java config
* 内嵌Servlet(如 Tomcat)容器,可以jar包运行
* 运行中的应用状态监控

**微服务优势:**

* 独立性。每个微服务都是一个独立的项目。可以独立对外提供服务,可以将研发人力资源很好的分摊,避免人力资源密集带来的沟通、协作成本。(低耦合原则)
* 稳定性。任何一个微服务的失败都将只影响自己或少量其他微服务,不会影响整个服务运行体系。

SpringApplication将一个典型的spring应用启动的流程“模板化”,默认模板化后执行流程就可以满足需求了,如果有特殊需求,SpringApplication在合适的流程节点开放了一系列不同类型的扩展点,我们可以通过这些扩展点对SpringBoot程序的启动和关闭过程进行扩展。

```
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class,
DataSourceTransactionManagerAutoConfiguration.class })
public class Main extends WebMvcConfigurationSupport {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(Main.class, "classpath*:/spring/*.xml");
app.setShowBanner(false);
app.run(args);
}
}
```

**执行流程:**

1.如果我们使用的是SpringApplication的静态run方法,首先需要创建一个SpringApplication对象实例。

a)使用SpringFactoriesLoader在应用的classpath中查找并加载所有可用的ApplicationContextInitialize

b)使用SpringFactoriesLoader在应用的classpath中查找并加载所有可用的ApplicationListener

c)设置main方法的定义类

2.开始执行run方法的逻辑,首先遍历执行所有通过SpringFactoriesLoader加载到的SpringApplicationRunListener,调用它们的started()方法,告诉这些SpringApplicationRunListener,SpringBoot应用要开始执行了。

3.创建并配置当前SpringBoot应用将要使用的Environment

4.遍历并调用所有的SpringApplicationRunListener的environmentPrepared()方法,告诉它们,Springboot应用使用的Environment准备好了

5.确定SpringBoot应用创建什么类型的ApplicationContext,并创建完成,然后根据条件决定是否使用自定义的ShutdownHook,是否使用自定义的BeanNameGenerator,是否使用自定义的ResourceLoader,然后将准备好的Environment设置给创建好的ApplicationContext使用

6.ApplicationContext创建完成,SpringApplication调用之前加载的ApplicationContextInitialize的initialize方法对创建好的ApplicationContext进行进一步的处理

7.遍历所有SpringApplicationRunListener的contextPrepared()方法,通知它们,SpringBoot应用使用的ApplicationContext准备好了

8.将之前通过@EnableAutoConfiguration获取的所有配置以及其他形式的Ioc容器配置加载到已经你准备完毕的ApplicationContext

9.遍历所有的SpringApplicationRunListener的contextLoader()方法,告知ApplicationContext已装载完毕

10.调用ApplicationContext的refresh()方法,完成Ioc容器可用的最后一道工序

11.查找当前ApplicationContext中是否注册有CommandLineRunner,如果有,则遍历执行它们

12.遍历所有的SpringApplicationRunListener的finished()方法,告知,“初始化完成”

---

##### spring boot提供了很多“开箱即用”的依赖模块,以"spring-boot-starter-"开头,以解决不同场景问题。

1.SpringBoot应用将自动使用logback作为应用日志框架,

```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
```

2.得到一个直接可执行的web应用,当前项目下直接运行mvn spring-boot:run 就可以直接启动一个嵌入tomcat服务请求的web应用。

默认访问地址:http://localhost:8080

```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
```
如果想使用其它容器,可引入spring-boot-starter-jetty

另外可以修改server.port使用自己指定的端口

3.访问数据库依赖此模块。

```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
```


4.负责web应用安全,配合spring-boot-starter-web使用


```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
```


5.监控,了解应用的运行状态


```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
```

上面只是介绍一些常用的组件,sping社区还有很多其它优秀的组件,可以根据自己的业务情况研究自取。



149 changes: 8 additions & 141 deletions basic-knowledge/springboot.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,149 +5,16 @@


* [源码](https://github.com/spring-projects/spring-boot)
* [spring boot 笔记](springboo-note.md)
* [SpringBoot 组件接入示例](https://github.com/aalansehaiyang/SpringBoot-Learning)
* [java autoConfig配置](springboot-javaConfig.md)
* [代码热部署](springboot-hot-reload.md)
* [eclipse中如何跑spring boot的单元测试](springboot-unit.md)

#### 资料

* http://www.ityouknow.com/spring-boot
* https://github.com/JeffLi1993/springboot-learning-example
* https://github.com/spring-projects/spring-boot
* http://www.jianshu.com/collection/f0cf6eae1754
* http://zh.lucida.me/blog/java-8-lambdas-insideout-language-features/
* 《SpringBoot揭秘--快速构建微服务体系》
* [Spring干货汇总](https://mp.weixin.qq.com/s/VFHmOIp-H4lgh4gQE-cj5A)


---

#### 框架---模块---体系---生态

#### 简介

springboot是基于spring+java+web容器,微服务框架的杰出代表。微服务其实就是将服务粒度做小,使之可以独立承担对外服务的的职责。

##### 特征
* 遵循“约定胜于配置”的原则,使用spring boot只需要很少的配置,大部分时候可以使用默认配置
* 项目快速搭建,可以配置整合第三方框架
* 可完全不使用xml配置,借助java config
* 内嵌Servlet(如 Tomcat)容器,可以jar包运行
* 运行中的应用状态监控

**微服务优势:**

* 独立性。每个微服务都是一个独立的项目。可以独立对外提供服务,可以将研发人力资源很好的分摊,避免人力资源密集带来的沟通、协作成本。(低耦合原则)
* 稳定性。任何一个微服务的失败都将只影响自己或少量其他微服务,不会影响整个服务运行体系。

SpringApplication将一个典型的spring应用启动的流程“模板化”,默认模板化后执行流程就可以满足需求了,如果有特殊需求,SpringApplication在合适的流程节点开放了一系列不同类型的扩展点,我们可以通过这些扩展点对SpringBoot程序的启动和关闭过程进行扩展。

```
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class,
DataSourceTransactionManagerAutoConfiguration.class })
public class Main extends WebMvcConfigurationSupport {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(Main.class, "classpath*:/spring/*.xml");
app.setShowBanner(false);
app.run(args);
}
}
```

**执行流程:**

1.如果我们使用的是SpringApplication的静态run方法,首先需要创建一个SpringApplication对象实例。

a)使用SpringFactoriesLoader在应用的classpath中查找并加载所有可用的ApplicationContextInitialize

b)使用SpringFactoriesLoader在应用的classpath中查找并加载所有可用的ApplicationListener

c)设置main方法的定义类

2.开始执行run方法的逻辑,首先遍历执行所有通过SpringFactoriesLoader加载到的SpringApplicationRunListener,调用它们的started()方法,告诉这些SpringApplicationRunListener,SpringBoot应用要开始执行了。

3.创建并配置当前SpringBoot应用将要使用的Environment

4.遍历并调用所有的SpringApplicationRunListener的environmentPrepared()方法,告诉它们,Springboot应用使用的Environment准备好了

5.确定SpringBoot应用创建什么类型的ApplicationContext,并创建完成,然后根据条件决定是否使用自定义的ShutdownHook,是否使用自定义的BeanNameGenerator,是否使用自定义的ResourceLoader,然后将准备好的Environment设置给创建好的ApplicationContext使用

6.ApplicationContext创建完成,SpringApplication调用之前加载的ApplicationContextInitialize的initialize方法对创建好的ApplicationContext进行进一步的处理

7.遍历所有SpringApplicationRunListener的contextPrepared()方法,通知它们,SpringBoot应用使用的ApplicationContext准备好了

8.将之前通过@EnableAutoConfiguration获取的所有配置以及其他形式的Ioc容器配置加载到已经你准备完毕的ApplicationContext

9.遍历所有的SpringApplicationRunListener的contextLoader()方法,告知ApplicationContext已装载完毕

10.调用ApplicationContext的refresh()方法,完成Ioc容器可用的最后一道工序

11.查找当前ApplicationContext中是否注册有CommandLineRunner,如果有,则遍历执行它们

12.遍历所有的SpringApplicationRunListener的finished()方法,告知,“初始化完成”

---

**springboot提供了很多“开箱即用”的依赖模块,以"spring-boot-starter-"开头,以解决不同场景问题。**

1.SpringBoot应用将自动使用logback作为应用日志框架,

```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
```

2.得到一个直接可执行的web应用,当前项目下直接运行mvn spring-boot:run 就可以直接启动一个嵌入tomcat服务请求的web应用。

默认访问地址:http://localhost:8080

```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
```
如果想使用其它容器,可引入spring-boot-starter-jetty

另外可以修改server.port使用自己指定的端口

3.访问数据库依赖此模块。

```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
```


4.负责web应用安全,配合spring-boot-starter-web使用


```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
```


5.监控,了解应用的运行状态


```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
```

上面只是介绍一些常用的组件,sping社区还有很多其它优秀的组件,可以根据自己的业务情况研究自取。


* 系列
* [Spring Boot系列文章](http://www.ityouknow.com/spring-boot)
* [springboot-learning-example](https://github.com/JeffLi1993/springboot-learning-example)
* [Spring Boot 简书](http://www.jianshu.com/collection/f0cf6eae1754)
* [Spring干货汇总](https://mp.weixin.qq.com/s/VFHmOIp-H4lgh4gQE-cj5A)
* 《SpringBoot揭秘--快速构建微服务体系》
*

18 changes: 11 additions & 7 deletions basic-knowledge/springcloud.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,20 @@ spring --> spring boot --> spring cloud
* [Spring Cloud 构建微服务示例](https://github.com/aalansehaiyang/spring-cloud-example)
* [spring Cloud 核心组件](https://github.com/ityouknow/spring-cloud-examples)

* [注册中心Eureka](http://www.ityouknow.com/springcloud/2017/05/10/springcloud-eureka.html)
* [注册中心 Eureka](http://www.ityouknow.com/springcloud/2017/05/10/springcloud-eureka.html)
* 生产中我们可能需要三台或者大于三台的注册中心来保证服务的稳定性,配置的原理其实都一样,将注册中心分别指向其它的注册中心
* [服务注册与发现](http://blog.didispace.com/springcloud6/)
* [熔断器Hystrix](http://www.ityouknow.com/springcloud/2017/05/16/springcloud-hystrix.html)
* [智能路由Zuul](https://mp.weixin.qq.com/s/5PQ9iyPfYCEcJ5W7q0T2oQ)
* [熔断器 Hystrix](http://www.ityouknow.com/springcloud/2017/05/16/springcloud-hystrix.html)
* [服务网关 Zuul](https://mp.weixin.qq.com/s/5PQ9iyPfYCEcJ5W7q0T2oQ)
* 通过一个API网关根据请求的url,路由到相应的服务
* Ribbon
* 客户端负载均衡的服务调用组件
* Feign
* 基于Ribbon和Hystrix的声明式服务调用组件
* [服务网关zuul初级篇](http://www.ityouknow.com/springcloud/2017/06/01/gateway-service-zuul.html)
* [客户端负载均衡 Ribbon](http://blog.didispace.com/spring-cloud-starter-dalston-2-2/)
* 通过在客户端中配置ribbonServerList来设置服务端列表去轮询访问以达到均衡负载的作用。
* [客户端负载均衡 Feign](http://blog.didispace.com/spring-cloud-starter-dalston-2-3/)
* Feign是基于Ribbon实现的,所以它自带了客户端负载均衡功能,也可以通过Ribbon的IRule进行策略扩展。
* 创建接口并用注解来配置它即可完成对Web服务接口的绑定。它具备可插拔的注解支持,包括Feign注解、JAX-RS注解。它也支持可插拔的编码器和解码器。Spring Cloud Feign还扩展了对Spring MVC注解的支持,同时还整合了Ribbon和Eureka来提供均衡负载的HTTP客户端实现。
* config
* 配置中心
* [SpringCloud-Learning](https://github.com/dyc87112/SpringCloud-Learning)
* [SpringCloud.cc](https://springcloud.cc/spring-cloud-dalston.html)

Expand Down
10 changes: 7 additions & 3 deletions data-base/id生成器.md → data-base/id-generate.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@

---

### 资料

* [分布式ID生成器](https://mp.weixin.qq.com/s/qO84jWhQ5O2mPafsHrh2bA)
* [通用的ID产生器--Vesta](https://gitee.com/robertleepeak/vesta-id-generator)


---
如果单表,可以借助于mysql自带的id生成器每次自增+1的方式来生成主键id。

如果分库分表,需要提前在外部生成id,然后将记录插入到对应的分表中。
Expand Down Expand Up @@ -88,6 +95,3 @@ public IDRange getNextRange(String app, String key, int size) {
}
```

#### 其它资料

* [分布式ID生成器](https://mp.weixin.qq.com/s/qO84jWhQ5O2mPafsHrh2bA)
Loading

0 comments on commit efa959d

Please sign in to comment.