SpringBoot02 - 项目结构
(1)POM文件
(1.1)继承
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.RELEASE</version>
<relativePath></relativePath>
</parent>
SpringBoot的父级依赖,只有继承它项目才是SpringBoot项目。
spring-boot-start-parent是一个特殊的starter,用来提供相关的Maven默认依赖。
使用它之后,常用的包依赖可以省去 version 标签。
(1.2)依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
启动器依赖
(1.3)插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
spring-boot-maven-plugin插件是将springboot的应用程序打包成jar包的插件。
将所有应用启动运行所需要的jar包都包含进来,从逻辑上将具备了独立运行的条件。
当运行"mvn package"进行打包后,使用 "java -jar"命令就可以直接运行。
(2)启动类
SpringBoot的启动类的作用是启动SpringBoot项目,是基于Main方法来进行的。
注意: 启动类在启动时会做注解扫描(@Controller、@Service、@Repository......),扫描位置为同包或者子包下的注解,所以启动类的位置应放于包的根下。
(2.1) 启动类与启动器的区别
启动类表示项目的启动入口; 启动器表示 jar包的坐标
(2.2)创建启动类
@SpringBootApplication
public class Demo2SpringBootApplication {
public static void main(String[] args) {
SpringApplication.run(Demo2SpringBootApplication.class,args);
}
}
(3)启动器
SpringBoot将所有的功能场景都抽取出来,做成一个个的starter(启动器),只需要在项目里面引入这些
starter相关场景的所有依赖都会导入进来,要用什么功能就导入什么场景,在jar包管理上非常方便,最终实现一站式开发。
SpringBoot提供了多达44个启动器。
- spring-boot-starter: SpringBoot核心启动器,包含自动配置、日志和YAML。
- spring-boot-starter-actuator: 帮助监控和管理应用。
- spring-boot-starter-web: 支持全栈式Web开发,包含Tomcat和spring-webmvc。
- spring-boot-starter-jdbc: 支持JDBC数据库。
- spring-boot-starter-cache: 支持Spring的Cache抽象。
- spring-boot-starter-batch: 支持Spring Batch,包括 HSQLDB数据库。
- spring-boot-starter-data-elasticsearch: 支持ElasticSearch搜索和分析引擎,包括 spring-data-elasticsearch。
(4)配置文件
SpringBoot提供了一个名称为application的全局配置文件,支持properties和YAML两种格式。
(4.1)Properties格式
server.port=8800 // 配置Tomcat监听端口
(4.2)YAML格式
YAML格式配置文件的扩展名可以为yaml或yml
server:
port: 8888
(4.2.1)基本格式要求
<1>大小写敏感
<2>使用缩进代表层级关系
<3>相同的部分只出现一次
(4.3)配置文件存放位置
- 当前项目根目录中
- 当前项目根目录下的一个/config子目录中
- 项目的resources,即classpath根路径中
- 项目的resources,即classpath根路径下的/config目录中
(4.4)配置文件加载顺序
(4.4.1)不同格式的加载顺序
- 如果同一个目录下,有application.yml也有application.properties,默认先读取application.properties。
- 如果同一个配置属性,在多个配置文件都配置了,默认使用第一个读取到的,后面读取的不会覆盖前面的。
(4.4.2)不同位置的加载顺序
- 优先级第1: 当前项目根目录下的一个/config子目录中(优先级最高) config/application.properties 、config/application.yml
- 优先级第2: 当前项目根目录中(其次)
- 优先级第3: 项目的resources,即classpath根路径中
- 优先级第4: 项目的resources,即classpath根路径下的/config目录中
(4.5)配置文件中的占位符
- 占位符语法: ${}
- 占位符作用:
- ${}中可以读取框架提供的方法中的值。如:random.int等。
- 占位符可以获取配置文件中的键的值赋给另一个键作为值。
- 生成随机数
- ${random.value} : 类似uuid的随机数,没有"-"连接
- ${random.int} : 随机取整型范围内的一个值
- ${random.long} : 随机取长整型范围内的一个值
- ${random.int(100000)}: 随机生成长整型100000范围内的一个值
server:
port: ${random.int(1024,9999)}
school:
name: bearpx
addr: ${school.name}
(4.6)bootstrap配置文件
(4.6.1)bootstrap配置文件介绍
- SpringBoot中有两种上下文对象,一种是bootstrap,另一种是application。bootstrap是应用程序的父上下文。也就是说,bootstrap加载优先于application。
- bootstrap主要用于从额外的资源来加载配置信息,还可以在本地外部配置文件中解密属性。
- 这两个上下文共用一个环境,它是任何Spring应用程序的外部属性的来源,bootstrap里面的属性会优先加载,它们默认也不能被本地相同配置覆盖。
(4.6.2)bootstrap配置文件特征
- bootstrap由父ApplicationContext加载,比application优先加载。
- bootstrap里面的属性不能被覆盖。
(4.6.3)bootstrap 与 application 的应用场景
application 配置文件主要用于SpringBoot项目的自动化配置。
bootstrap配置文件有以下几个应用场景:
- 使用SpringCloudConfig配置中心时,这时需要在bootstrap配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息。
- 一些固定的不能被覆盖的属性。
- 一些加密/解密的场景。
(5) SpringBoot 核心注解
(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)@EanbleAutoConfiguration
SpringBoot自动配置(auto-configuration):尝试根据你添加的jar依赖自动配置你的Spring应用。
是@AutoConfigurationPackage 和 @Import(AutoConfigurationPackage.class)组合。
(5.5)@AutoConfigurationPackage
自动注入主类下所有包下所有的加了注解的类(@Controller,@Service等),以及配置类(@Configuration)。
(5.6)@Import({AutoConfigurationImportSelector.class})
直接导入普通的类; 导入实现了 ImportSelector接口的类; 导入实现了 ImportBeanDefinitionRegistrar接口的类
(5.7)@ComponenetScan
组件扫描,可自动发现和装配一些Bean。
(5.8)@ConfigurationPropertiesScan
扫描配置属性。@EnableConfigurationProperties注解的作用是使用@ConfigurationProperties 注解的类生效。
(6)SpringBoot在Controller层中常用的注解
- @RestController
- 相当于@Controller + @ResponseBoby注解
- 如果使用@RestController注解Controller中的方法无法返回页面,相当于在方法上面自动加了@ResponseBody注解,
- 所以没有办法跳转并传输数据到另一个页面,InternalResourceViewResolver也不起作用,返回的内容就是return的内容。
- @GetMapping: @RequestMapping(method=RequestMethod.GET)的简写。
- @PostMapping: @RequestMapping(method=RequestMethod.POST)的简写。
- @PutMapping: @RequestMapping(method=RequestMethod.PUT)的简写。
- @DeleteMapping:@RequestMapping(method=RequestMethod.DELETE)的简写。
Controller代码:
@RestController public class HelloController { @GetMapping("/hello") public String hello(){ System.out.println("进入到 hello 方法中......"); return "hello Spring!!!"; } }
访问结果: