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.运行结果如下图所示:

相关推荐
东阳马生架构2 分钟前
订单初版—5.售后退货链路中的技术问题说明文档
java
小小寂寞的城7 分钟前
JAVA策略模式demo【设计模式系列】
java·设计模式·策略模式
阿猿收手吧!24 分钟前
【计算机网络】HTTP1.0 HTTP1.1 HTTP2.0 QUIC HTTP3 究极总结
开发语言·计算机网络
JAVA学习通24 分钟前
图书管理系统(完结版)
java·开发语言
abigalexy31 分钟前
深入Java锁机制
java
paishishaba31 分钟前
处理Web请求路径参数
java·开发语言·后端
七七七七0732 分钟前
C++类对象多态底层原理及扩展问题
开发语言·c++
神仙别闹33 分钟前
基于Java+MySQL实现(Web)可扩展的程序在线评测系统
java·前端·mysql
程序无bug35 分钟前
Java中的8中基本数据类型转换
java·后端