Spring Boot学习笔记(三) -Spring Boot 项目结构
1、POM文件
1.1、继承
1 | <parent> |
Spring Boot 的父类依赖,只有继承它项目才是Spring Boot 项目。
spring-boot-starter-parent 是一个特殊的starter,它用来提供相关的Maven默认依赖。使用它之后,常用的包依赖可以省去version标签。
1.2、依赖
1 | <dependency> |
启动器依赖
1.3、插件
1 | <build> |
spring-boot-maven-plugin插件是将spring boot 的应用程序打包成jar包的插件。将所有应用启动运行所需要的jar包都包含进来,逻辑上将具备了独立运行的条件。当运行“mvnpackage”进行打包后,使用“java -jar”命令就可以直接运行。
2、启动类
Spring Boot 的启动类的作用是启动Spring Boot项目,是基于Main方法运行的。
注意:启动类在启动时会做注解扫描(@Controller、@Service、@Repository……),扫描位置为同包或者子包下的注释,所以启动类的位置应放于包的根下。
2.1、启动类于启动器的区别
- 启动类表示项目的启动入口
- 启动器表示jar包的坐标
2.2、创建启动类
1
2
3
4
5
6
7
8
9
10
11
12
13package com.xiezhenyu;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* Spring Boot 的启动类
* 启动类必须添加@SpringBootApplication注解
*/
public class SpringBootDemo3Application {
public static void main(String[] args){
SpringApplication.run(SpringBootDemo3Application.class,args);
}
}
3、启动器
Spring Boot将所有的功能场景都抽取出来,做成一个个的starter(启动器),只需要在项目里面引入这些starter相关场景的所有依赖都会导入进来,要用扫描功能就导入扫描场景,在jar包管理上非常方便,最终实现一站式开发。
Spring Boot 提供了多达44个启动器。
spring-boot-starter
这是Spring Boot的核心启动器,包含了自动配置、日志和YAML。
spring-boot-starter-actuator
帮助监控和管理应用。
spring-boot-starter-web
支持全栈式Web开发,包括Tomcat和spring-webmvc。
spring-boot-starter-amqp
通过spring-rabbit来支持AMQP协议(Advanced Message Queuing Protocol)
spring-boot-starter-aop
支持面向切面编程即AOP,包含spring-aop和AspectJ。
spring-boot-starter-artemis
通过Apache Artemis 支持JMS的API(Java Message Service API)。
spring-boot-starter-batch
支持Spring Batch,包含HSQLDB数据库。
spring-boot-starter-cache
支持Spring的Cache抽象
spring-boot-starter-cloud-connectors
支持Spring Cloud Connectors,简化了在像Cloud Foundry 或 Heroku 这样的云平台上连接服务。
spring-boot-starter-data-elasticsearch
支持ElasticSearch搜索和分析引擎,包含spring-data-elasticsearch。
spring-boot-starter-data-gemfire
支持GemFire分布式数据存储,包含spring-data-gemfire。
spring-boot-starter-data-jpa
支持JPA(Java Persistence API),包括spring-data-jpa、spring-orm、Hibernate。
等等。。。。
4、配置文件
Spring Boot 提供一个名称为application的全局配置文件,支持两种properties格式于YAML格式。
4.1、Peoperties格式
配置Tomcat监听端口
1 | 8888 = |
4.2、YAML格式
YAML格式配置文件的拓展名可以是yaml或者yml。
4.2.1基本格式要求
- 大小写敏感
- 使用缩进代表层级关系
- 相同的部分只能出现一次
配置Tomcat监听端口
1 | server: |
4.3、配置文件存放位置
- 当前项目根目录中
- 当前项目根目录下的一个/config子目录
- 项目的resource即classpath根路径中
- 项目的resource即classpath根路径下的/config目录中
4.4、配置文件加载顺序
4.4.1、不同格式的加载顺序
如果同一个目录下,有application.yml也有application.properties,默认先读取application.properties。
如果同一个配置属性,在多个配置文件都配置了,默认使用第一个读取到的,后面读取的不覆盖前面读取到的。4.4.2、 不同位置的加载顺序
4.4.2.1、当前项目根目录下的一个/config子目录中(最高)
config/application.properties
config/application.yml4.4.2.2、当前项目根目录中(其次)
application.properties
application.yml4.4.2.3、项目的resources即classpath根路径下的/config目录中(一般)‘
resources/config/application.properties
resources/config/application.yml4.4.2.4、项目的resources即classpath根路径中(最后)
resources/application.properties
resources/application.yml4.5、配置文件中的占位符
4.5.1、占位符语法
语法:${ }4.5.2、占位符作用
- “${ }”中可以获取框架中提供的方法中的值如:random.int等。
- 占位符可以获取配置文件中的键的值赋给另一个键作为值。
4.5.3、生成随机数
${random.value} - 类似uuid的随机数,没有”-“连接
${random.int} - 随机取整型范围内的一个值
${random.long} - 随机取长整型范围内的一个值
${random.long(100,200)} - 随机生成长整型100-200范围内的一个值
${random.uuid} - 生成一个uuid,有短杠连接
${random.int(10)} - 随机生成一个10以内的数
${random.int(100,200)} - 随机生成一个100-200范围以内的数
4.6、bootstrap配置文件
4.6.1、bootstrap配置文件介绍
Spring Boot 中有两种上下文对象,一种是bootstrap,另一种是application,bootstrap是应用程序的夫上下文,也就是说bootstrap加载优先于application。bootstrap主要用于从额外的资源来加载配置信息,还可以在本地外部配置文件中解密属性。这两个上下文共用一个环境,它是任何Spring应用程序的外部属性的来源。bootstrap里面的属性会优先加载,它们默认也不能被本地相同配置覆盖。
4.6.2、bootstrap配置文件特征
- bootstrap由父ApplicationContext加载,比application优先加载。
- bootstrap里面的属性不能被覆盖。
4.6.3、bootstrap与application的应用场景
application 配置文件主要用于Spring Boot 项目的自动化配置。
bootstrap 配置文件由一下几个应用场景。 - 使用Spring Cloud Config 配置中心时,这时需要在bootstrap配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息。
- 一些固定的不能被覆盖的属性。
- 一些加密/解密的场景。
5、Spring Boot 的核心注解
5.1、@SpringBootApplication
是SpringBoot的启动类。
此注解等同于@Configuration+@EnableAutoConfiguration+@ComponentScan的组合。
5.2、@SpringBootConfiguration
@SpringBootConfiguration注解是@Configuration注解的派生注解,跟@Configuration注解的功能一致,标注这个类是一个配置类,只不过@SpringBootConfiguration是springboot的注解,而@Configuration是spring的注解。
5.3、@Configuration
通过对bean对象的操作代替spring中xml文件
5.4、@EnableAutoConfiguration
Spring Boot自动配置(auto-configuration):尝试根据你添加的jar依赖自动配置你的Spring应用。是@AutoConfigurationPackage和@Import(AutoConfigurationImportSelector.class)注解的组合。
5.5、AutoConfigurationPackage
@AutoConfigurationPackage注解,自动注入主类下所在包下所有的加了注解的类(@Controller、@Service等),以及配置类(@Configuration)
5.6、@Import({AutoConfigurationImportSelect.class})
直接导入普通类
导入实现ImportSelect接口的类
导入事项ImportBeanDefinitionRegistrar接口的类
5.7、@ComponentScan
主键扫描,可自动发现和装配一些Bean。
5.8、@ConfigurationPropertiesScan
@ConfigurationPropertiesScan扫描配置属性。@EnableConfigurationProperties注解的作用是使用@ConfigurationProperties注解的类失效。
原文作者: 谢振瑜
原文链接: https://Xiezhenyu98.github.io/2020/04/05/Spring Boot学习笔记(三) -Spring Boot 项目结构/
版权声明: 转载请注明出处(必须保留作者署名及链接)