一、构建最初的工程
1. 用Spring初始化工具搭建SpringBoot工程
2. 编写pom.xml文件
<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
</parent>
<groupId>com.fzj</groupId>
<artifactId>smp</artifactId>
<version>1.0</version>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
在
pom文件上右键,将此工程以maven形式打开
注:不要忘记重要的两步:
- 将
IDEA的编码方式改为UTF-8 - 将
Maven的地址改为正确的地址- 目录地址
- config地址
- 仓库地址
3. 运行启动类
出现以下信息,说明构建成功
2023-03-17 22:57:10.242 INFO 4368 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2023-03-17 22:57:10.251 INFO 4368 --- [ main] com.ssp.SmpApplication : Started SmpApplication in 1.121 seconds (JVM running for 2.696)
4. 关于启动类
@SpringBootApplication
public class SmpApplication {
public static void main(String[] args) {
SpringApplication.run(SmpApplication.class, args);
}
}
SpringBoot的启动类是其执行入口,运行main方法即可启动项目。SpringBoot运行后会初始化Spring容器,扫描启动类所在的包,并加载Bean
二、yml配置
1. SpringBoot提供了三种配置方式:
- properties (默认方式) [ 加载优先级:最高 ]
- yml (主流方式)
- yaml [ 加载优先级:最低 ]
- 不同配置文件中==相同==的配置按照 [ 加载优先级 ] 相互覆盖
- 不同配置文件中的==不同==配置全部保留
2. yml语法规则
- 大小写敏感
- 属性层级关系使用多行描述,每行属性结尾以冒号结束
- 使用缩进表示层级关系,同层级左侧对齐,只允许
空格(禁Tab键) - 属性名和属性值之间以
冒号和空格相隔 - 注释以
#开头
示例:
lesson: Springboot
server:
port: 81
user:
name: messi
age: 33
team:
- 巴塞罗那
- 大巴黎
# 在配置文件中,可以使用 ${属性名} 方式引用属性值
baseDir: /usr/local/study
center:
dataDir: ${baseDir}/data
# 如果属性中出现特殊字符,可以使用双引号包裹起来作为字符的解析
title: "spring\tboot\nstudy"
3.yml属性的读取
1. 用@Value()读取单个数据,属性名引用方式:${一级属性名.二级属性名}
@RestController
@RequestMapping("/book")
public class BookController {
@Value("${lesson}")
private String lesson;
@Value("${server.port}")
private int port;
@Value("${user.team[1]}")
private String team_01;
@GetMapping
public void test(){
System.out.println("lesson: " + lesson);
System.out.println("port: " + port);
System.out.println("team_01: " + team_01);
}
}
运行结果:
lesson: Springboot
port: 81
team_01: 大巴黎
注意:@Value不能获取整个数组的值
如:
@Value("${user.team}")
private String[] team;
会抛出异常:
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'user.team' in value "${user.team}"
即:非法参数异常 抛出的异常表明向方法传递了一个不合法或不正确的参数
2. 封装全部数据到Environment对象
// 封装到Environment 兑现
@Autowired
private Environment environment;
// 使用
@GetMapping
public void test(){
System.out.println("lesson: " + environment.getProperty("lesson"));
System.out.println("port: " + environment.getProperty("server.port"));
System.out.println("team_01: " + environment.getProperty("user.team[1]"));
}
3. 自定义对象封装指定数据
@Component
@ConfigurationProperties(prefix ="user" )
public class User {
private String name;
private int age;
private String[] team;
// getter/setter
}
使用:
@RestController
@RequestMapping("/book")
public class BookController {
@Autowired
private User user;
@GetMapping
public void test(){
System.out.println("user: " + user);
}
}