SpringBoot
boot source
我们从JavaSE一路走来,Java程序集成mysql实现crud,再到Spring框架MVC
架构,集成mybatis,能够让我们做简单的web开发,也能够大大降低代码量。而
在spring的框架中,我们存在着大量的xml配置文件,也比较复杂。这时候Boot
横空出世,类似于SpringMVC,自动装配,简化开发约定大于配置轻量级,
同时集成了大量的第三方的库配置(Redis,MongoDB,RabbitMQ等),而且boot
项目几乎可以0配置就可以使用。简而言之,boot并不是新框架,只是整合了所有的
框架,类似于maven整合了所有的jar包。
advantage
- 为所有Spring开发者能够更好的入门,进官网配置一分钟即可搭建好一个boot
项目。 - 提供各种默认配置来简化配置。
- 内嵌式服务器简化web项目。
- 没有xml文件的配置。
谈谈微服务
微服务是一种架构风格,在开发一个应用的时候,这个应用必须构建成一系列小服务
的组合,通过各种网络协议进行互通,举个栗子,mvc架构中,有adminService,
userService等,随着这些业务变得更加庞大,会把这些不同的业务层放置于不同
的电脑上,这下懂了吧,就是将一个个服务进行拆分。
我刚刚举的例子,这其实就是一个单体应用架构(all in one),将一个应用
中的所有服务,都封装在一个应用中。可进行数据库,web访问等等,最终打成war包。
想想这都在同一台电脑上,易于开发和测试,方便部署;缺点就是如果要进行对业务
等的改动,哪怕是一个非常小的地方,都得停掉整个服务,重新进行打包,所以不利
于后期维护与扩展。
微服务架构
将所有的功能放在同一个应用里边,然后把整个应用部署到服务器上,水平复制和
扩展,进行负载均衡。微服务架构就是将每个功能元素独立出来,将独立出来
的元素进行动态组合,即对功能元素进行复制,而没有对整个应用进行复制。一个
大型的微服务架构,就像一个复杂的神经网络,每一个神经元就是一个功能元素,
各自完成任务,然后通过http请求进行调用。如果要对其中的一个模块进行改动或
升级,仅需要更新它所在的服务单元即可。
boot原理
- 自动装配:核心依赖(版本号)在父工程中自动管理
- 启动器:示例是web场景下的启动器,自动帮我们导入web环境的所有依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
@SpringBootApplication
//主程序
package com.cyl.back;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication //标注此类为一个springboot的应用
public class BackApplication {
public static void main(String[] args) {
//将springboot应用启动
SpringApplication.run(BackApplication.class, args);
}
}
核心注解(source)
@SpringBootConfiguration//指boot项目的配置
@Configuration//spring配置类
@Component//组件
@EnableAutoConfiguration//自动配置
@AutoConfigurationPackage//自动配置包
@Import(AutoConfigurationPackages.Registrar.class)
//导入选择器
boot所有的自动配置都是在启动的时候扫描并加载,spring.factories所有的
自动配置类都在其中,仅需要导入对应的start包,自动装配就会生效,然后配置
成功。整合JavaEE,解决方案和自动配置的东西都在boot-autoconfigure的jar
包中。
vital
-
boot项目在启动的时候,从类路径下/META-INF/spring.factories获取
指定的值 -
将这些自动配置的类导入容器(configuration就是一个容器),自动配置就会
生效 -
spring-boot-autoconfigure-2.2.0RELEASE.jar包解决整合JavaEE
和自动配置 -
它会把所有需要的组件,以类名的方式返回,这些组件就会被添加到容器中。
//示例,截取一小段
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\
org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,\
org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration,\
org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration,\
org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration,\
- 容器中存在非常多的xxxAutoConfiguration文件,就是这些类给容器中
导入这个场景所需的所有组件,举个栗子,我现在创建的是web项目,它就导入
各种所需的组件包,并进行自动配置,所以就免去了我们手动配置文件的操作 。
主启动类
package com.cyl.back;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class BackApplication {
public static void main(String[] args) {
SpringApplication.run(BackApplication.class, args);
}
}
- 查找并加载所有可能用到的初始化jar包,设置到initializers属性中
- 设置main方法的定义类,找到运行的主类