3.基础配置

目录

1.属性配置

2.配置文件分类

1.application.properties (传统格式/默认格式)

2.application.yml (主流格式)

3.application.yaml

4.配置文件加载优先级

3.yaml文件

1.yaml语法规则

2.字面值表达方式

3.数组数据表达方式

4.对象数组表达式

4.yaml数据读取

1.读取yaml单一属性数据

2.yaml文件中的变量引用

3.读取yaml全部属性数据

4.读取yaml引用类型属性数据


1.属性配置

1.在工作空间中复制对应工程,并修改工程名称

2.删除与Idea相关配置文件,仅保留src目录与pom.xml文件

3.修改pom.xml文件中的artifactId与新工程/模块名相同

4.删除name标签(可选)

5.保留备份工程供后期使用

2.配置文件分类

SpringBoot提供了多种属性配置方式,以修改服务器端口为例,举例说明以下三种属性配置方式的不同

1.application.properties (传统格式/默认格式)

server.port=80

2.application.yml (主流格式)

server:

port:81

3.application.yaml

server:

port:82

4.配置文件加载优先级

如果以上三种配置文件都存在,application.properties(最高) > application.yml > application.yaml (最低)

不同配置文件中相同配置按照加载优先级相互覆盖,不同配置文件中不同配置全部保留

3.yaml文件

1.yaml语法规则

  • 大小写敏感

  • 属性层级关系使用多行描述,每行结尾使用冒号结束

  • 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)

  • 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)

  • 表示注释

2.字面值表达方式

|------------------------------------|--------------------------------------------|
| 值类型 | 说明 |
| boolean: TRUE | TRUE,true,True,FALSE,false,False均可 |
| float: 3.14 | 6.8523015e+5 #支持科学计数法 |
| int: 123 | #支持二进制、八进制、十六进制#0b1010 0111 0100 1010 1110 |
| nu1l:~ | 使用~表示null |
| string: HelloWorld | 字符串可以直接书写 |
| string2:"Hello world" | 可以使用双引号包裹特殊字符 |
| date:2018-02-17 | 日期必须使用yyyy-MM-dd格式 |
| datetime:2018-02-17T15:02:31+08:00 | 时间和日期之间使用T连接,最后使用4代表时区 |

3.数组数据表达方式

数组表示方式:在属性名书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔

java 复制代码
subject:
    - Java
    - 前端
    - 大数据
enterprise:
  name: itcast
  age: 16
  subject:
    - Java
    - 前端
    - 大数据
likes: [王者荣耀,刺激战场] #数组书写缩略格式

4.对象数组表达式

java 复制代码
#对象数组格式
users:
 - name: Tom
   age: 4
 - name: Jerry
   age: 5

#对象数组格式二
users1:
 -
  name: Tom
  age: 4
 -
  name: Jerry
  age: 5

#对象数组缩略格式
users2: [{name:Tom,age:4},{name:Jerry,age:5 }]

4.yaml数据读取

1.读取yaml单一属性数据

  1. 使用@Value读取单个数据,如果数据存在多层级,依次书写层级名称即可,属性名引用方式:${一级属性名,二级属性名....} 。以下为示例代码:
java 复制代码
package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
@RequestMapping("/hello")
public class productController {
    //读取yaml数据中的单一数据
    @Value("${country}")
    private String getCountry;

    @Value("${enterprise.name}")
    private String enterpriseName;

    @Value("${subject[0]}")
    private String subjectFirst;

    @Value("${enterprise.subject[0]}")
    private String enterpriseSubjectFirst;

    @GetMapping
    public String getId()
    {
        String  data ="country:"+ getCountry + ";enterprise.name:"+enterpriseName + ";subjectFirst:"+subjectFirst +";enterpriseSubjectFirst:"+enterpriseSubjectFirst ;

        System.out.println(data);
        return data;
    }
}

2.在浏览器中调用接口:http://127.0.0.1:8081/hello

3.运行结果如下图所示:

2.yaml文件中的变量引用

  • 1.在配置文件中可以使用${属性名}方式引用属性值
  • 2.如果属性中出现特殊字符,可以使用双引号包裹起来作为字符解析

1.application.yml 或 application.yaml 配置文件中配置示例:

