SpringBoot 配置文件

SpringBoot 配置文件


1. SpringBoot 配置文件

SpringBoot 支持并定义了配置文件的格式,规范了其他框架集成到 SpringBoot,项目或者框架的配置信息大多放在配置文件中,如:项目的启动端口、数据库的连接信息、第三方系统的调用密钥等信息、用于发现和定位问题的普通日志和异常日志等

2. 配置文件入手

项目的启动端口

SpringBoot 内置了 Tomcat 服务器,默认端口号是 8080 ,我们可以通过配置文件来修改服务的端口号

SpringBoot 在创建项目时,就已经帮我们创建了配置文件

修改 application.properties 文件

java 复制代码
server.port=9090

运行程序,观察日志,显示 Tomcat 启动端口号为 9090

访问程序:[http://127.0.0.1:9090/login.html](http://127.0.0.1:9090/login.html)

3. 配置文件的格式

SpringBoot 配置文件有三种格式:

(1)application.properties

(2)application.yml

(3)application.yaml
yml 是 yaml 的简写,yaml 和 yml 的格式一样。

当程序启动时,SpringBoot 会自动从 classpath 路径找到并加载 application.properties、application.yaml、application.yml 文件,也可也通过 Spring.config.name 指定文件路径和名称。

properties 类型的配置文件就时老版本配置文件,创建 Spring Boot 项目时默认的文件格式,yml 类型的配置文件就是新版本文件。

properties 和 yml 可以同时在一个项目中,当 properties 和 yml 并存时,两个配置文件都会加载,如果配置文件内容有冲突,则以 properties 为主,也就是 properties 优先级更高

4. properties 配置文件

properties 配置文件是最早期的配置文件,也是创建 SpringBoot 项目默认的配置文件

4.1 properties 基本语法

properties 是以键值的形式配置的,key 和 value 之间是以 "=" 连接的,配置文件中使用 "#" 来添加注释信息

java 复制代码
#配置端口号
server.port=8080
#配置数据库连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root

4.2 读取配置文件

使用 @Value 注解来读取配置文件中的内容

@Value 注解使用 "${}" 的格式读取

properties 配置

java 复制代码
my.key=hello
java 复制代码
package com.example.demo.controller;

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

@RestController
@RequestMapping("/prop")
public class ReadPropertiesController {
    @Value("${my.key}")
    private String myKey;

    @RequestMapping("/read")
    public String read() {
        return "myKey:" + myKey;
    }
}

运行结果:http://127.0.0.1:8080/prop/read

4.3 properties 缺点

properties 配置是以 key-value 的形式配置的

从 key 上来看,properties 配置文件中会有很多的冗余信息

5. yml 配置文件

yml 是 yaml 的缩写,全称:Yet Another Markup Language(另一种标记语言)。

5.1 yml 基本用法

yml 是树形结构的配置文件,它的基础语法是"key: value",key 和 value 之间使用英文冒号加空格的方式组成,空格不可以省略

java 复制代码
key: jave

高亮的 key 是正确的

使用 yml 连接数据库

java 复制代码
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=false
    username: root
    password: root

yml 和 properties

5.2 yml 配置文件

yml 读取配置的方式和 properties 相同,使用 @Value 注解即可

yml 配置

java 复制代码
string:
  hello: yml
java 复制代码
package com.example.demo.controller;

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

@RestController
@RequestMapping("/yml")
public class ReadYmlController {
    @Value("${string.hello}")
    private String hello;
    
    @RequestMapping("/ymlKey")
    private String key() {
        return "读取到值:" + hello;
    }
}

运行结果:http://127.0.0.1:8080/yml/ymlKey

5.2.1 value 值加单双引号

字符串默认不用加上单双引号,加上英文单双引号可以表示特殊的含义

yml 配置

java 复制代码
string:
  str1: Hello \n Spring Boot.
  str2: 'Hello \n Spring Boot.'
  str3: "Hello \n Spring Boot."
java 复制代码
package com.example.demo.controller;

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

@RestController
@RequestMapping("/yml")
public class ReadYmlController {
    @Value("${string.str1}")
    private String str1;
    @Value("${string.str2}")
    private String str2;
    @Value("${string.str3}")
    private String str3;

    @RequestMapping("/yml")
    public String readYml() {
        System.out.println(str1);
        System.out.println(str2);
        System.out.println(str3);
        return "yml";
    }
}

运行结果:

(1)字符串默认不用加上单引号或者双引号

(2)单引号会转义特殊字符,使其失去特殊功能,始终是一个普通的字符串

(3)双引号不会转义字符串里面的特殊字符,特殊字符会表示本身的含义

5.2.2 配置对象

yml 中配置对象

java 复制代码
student:
  id: 1
  name: Java
  age: 18

行内写法

java 复制代码
student: {id: 1,name: Java,age: 18}

使用 @ConfigurationProperties 注解来读取

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

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

@Data
@Component
@ConfigurationProperties(prefix = "student")
public class Student {
    private int id;
    private String name;
    private int age;
}

调用类

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

import com.example.demo.entity.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class StudentController {
    @Autowired
    private Student student;

    @RequestMapping("/readStudent")
    public String readStudent() {
        return student.toString();
    }
}

运行结果:http://127.0.0.1:8080/readStudent

5.2.3 配置集合

配置文件也可也配置 list 集合

java 复制代码
dbtypes:
  name:
    - zhangsan
    - lisi
    - wangwu

集合的读取也是使用 @ConfigurationProperties

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

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import java.util.List;

@Data
@Configuration
@ConfigurationProperties(prefix = "dbtypes")
public class DataTypes {
    List<String> name;
}
java 复制代码
package com.example.demo.controller;

import com.example.demo.entity.DataTypes;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/yml")
public class ReadYmlController {
    @Autowired
    private DataTypes dataTypes;

    @RequestMapping("read")
    public String read() {
        return dataTypes.toString();
    }
}

运行代码:http://127.0.0.1:8080/yml/read

5.2.4 配置 Map

配置文件也可以配置 map

java 复制代码
maptypes:
  map:
    k1: kk1
    k2: kk2
    k3: kk3
java 复制代码
package com.example.demo.entity;

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

import java.util.HashMap;

@Data
@Component
@ConfigurationProperties(prefix = "maptypes")
public class MapConfig {
    private HashMap<String,String> map;
}
java 复制代码
package com.example.demo.controller;

import com.example.demo.entity.MapConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/yml")
public class ReadYmlController {
    @Autowired
    private MapConfig mapConfig;
    
    @RequestMapping("/read")
    public String read() {
        return mapConfig.toString();
    }
}

运行结果:http://127.0.0.1:8080/yml/read

5.3 yml 优缺点

优点

(1)可读性高,写法简单,易于理解

(2)支持更多的数据类型

(3)支持更多的编程语言

缺点

(1)不适合写复杂的配置文件

(2)对格式有较强的要求

相关推荐
渣瓦攻城狮2 小时前
解决idea push时账号名密码出现401问题
java·ide·intellij-idea
xqqxqxxq2 小时前
洛谷算法1-2 排序(NOIP经典真题解析)java(持续更新)
java·开发语言·算法
小小仙。2 小时前
IT自学第二十二天
java·开发语言
索荣荣2 小时前
Java Cookie 全面指南:从原理到 Spring Boot 实战
java·开发语言·python
红烧柯基2 小时前
nohup java -jar运行jar包时设置启动参数
java·开发语言·jar
那我掉的头发算什么2 小时前
【Mybatis】动态SQL与留言板小项目
数据库·spring boot·sql·spring·mybatis·配置
有诺千金2 小时前
SpringBoot3的前后端分离架构中使用SpringSecurity的思路
spring boot·架构
Warren982 小时前
一次文件上传异常的踩坑、定位与修复复盘(Spring Boot + 接口测试)
java·开发语言·spring boot·笔记·后端·python·面试
lang201509282 小时前
一键生成Java Web项目:Tomcat-Maven原型解析
java·前端·tomcat