快速创建一个SpringBoot项目,选择需要的模块,向导会联网创建SpringBoot项目;
默认生成的SpringBoot项目;
- 主程序已经生成好了,只需要编写自己的逻辑
- resources文件夹中目录结构
static:保存所有静态资源:js、css、images;
templates:保存所有的模板页面(springBoot默认jar包使用嵌入式的tomcat,默认不接受jsp页面),可以使用模板引擎(freemarker、thymeleaf)
application:springBoot应用的配置文件,可以修改默认配置
YAML
- 基本语法:
- key value形式,中间有空格
server:
port: 8080
属性和值也是大小写敏感
值的写法
- 字面量:普通的值(数字,字符串,布尔)
k: v 字面直接写
字符串默认不加上单引号或双引号
“”:双引号:不会转义字符串里面的特殊字符,特殊字符会作为本身表达的意思
name: “zhangsan \n lisi” 输出: zhangsan 换行 lisi
‘’:单引号:会转义特殊字符,特殊字符最终输出
‘zhangsan \n lisi’ 输出:zhangsan \n lisi - 对象、Map(属性和值)(键值对):
k: v:在下一行来下写对象的属性和值的关系:主要缩进
对象还是 k: v 的方式
firends:
name: zhangsan
age: 12
行内写法
friends: {name: zhangsan,age: 20}
- 数组(List、Set):
用 - 值表示数组中的一个元素
pets:
- cat
- dog
- pig
行内写法
pets: [cat,dog,pig]
如何将类绑定配置文件,使其获取配置文件中配置的值
在类上添加 @ConfigurationProperties注解:
/**
@ConfigurationProperties:告诉springboot将本类中的所有属性和配置文件中相关的配置进行绑定
prefix="person":配置文件中哪个下面的所有属性进行一一映射
只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties 功能
*/
@Component
@ConfiguratioProperties(prefix="person")
public class Person{
private String name;
private String age;
.....
}
当使用@Validated注解对数据进行校验时,只能使用@ConfigurationProperties注解来获取配置文件值,而不能使用@Value注解来获取配置文件值
如果说,我们专门编写了一个JavaBean来和配置文件进行映射,我们就直接使用ConfigurationProperties
application.yml配置文件
person类
通过使用@ConfigurationProperties注解获取person值
通过@Value注解获取值
@PropertySource和@ImportResource
@PropertySource:加载指定的配置文件。由于@ConfigurationProperties是用来指定全局属性的,而@PropertySource是用来指定特定的属性(如果一个属性在application.yml文件(全局属性)中和other.properties文件(特有属性)中都存在,则以全局属性为标准)
@PropertySource(value={"classpath:person.properties"})
@Component
@ConfigurationProperties(prefix="person")
//@Validated
public class Person {
// @Email
// @Value("${person.name}")
private String name;
// @Value("#{11*2}")
private String age;
private Map<String,Object> maps;
private List<String> list;
private Dog dog;
@ImportResource:导入Spring的配置文件,让配置文件里面的内容生效;
SpringBoot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;
想让Spring的 配置文件生效,加载进来,@ImportResource标注在一个配置类上
@ImportResource(locations={"classpath:beans.xml"})
导入Spring的配置文件让其生效
SpringBoot推荐给容器中添加组件的方式:推荐使用全注解的方式
1、配置类=======Spring配置文件
2、使用@Bean 给容器中添加组件
配置文件的占位符
RandomValuePropertySource:配置文件中可以使用随机数
- 随机数
${random.value}、${random.int}、${random.long}、${random.int(10)}、$random.int[1024,65536]}
-占位符获取之前配置的值,如果没有可以使用:指定默认值
person:
name: 张三${random.uuid}
age: ${random.int}
maps: {k1:88,k2:00}
list:
- aa
- bb
dog:
name: ${person.hello:hello}_小狗
age: 1
属性配置占位符
app.name=MyApp
app.description=${app.name} is a Spring Boot Application
可以在配置文件中引用前面配置过的属性(优先级前面配置过的这里都能使用)。
${app.name:默认值}来指定找不到属性时的默认值
person:
name: 张三${random.uuid}
age: ${random.int}
maps: {k1:88,k2:00}
list:
- aa
- bb
dog:
name: ${person.name}_小狗
age: 1
Profile
profile是Spring对不同环境提供不同配置功能的支持,可以通过激活、指定参数等方式快速切换环境
-
多Profile文件形式:
多格式:application-{profile}.properties: .application-dev.properties、application-prod.properties
图片中三个properties文件中都设置了端口号,分别为;8081,8082,8083,默认使用端口为application.properties的端口
如何使用dev或者prod文件中的端口 -
多Profile文档块模式:
-
激活方式:
命令行 --spring.profiles.active=dev
在application.properties中激活dev
spring.profiles.active=dev
配置文件 spring.profiles.active=dev
jvm参数 -Dspring.profiles.active=dev
上述操作如何在yml文件中实现
server:
port: 8080
spring:
profiles:
active: dev
person:
name: 张三${random.uuid}
age: ${random.int}
maps: {k1:88,k2:00}
list:
- aa
- bb
dog:
name: ${person.name}_小狗
age: 1
---
server:
port: 8082
spring:
profiles: dev
---
server:
port:8083
spring:
profiles: prod
配置文件加载位置
- SpringBoot启动回扫描以下位置的application.properties或者application.yml文件作为Spring Boot的默认配置文件
file:./config/
file:./
classpath:/config/
classpath:/
以上是按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级配置内容回覆盖低优先级配置的内容
我们也可以通过配置spring.config.location来改变默认配置