复制代码
baseDir: C:\win10
#使用S(属性名}引用数据
tempDir: ${baseDir}\temp

#使用引号包赛的字符串,其中的转义字符可以生效
tempDir2: "${baseDir}\\temp\\t1\\t2\\t3"
  1. 控制器文件代码示例:
java 复制代码
package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
@RequestMapping("/hello")
public class productController {
   

    @Value("${tempDir}")
    private String tempDirStr;

    @Value("${tempDir2}")
    private String tempDirStr2;


    @GetMapping
    public String getId()
    {
        String data ="tempDirStr:" + tempDirStr +";tempDirStr2"+ tempDirStr2;
        System.out.println(data);
        return data;
    }
}

3.在浏览器中调用接口:http://127.0.0.1:8081/hello

4.运行结果如下图所示:

3.读取yaml全部属性数据

  • 1.使用Environment对象封装全部配置信息
  • 2.使用@Autowired自动装配数据到Environment对象中

1.控制器文件代码示例:

java 复制代码
package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
@RequestMapping("/hello")
public class productController {
   
    @Autowired
    private Environment env;

    @GetMapping
    public String getId()
    {
        String  data ="country:"+ env.getProperty("country") + ";enterprise.name:"+ env.getProperty("enterprise.name") + ";subjectFirst:"+env.getProperty("subject[0]") +";enterpriseSubjectFirst:"+env.getProperty("enterprise.subject[0]") ;
        System.out.println(data);
        return data;
    }
}
  1. 打开浏览器:http://127.0.0.1:8081/hello

  2. 运行结果如下图所示:

4.读取yaml引用类型属性数据

1 . application.yml 或 application.yaml 配置文件中配置示例:

#创建类,用于封装下面的数据

#由spring带我们去加载数据到对象中,一定要告诉spring加载这组信息

#使用时候从spring中直按获取信息使用

复制代码
datasource:
  driver: com.mysql.jdbc.Driver
  url: jdbc:mysql:localhost/springboot_db
  username: root
  password: root
  1. 定义数据模型,封装yaml文件中对应的数据,定义为spring管控的bean
java 复制代码
package com.example.demo;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

//1.定义数据模型,封装yaml文件中对应的数据
//2.定义为spring管控的bean
@Component
//3.指定加载的数
@ConfigurationProperties("datasource")
public class MyDataSource {
    private String driver;
    private String url;
    private String username;
    private String password;

    @Override
    public String toString() {
        return "MyDataSource{" +
                "driver='" + driver + '\'' +
                ", url='" + url + '\'' +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }

    public String getDriver() {
        return driver;
    }

    public void setDriver(String driver) {
        this.driver = driver;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}
  1. 控制器文件代码示例:
java 复制代码
package com.example.demo.controller;

import com.example.demo.MyDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
@RequestMapping("/hello")
public class productController {
    @Autowired
    private MyDataSource myDataSource;

    @GetMapping
    public String getId()
    {

        String data = myDataSource.toString();
        System.out.println(myDataSource);
        return data;
    }
}
  1. 打开浏览器:http://127.0.0.1:8081/hello

5.运行结果如下图所示:

相关推荐
minDuck几秒前
ruoyi-vue集成tianai-captcha验证码
java·前端·vue.js
白子寰5 分钟前
【C++打怪之路Lv14】- “多态“篇
开发语言·c++
王俊山IT17 分钟前
C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(5)
开发语言·c++·笔记·学习
为将者,自当识天晓地。19 分钟前
c++多线程
java·开发语言
小政爱学习!21 分钟前
封装axios、环境变量、api解耦、解决跨域、全局组件注入
开发语言·前端·javascript
daqinzl27 分钟前
java获取机器ip、mac
java·mac·ip
k093336 分钟前
sourceTree回滚版本到某次提交
开发语言·前端·javascript
激流丶43 分钟前
【Kafka 实战】如何解决Kafka Topic数量过多带来的性能问题?
java·大数据·kafka·topic
神奇夜光杯44 分钟前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
Themberfue1 小时前
Java多线程详解⑤(全程干货!!!)线程安全问题 || 锁 || synchronized
java·开发语言·线程·多线程·synchronized·