SpringBoot配置文件

目录

properties配置文件

基本语法

读取配置文件

properties缺点分析

yml配置文件

yml基本语法

读取配置文件

配置对象

配置list集合

配置map


配置文件最重要的目的"解决硬编码问题(代码写死),把可能会发⽣改变的信息,放在⼀个集中的地⽅

SpringBoot配置文件有三种格式

①properties ②yaml ③yml(yaml的缩写)

事实上,SpringBoot只支持3个文件

①application.properties ②application.yaml ③application.yml(通常使用这个)

应用程序启动时,SpringBoot会自动从classpath路径找到并加载

也可以通过sspring.config.name指定文件路径和名称

  • 理论上,properties 和.yml 可以并存在于⼀个项⽬中,当.properties 和.yml 并存时,两个配置都会加载.如果配置⽂件内容有冲突,则以.properties 为主,也就是 .properties 优先级更⾼
  • 虽然理论上来讲.properties 可以和.yml 共存,但实际的业务当中,我们通常会采取⼀种 统⼀的配置⽂件格式,这样可以更好的维护(降低故障率).

很多项⽬或者框架的配置信息也放在配置⽂件中,⽐如:

  • 项⽬的启动端⼝(SpringBoot内置了Tomcat服务器,默认端⼝号是8080,但SpringBoot需要⽀持让⽤⼾⾃定义端⼝号)
  • 数据库的连接信息(包含⽤⼾名和密码的设置)
  • 第三⽅系统的调⽤密钥等信息
  • ⽤于发现和定位问题的普通⽇志和异常⽇志等.

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

下面我们在配置文件中修改端口号

XML 复制代码
server.port=9090

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

properties配置文件

properties配置⽂件是最早期的配置⽂件格式,也是创建SpringBoot项⽬默认的配置⽂件

基本语法

以键值对形式配置,key和value之间以"="连接

XML 复制代码
# 配置项⽬端⼝号 
server.port=8080

(配置文件中以"#"来添加注释信息)

读取配置文件

使用@Value注解在项目中主动读取配置文件中的内容

properties配置

XML 复制代码
mykey.key1 = bite
java 复制代码
@RestController
public class PropertiesController {
 @Value("${mykey.key1}")
 private String key1;
 @RequestMapping("/key")
 public String key(){
 return "读取到值:"+key1;
 }
}
properties缺点分析

文件中会有很多冗余信息

为了解决这个问题,可以使用

yml配置文件

yml是yaml的缩写 "Yet Another Markup Language"中文"另一种标记语言"

yml基本语法

key: value(key和value之间使用英文冒号加空格)

java 复制代码
spring:
  datasource:
    url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8&useSSL=false
    username: root
    password: root
读取配置文件
java 复制代码
string:
  str1: hello \n Spring Boot
  str2: 'hello \n Spring Boot'
  str3: "hello \n Spring Boot"
java 复制代码
@RestController
public class ReadYml {
    @Value("${string.str1}")
    private String str1;
    @Value("${string.str2}")
    private String str2;
    @Value("${string.str3}")
    private String str3;
    @RequestMapping("/readyml")
    public String readYml(){
        System.out.println(str1);
        System.out.println(str2);
        System.out.println(str3);
        return "yml";

    }
}

控制台输出:

可以看出,

  • 字符串默认不用加上单引号或双引号
  • 单引号会转义特殊字符,使其失去特殊功能,始终是一个普通字符串
  • 双引号不会转义字符串里面的特殊字符,特殊字符会表示本身的含义
配置对象
java 复制代码
student:
 id: 1
 name: Java
 age: 18

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

使用@ConfigurationProperties读取配置中的对象

java 复制代码
@ConfigurationProperties(prefix = "student")
@Component
@Data
public class Student {
 private int id;
 private String name;
 private int age;
}
java 复制代码
@RestController
public class StudentController {
 @Autowired
 private Student student;
 @RequestMapping("/readStudent")
 public String readStudent(){
 return student.toString();
 }
}
配置list集合
java 复制代码
dbtypes:
 name:
 - mysql
 - sqlserver
 - db2

使⽤@ConfigurationProperties 来读取

java 复制代码
@Component
@ConfigurationProperties("dbtypes")
@Data
public class ListConfig {
 private List<String> name;
}
java 复制代码
@RestController
public class ReadYml2 {
 @Autowired
 private ListConfig listConfig;
 @RequestMapping("/readList")
 public String readList(){
 return listConfig.toString();
 }
}
配置map
java 复制代码
maptypes:
 map:
  k1: kk1
  k2: kk2
  k3: kk3

或者是使⽤⾏内写法

java 复制代码
maptypes: {map: {k1: kk1,k2: kk2, k3: kk3}}

使⽤@ConfigurationProperties 来读取

java 复制代码
@Component
@ConfigurationProperties("maptypes")
@Data
public class MapConfig {
 private HashMap<String,String> map;
}
java 复制代码
@RestController
public class ReadYml2 {
 @Autowired
 private MapConfig mapConfig;
 @RequestMapping("/readMap")
 public String readStudent(){
 return mapConfig.toString();
 }
}
相关推荐
Amarantine、沐风倩✨16 分钟前
设计一个监控摄像头物联网IOT(webRTC、音视频、文件存储)
java·物联网·音视频·webrtc·html5·视频编解码·七牛云存储
路在脚下@1 小时前
spring boot的配置文件属性注入到类的静态属性
java·spring boot·sql
啦啦右一1 小时前
Spring Boot | (一)Spring开发环境构建
spring boot·后端·spring
森屿Serien1 小时前
Spring Boot常用注解
java·spring boot·后端
苹果醋32 小时前
React源码02 - 基础知识 React API 一览
java·运维·spring boot·mysql·nginx
Hello.Reader3 小时前
深入解析 Apache APISIX
java·apache
盛派网络小助手3 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
菠萝蚊鸭3 小时前
Dhatim FastExcel 读写 Excel 文件
java·excel·fastexcel
旭东怪3 小时前
EasyPoi 使用$fe:模板语法生成Word动态行
java·前端·word
007php0073 小时前
Go语言zero项目部署后启动失败问题分析与解决
java·服务器·网络·python·golang·php·ai编程