一、微服务架构
-
微服务架构的系统是一个分布式的系统,按业务进行划分为独立的服务单元,解决单体系统的不足,同时也满足越来越复杂的业务需求。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
-
all in one的架构方式,我们把所有的功能单元放在一个应用里面。然后我们把整个应用部署到服务器上。如果负载能力不行,我们将整个应用进行水平复制,进行扩展,然后在负载均衡。
-
所谓微服务架构,就是打破之前all in one的架构方式,把每个功能元素独立出来。把独立出来的功能元素的动态组合,需要的功能元素才去拿来组合需要多一些时可以整合多个功能元素。所以微服务架构是对功能元素进行复制,而没有对整个应用进行复制。
-
高内聚,低耦合。
二、SpringBoot
Spring Boot是微服务架构的基础。相比之前的Spring,它主要是省去了大量的样板式配置,取而代之的是根据条件的自动化配置,也提升了开发体验和增加一些新的特性,使开发人员把更多的精力放到业务代码上。
Spring Boot 核心功能:
- 独立运行的 Spring 项目
Spring Boot 可以以 jar 包的形式独立运行,运行一个 Spring Boot 项目只需通过 java–jar xx.jar 来运行。 - 内嵌 Servlet 容器
Spring Boot 可选择内嵌 Tomcat、Jetty 或者 Undertow,这样我们无须以 war 包形式部署项目。 - 提供 starter 简化 Maven 配置
Spring 提供了一系列的 starter pom 来简化 Maven 的依赖加载,例如,当你使用了spring-boot-starter-web 时,会自动加入如图 1 所示的依赖包。 - 自动配置 Spring
Spring Boot 会根据在类路径中的 jar 包、类,为 jar 包里的类自动配置 Bean,这样会极大地减少我们要使用的配置。当然,Spring Boot 只是考虑了大多数的开发场景,并不是所有的场景,若在实际开发中我们需要自动配置 Bean,而 Spring Boot 没有提供支持,则可以自定义自动配置。 - 准生产的应用监控
Spring Boot 提供基于 http、ssh、telnet 对运行时的项目进行监控。 - 无代码生成和 xml 配置
Spring Boot 的神奇的不是借助于代码生成来实现的,而是通过条件注解来实现的,这是 Spring 4.x 提供的新特性。Spring 4.x 提倡使用 Java 配置和注解配置组合,而 Spring Boot 不需要任何 xml 配置即可实现 Spring 的所有配置。
三、Idea创建一个SpringBoot项目
步骤:
- 创建一个新项目:File==》New==》Project…
- 选中Spring Initializr===》Next
-
根据自己Java的版本,Maven仓库的Group和Artifact,以及创建好后的包名等填写好==》Next
-
我们需要添加Dependencies的话,勾选相应的,例如我们需要一个Web项目,选择Web==》勾选sprig Web==》next
- 点击Finish完成创建
- 创建好的项目结构图
- 测试:我们自需要把相应的包建在src/main/java/com.gaolang下就好,然后编写测试代码,什么都不需要配置。
测试类:TestController.java
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@RequestMapping("/test")
public String test(){
return "This is a test project.";
}
}
测试结果:
四、SpringBoot自动装配原理
- pom.xml
spring-boot-dependencies
核心依赖在父工程中- 在引入springboot依赖时,不需要写版本,因为父工程中有版本仓库。
- 启动器
spring-boot-starter-xxx
- 例如,spring-boot-starter-web,就会帮我们导入web环境所有的依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
- 主程序SpringbootApplication .java
@SpringBootApplication
public class SpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootApplication.class, args);
}
}
表面理解:
- 注解@SpringBootApplication:标注这个类是一个springboot的应用
- SpringApplication.run(SpringbootApplication.class, args);//将springboot应用启动
深层次:
-
注解@SpringBootApplication是一个复合 Annotation
-
核心的两个注解:@SpringBootConfiguration和@EnableAutoConfiguration
-
@SpringBootConfiguration:springboot的配置
该注解下还包含:@Configuration:表示一个普通的 JavaConfig 形式的 IoC 容器配置类 -
@EnableAutoConfiguration :是借助 @Import 的帮助,将所有符合自动配置条件的 bean 定义加载到 IoC 容器
-
@ComponentScan 的功能其实就是自动扫描并加载符合条件的组件或 bean 定义,最终将这些 bean 定义加载到容器中。
SpringbootApplication类的作用:
- 1.推断应用的类型是普通的项目还是Web项目
- 2.查找并加载所有可用初始化器,设置到initializers属性中
- 3.找出所有的应用程序监听器,设置到listeners属性中
- 4.推断并设置main方法的定义类,找到运行的主类