一.主配置类
@SpringBootApplication
标注主程序类,说明这个类是 主配置类
package org.peach.dreamework.controller;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
二.配置文件
1. 配置文件(默认参数/自定义属性)
- 约定大于配置: 项目运行的参数如端口号等,如果想改以及自定义属性,可以用配置文件来进行修改;
- 全局配置文件: application.properties/ application.yaml
/application.yml*文件,放在 *scr/main/resources 或者 类路径/config下面; - 细节: 名字必须为application,一般配置一个就好,若properties文件和yaml文件都有,则取并集,如果属性名称一样,则取properties;
# 1. 使用空格(非tab)表示层级关系
# 2. 缩进空格数目无关,但相同层级属性要左对齐
# 3. key value 形式,二者均大小写敏感
# 4. 支持三种类型:对象,数组,字面量
# 修改默认参数
server:
port: 8089
# 自定义market对象
market:
# 1. 字面量(数字,布尔,字符串)
age: 18
married: true
# 字符串默认不加引号
gender: woman
# 加上“”, 特殊字符可生效, \r\n换行: 与系统有关
job: "hunter \r\n cookie"
# 加上‘’,特殊字符不会生效
nation: 'China \r\n US'
# 配置文件占位符:${}: 可以取当前配置类里面的值
sex: ${market.gender}_is perfect
# 先取配置文件中,如果有,则用配置文件,如果没有,则取该默认值
address: ${market.home:New York}
# 32位的随机String字符串
firstNum: ${random.value}
# 随机int
secondNum: ${random.int}
# 随机long
thirdNum: ${random.long}
# 随机10以内的正int
fourthNum: ${random.int(10)}
# 随机12-15的数字,包含12和15
fivthNum: ${random.int[12,15]}
# 2. 对象,Map
apple:
color: red
price: 10
weight: 65kg
# 行内写法
peach: {color: yellow, price: 20, weight: 100kg}
# 3. 数组: - cat中间有空格
pet:
- cat
- dog
- rabbit
# 行内写法
flower: [rose,grass,tree]
package org.peach.dreamework.bo;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Map;
/*1 去配置文件中找market属性下所有的值*/
@ConfigurationProperties(prefix="market")
/*2. 将这个bean放在容器内,再从controller注入该类*/
@Component
@Data
public class Market {
/*字段名称必须和配置文件中一一对应,否则取不到*/
private int age;
private String married;
private String gender;
private String job;
private String nation;
private String sex;
private String address;
private String firstNum;
private int secondNum;
private long thirdNum;
private int fourthNum;
private int fivthNum;
private String[] pet;
private String[] flower;
private Apple apple;
private Map<String,Object> peach;
}
package org.peach.dreamework.bo;
import lombok.Data;
@Data
public class Apple {
private String color;
private String price;
private String weight;
}
package org.peach.dreamework.controller;
import org.peach.dreamework.bo.Market;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MarketController {
/*先将该对象注入进来,启动即可访问一个有具体值的对象*/
@Autowired
private Market market;
@RequestMapping("/marketinfo")
public Market getInfo(){
return market;
}
}
三. 多环境配置文件切换
实际开发中,dev,test,prod多环境的application.yaml文件中配置的参数不同,因此SpringBoot提供了多环境切换的方式;
1.配置文件,直接启动
1.1. 提供多个application.yaml文件
yaml文件
applicaiton.yaml文件
# 先取application.yaml文件中的配置
# 如果下面有profiles属性,先取并集,再用profiles属性中的来覆盖重名,
server:
port: 9000
# 配置文件用application-{}.yaml文件形式命名
spring:
profiles:
active: prod
applicaiton-dev.yaml文件
server:
port: 9001
applicaiton-prod.yaml文件
server:
port: 9002
properties文件
# 用法和yaml文件类似,也是提供三个配置文件
server.port=9000
spring.profiles.active=prod
1.2. yaml文件支持 多文档块
server:
port: 9001
spring:
profiles:
active: prod
# --- 将一个yaml文件分为三个文档块
---
# 声明是dev环境
spring:
profiles: dev
server:
port: 9001
---
# 声明是prod环境
spring:
profiles: prod
server:
port: 9002
2. IDEA参数配置(忽略配置中active)
Program arguments参数 OR VM options虚拟机参数
3. 运维重新配置环境(忽略配置中active)
- 项目打包成jar后,运维在部署项目时候,需要切换环境时,不可能去改代码,再重新打包;
- 可以通过命令行的方式来配置环境;
- 打包-在jar包所在目录下,打开CMD窗口;
- java -jar profile-1.0-SNAPSHOT.jar
–spring.profiles.active=prod
四. 配置文件位置
1. 本地启动
2. 运维工作
- 项目打包,运维如果想修改某些参数,可以在cmd窗口指定配置文件位置;
- 项目启动,先去指定位置找文件,再按照项目中的配置文件优先级再去加载,形成互补和覆盖配置;
java -jar profile-1.0-SNAPSHOT.jar --spring.config.location= F:\he\application.yaml
五. 启动jar包,配置文件加载顺序
项目启动后,按照如下优先级从高往低,进行覆盖互补配置;
1. 命令行:
- java -jar profile-1.0-SNAPSHOT.jar --server.port=1000
–server.context-path=/jam 来指定几个参数; - java -jar profile-1.0-SNAPSHOT.jar --spring.config.location
F:\he\application.yaml指定一个配置文件的位置;(配置文件位置任意);
2. 由外到内,由带profile到不带profile:
外部配置文件必须和jar包在同一个目录下,cmd直接启动
- 1: JAR包外部的application-{profile}.properties/yaml
或application.properties/yaml(带profiles属性); - 2: JAR包内部的application-{profile}.properties/yaml
或application.properties/yaml(带profiles属性); - 3: JAR包外部的application.properties/yaml
或application.properties/yaml(不带profiles属性); - 4: JAR包内部的application.properties/yaml
或application.properties/yaml(不带profiles属性);
其他优先级配置可以参考SpringBoot官网