概述
SpringBoot优点
- 快速创建独立运行的Spring项目以及与主流框架集成
- 使用嵌入式的Servlet容器,应用无需打成war包
- starters自动依赖与版本控制
- 大量的自动配置,简化开发,也可修改默认值
- 无需配置xml,无代码生成,开箱即用
- 准生产环境的运行时应用监控
SpringBoot缺点
运维和部署难度大
微服务
微服务单元之间通过HTTP的方式进行轻量级通信
- SpringBoot 构建分布式项目
- SpringCloud 微服务之间互调
- SpringCloud 流式计算,批处理
用maven搭建SpringBoot项目
-
创建maven项目
-
导入SpringBoot的官方依赖
-
创建主程序
-
创建Controller
-
主程序测测试
-
简化部署
springboot的plugin插件能将整个应用打包成jar包, 直接使用java -jar的命令运行
1.pom文件
版本仲裁
springboot的pom依赖的父项目
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
他的父项目时
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath>../../spring-boot-dependencies</relativePath>
</parent>
里面定义了java应用需要的jar包的版本
2.导入的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
spring-boot-starter-web
spring-boot-starter SpringBoot项目的启动器,帮我们导入项目所依赖的依赖
SpringBoot将所有的功能场景抽取出来,做成一个个的starters(启动器),在项目里导入starter,相关场景的所哟襰都会导入进来,需要什么场景就导入什么场景的starter
主程序类,主入口类
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
@SpringBootConfiguration SpringBoot的配置类
标注在哪个类上,表示这是一个SpringBoot的配置类
@Configuration 配置类上来标注这个注解
配置类----配置文件 配置类也是容器中的一个组件@Component
@EnableAutoConfiguration 开启自动配置功能
以前我们需要配置的东西,SpringBoot帮我们自动配置,@EnableAutoConfiguration告诉SpringBoot开启自动配置的功能,这样自动配置才能生效
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
@AutoConfigurationPackage:自动配置包
@Import({Registrar.class})
Spring的底层注解@import,给容器中导入一个组件,导入的组件由AutoConfigurationPackages.Registrar.class
将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器中
@Import({AutoConfigurationImportSelector.class})
给容器中注入组件?
AutoConfigurationImportSelector:导入哪些组件的选择器;
将所有需要导入的组件以全类名的方式返回,这些组件就会被添加到容器中
会给容器中导入很多自动配置类(xxxAutoConfiguration),就是给容器中导入这个场景所需要的所有组件,并配置好这些组件
有了自动配置类,免去了我们手动编写配置注入功能组件等的工作
SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
自动配置原理
从AutoConfigure类路径下的META-INF/spring.factories获取指定的类的值(类名),将这些值(xxxAutoConfiguration)作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作,以前需要我们自己配置的东西,这些配置类都帮我们做了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zPBEk2lG-1574851872810)(C:Users86176AppDataRoamingTyporatypora-user-images1574416204824.png)]
Spring-boot-autoconfigure-2.2.1.RELEASE.jar
在properties中我们能配置的属性都是来源于这个功能的properties类
根据当前不同的条件判断,决定这个配置类是否生效?
一但这个配置类生效:这个配置类就会给容器中添加各种组件;这些组件的属性是从对应的properties类中获取的,这些类里面的每一个属性又是和配置文件绑定的;
xxxAutoConfiguration;自动配置类 每个配置类相当于以前的配置文件
给容器中添加组件
xxxproperties类:封装配置文件中相关属性
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8idaFIUA-1574851872811)(C:Users86176AppDataRoamingTyporatypora-user-images1574417239452.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NFpg0TOA-1574851872811)(C:Users86176AppDataRoamingTyporatypora-user-images1574417096356.png)]
自动配置类必须在一定的条件下才能生效
我们怎么知道哪些配置类生效???
通过启动debug=true属性;来让控制台打印自动配置报告,这样我们就可以很方便的知道哪些自动配置类生效
SpringBoot精髓
- SpringBoot启动会加载大量的自动配置类
- 我们看我们需要的功能有没有SoringBoot默认写好的自动配置类
- 我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件有,我们就不需要再来配置了)
- 给容器中自动配置类添加组件的时候,会从properties类中获取某些属性,我们就可以在配置文件中指定这些属性的值
配置文件的书写
SpringBoot的配置文件,名称是固定的
- application.properties
- application.yml
yml相比于xml更加简洁,以数据为中心
基本语法
k:(空格)v
左对齐属于同一级别
值的写法
k: v
字符串默认不使用单引号或者双引号
""双引号:不会转义字符串里的特殊字符,特殊字符会作为本身想表达的意思
''单引号:会转义特殊字符,特殊字符最终只是一个普通的字符串数据
对象,map(属性和值)(键值对)
persion:
lastName: zhangsan
age: 20
行内写法
persion: {lastName: zhangsan,age: 18}
数组(List.Set)
用- 值表示数组中的一个元素
pets:
- cat
- dog
- pig
行内写法
pets: [cat,dog,pig]
注解使用
@Component //表示将这个组件交给spring管理
@ConfigurationProperties(prefix = "k") //表示这个类使用springBoot配置文件里配置的值 需要导入配置文件处理器的依赖(会有提示)
@Value("${persion.name}")
@Value("#{11*2}")
@Value("true")
@Vailidated 校验的注解
@Email 必须是邮箱格式
@ConfigurationProperties和@Value获取值的比较
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入 | 一个个指定 |
松散语法 | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
只获取单项值,用@Value
用JavaBean来映射,用@ConfigurationProperties
@PropertySource()和@ImportResource区别
@PropertySource(value = {"classpath:自定义的配置文件"}) 导入自定义的配置文件
@ImportResource(locations ={"classpath:spring的配置文件"} ) 写在启动类上,导入spring的配置文件
springboot推荐方式
@Configuration 表明这是一个配置和类
@Bean 写在方法上,返回方法的返回值给容器
配置文件占位符
随机数
占位符获取之前配置的值,如果没有可以用:来指定默认值
多Profile(环境)模式
多peofile文件—(开发,测试),默认使用application,使用自定义的需要在application.properties中指定
yml里用—文档块来表示
激活 spring.profiles.active=模式
- 配置文件中指定
- 命令行方式
- 虚拟机参数
配置文件有优先级,从高到低加载,互补配置
- file:./config/
- file:./
- classpath:/config/
- calsspath:/
- 也可以通过spring.config.location来改变默认配置
多peofile文件—(开发,测试),默认使用application,使用自定义的需要在application.properties中指定
yml里用—文档块来表示
激活 spring.profiles.active=模式
- 配置文件中指定
- 命令行方式
- 虚拟机参数
配置文件有优先级,从高到低加载,互补配置
- file:./config/
- file:./
- classpath:/config/
- calsspath:/
- 也可以通过spring.config.location来改变默认配置
最后
以上就是清脆大叔为你收集整理的SpringBoot项目总结SpringBoot优点SpringBoot缺点微服务用maven搭建SpringBoot项目主程序类,主入口类自动配置原理配置文件的书写注解使用多Profile(环境)模式的全部内容,希望文章能够帮你解决SpringBoot项目总结SpringBoot优点SpringBoot缺点微服务用maven搭建SpringBoot项目主程序类,主入口类自动配置原理配置文件的书写注解使用多Profile(环境)模式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复