SpringBoot 快速入门
-
创建空工程
-
在空工程下创建一个 maven工程
-
将该maven工程变成springboot 工程,只需要在pom文件中指定parent为 springboot的基础包
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.ztone</groupId> <artifactId>springboot-base-quick-01</artifactId> <version>1.0-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.0.5</version> </parent> </project>
现在该工程就变成了 springboot 工程
-
导入 web 对应的启动器 依赖
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
不用指定 版本号,因为在 parent中已经指定了这些启动器的版本号
-
创建项目的启动类
在启动类上加注解 @SpringBootApplication,
在main 方法中调用 SpringApplication的 run方法,该方法会自动创建ioc容器以及启动tomcat服务器
该方法的两个参数:该启动类的class、main方法的参数
package com.ztone; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Main { public static void main(String[] args) { SpringApplication.run(Main.class,args); } }
-
正常创建Controller
问题:
1.为什么spring-boot-starter-web不用写版本号?
在父工程spring-boot-starter-parent 的 父工程 spring-boot-dependencies 中创建了许多能够用到的版本号
2.启动器 Starter 是什么?
在上面导入了 web 启动器的 依赖,之前是导入 spring-webmvc、servlet、jackon等等。现在只需要导入一个启动器,web开发所需要的依赖都导入了。
所以 Starter是一组预定义的依赖项集合,旨在简化Spring程序的配置和构建过程
springboot提供了启动器,第三方也提供了一些启动器
3.@SpringBootApplication注解的作用
在这个注解上,还有三个注解
-
@SpringBootConfiguration 注解,标注该类是一个配置类,因为在这个注解上有 @Configuration
-
@EnableAutoConfiguration,会自动加载配置文件
-
ComponentScan ,扫描包注解。扫描启动类所在的包下的所有注解
Springboot 统一配置管理
在Springboot 工程下,进行统一配置管理,设置各种参数都集中到一个固定位置和命名的配置文件,即 application.properties 或 application.yaml
存放位置应该在 springboot 工程的 src/main/resource目录下
在文件中可以使用 springboot 固定的key 如指定端口号和项目根路径等
也可以自定义key 在 java代码中 用 @Value 注解去读取
YAML 配置文件
由于所有配置都要在 一个配置文件中编写,所以需要保证key 不能重复,就需要有多层结构
通过application.properties 进行配置,每一层是通过 . 来连接
server.port=80
server.servlet.context-path=/ssm
这样写每一次相同结构的key都要全部写出来,有些繁琐
而yaml 格式是层次分明,相同的key作为头部。
server:
port: 80
servlet:
context-path: /ssm
除此之外,还可以表示 集合,用 - 来表示集合
hobby:
- 学习
- 吃饭
- 敲代码
批量读取配置文件内容
读取 yaml 配置文件中的数据,有两种方式:
第一种是 在属性上用 @Value 注解,给属性赋值
这种方式出现的问题是只能读取单个值,不能批量读集合,而且必须将 key写全
@Data
@Component
public class Student {
@Value("${student.zhangsan.username}")
private String username;
@Value("${student.zhangsan.age}")
private int age;
private List<String> hobby;
}
第二种方式是在实体类上加 @ConfigurationProperties(prefix="xxx")
其中prefix 是 指定通用的前缀 比如:student.zhangsan
他要求 属性名要和 最后一个 key相等
@Data
@Component
@ConfigurationProperties(prefix = "student.zhangsan")
public class Student {
private String username;
private int age;
private List<String> hobby;
}
这种方式可以批量读取集合
多环境配置
在SpringBoot中可以配置不同的运行环境(开发、测试、生产),这些配置环境加载不同的配置文件。
yaml配置文件要求是 必须以 application开头,所以可以把不同环境的配置文件命名为 application-dev.yaml 或 application-test.yaml
最终在 application.yaml 总的配置文件中,引入这些分配置文件,使其生效
用的配置名是 spring.profiles.active= dev
spring:
profiles:
active: dev
如果引入的配置文件中的 key 与 总配置文件中的key重复了,最终的值是引入的文件里的值
除了在配置文件中使其生效,还可以通过命令行的方式 -- spring.profiles.active= dev 指定环境配置