[学习笔记] SpringBoot之SpringBoot配置文件

# 学习 # · 2021-04-18

SpringBoot配置文件

1、SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的:

(1)application.properties

(2)application.yml

2、application.properties配置文件:

# 应用名称
spring.application.name=springboot
# 应用服务 WEB 访问端口
server.port=8080
#下面这些内容是为了让MyBatis映射
#指定Mybatis的Mapper文件
mybatis.mapper-locations=classpath:mappers/*xml
#指定Mybatis的实体目录
mybatis.type-aliases-package=com.aduo.springboot.mybatis.entity
# 数据库驱动:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 数据源名称
spring.datasource.name=defaultDataSource
# 数据库连接地址
spring.datasource.url=jdbc:mysql://localhost:3306/blue?serverTimezone=UTC
# 数据库用户名和密码:
spring.datasource.username=***
spring.datasource.password=***

yaml

1、yaml:以数据为中心,比 json、xml 等更适合做配置文件。

(1)以前的XML配置文件写法:

<server>
    <port>8081</port>
</server>

(2)yaml配置文件的写法:

server:
  port: 8081

2、yaml基本语法:

# 注意:冒号后面的空格不可省略
# ymal以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的
# ymal属性和值对大小写敏感
k: v

3、值的写法:

# 字面量:普通的值(数字,字符串,布尔)
k: v
port: 8081

# 对象、Map(属性和值)(键值对)
friends:
    lastName: zhangsan
    age: 20

friends: { lastName: zhangsan, age: 18 }

# 数组(List、Set):用- 值表示数组中的一个元素
pets:
  - cat
  - dog
  - pig

pets: [cat, dog, pig]

4、注入配置文件:

(1)编写一个实体类:Dog,实体类中有两个属性,name和age。

/**
 * @Package: com.aduo.springboot.pojo
 * @Description: Dog实体类
 * @Author 多仔
 */
@Component  //注册bean到容器中
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Dog {
    private String name;
    private Integer age;
}

(2)原生注入写法:使用@Value给bean注入属性值。

@Value("小狗")
private String name;
@Value("10")
private Integer age;

(3)SpringBoot的测试类下注入Dog并输出查看结果。

@SpringBootTest
class SpringbootApplicationTests {

    @Autowired
    Dog dog;

    @Test
    public void contextLoads() {
        // Dog(name=小狗, age=10)
        System.out.println(dog);
    }

}

(4)新方法:使用yaml配置的方式进行注入。在yaml中配置相关属性:

dog:
  name: 小狗
  age: 20

(5)修改实体类,添加@ConfigurationProperties注解。

/**
 * @ConfigurationProperties的作用:
 * 将配置文件中配置的每一个属性值映射到这个组件中
 * 告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
 * 参使prefix="dog":表示将配置文件中的dog下的所有属性一一对应
 * 注意:只有这个组件是容器中的组件,才能使用该注解
 **/
@ConfigurationProperties(prefix = "dog")
public class Dog {
    private String name;
    private Integer age;
}

(6)导入相关依赖。

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-configuration-processor</artifactId>
      <optional>true</optional>
</dependency>

(7)运行SpringBoot测试类,查看结果。

5、@ConfigurationProperties和@Value的比较:

@ConfigurationProperties@Value
功能批量注入配置文件中的属性一个个指定
松散绑定(松散语法)支持不支持
SpEL不支持支持
JSR303数据校验支持不支持
复杂类型封装支持不支持

(1)在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value。

(2)编写了 javaBean来和配置文件进行映射,使用@ConfigurationProperties。

6、配置文件占位符:

# 随机字符串
value: ${random.value}

# 随机int
value: ${random.int}

# 随机long
value: ${random.long}

# 10以内的随机数
value: ${random.int(10)}

# 10-20的随机数
value: ${random.int[1024,65536]}

7、其他方式加载配置文件:

// @PropertySource:加载指定的配置文件
@PropertySource(value = {"classpath:person.properties"})

// @ImportResource:导入Spring配置文件,让配置文件里面的内容生效
@ImportResource(locations = {"classpath:beans.xml"})

配置文件补充

1、配置文件加载位置:SpringBoot启动会扫描以下位置的application.properties或application.yml文件作为SpringBoot的默认配置文件。

– file:./config/
– file:./
– classpath:/config/
– classpath:/

(1)优先级由高到底,高优先级的配置会覆盖低优先级的配置,SpringBoot会从这四个位置全部加载主配置文件,实现互补配置。

(2)项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置。

java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.location=G:/application.properties

2、Profile:

(1)多环境切换:我们在主配置文件编写的时候,文件名可以是application-{profile}.properties/yml , 用来指定多个环境版本。

(2)yaml多文档模块:

server:
  port: 8081
spring:
  profiles:
    active: prod

---
server:
  port: 8082
spring:
  profiles: dev


---
server:
  port: 8083
spring:
  profiles: test

(3)激活指定的profile:

# 在application-dev.properties配置文件中
spring.profiles.active=dev

# 命令行
java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev;

# 虚拟机参数
-Dspring.profiles.active=dev
如无特殊说明,本博所有文章均为博主原创。

如若转载,请注明出处:一木林多 - https://www.l5v.cn/archives/289/

评论