application.properties 和 application.yml

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

PS:⼩技巧:配置⽂件中使⽤"#"来添加注释信息。

更多配置信息随着课堂练习再学习.感兴趣的也可以参考官⽹:Spring Boot配置。

4.2 读取配置⽂件

如果在项⽬中,想要主动的读取配置⽂件中的内容,可以使⽤@Value 注解来实现。

@Value 注解使⽤" ${} "的格式读取,如下代码所⽰

properties配置如下:

java 复制代码
mykey.key1 = bite

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

@RestController
public class PropertiesController {
     @Value("${mykey.key1}")
     private String key1;

     @RequestMapping("/key")
     public String key(){
         return "读取到值:"+key1;
     }
}

最终执⾏效果:

4.3 properties 缺点分析

properties配置是以key-value的形式配置的,如下图所⽰:

从上述配置key看出,properties配置⽂件中会有很多的冗余的信息,⽐如这些:

想要解决这个问题,就可以使⽤yml配置⽂件的格式化了.

5. yml 配置⽂件说明

yml是YAML是缩写,它的全称YetAnotherMarkupLanguage翻译成中⽂就是"另⼀种标记语⾔. 我们先来学习yml的语法

5.1 yml 基本语法

yml是树形结构的配置⽂件,它的基础语法是"key:value".

key和value之间使⽤英⽂冒号加空格的⽅式组成,空格不可省略

基础语法如下:

第⼀项的配置为正确的,key也是⾼亮显⽰的.第⼆项没有空格是错误的使⽤⽅式,第⼆项的key也 没有⾼亮显⽰

使⽤ yml 连接数据库

yml使⽤⽰例:

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

5.2 yml 使⽤进阶

5.2.1 yml 配置不同数据类型及 null

java 复制代码
# 字符串 
string.value: Hello
# 布尔值,true或false 
boolean.value: true
boolean.value1: false
# 整数 
int.value: 10
# 浮点数 
float.value: 3.14159
# Null,~代表null 
null.value: ~
# "" 空字符串 
#, 直接后⾯什么都不加就可以了, 但这种⽅式不直观, 更多的表⽰是使⽤引号括起来 
empty.value: ''
5.2.1.1 yml 配置读取

yml读取配置的⽅式和properties相同,使⽤@Value注解即可,实现代码如下:

yml配置:

java 复制代码
string:
 hello: bite
@RestController
public class ReadYml {
 @Value("${string.hello}")
 private String hello;
 @RequestMapping("/ymlKey")
 public String key(){
 return "读取到值:"+hello;
 }
}

访问:http://127.0.0.1:8080/ymlKey

运⾏结果:

5.2.1.2 注意事项:value值加单双引号

字符串默认不⽤加上单引号或者双引号,如果加英⽂的单双引号可以表⽰特殊的含义。 尝试在application.yml中配置如下信息:

复制代码
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("/yml")
 public String readYml(){
 System.out.println(str1);
 System.out.println(str2);
 System.out.println(str3);
 return "yml";
 }
}

以上程序的执⾏结果如下图所⽰:

从上述结果可以看出:

• 字符串默认不⽤加上单引号或者双引号。

• 单引号会转义特殊字符,使其失去特殊功能,始终是⼀个普通的字符串.

• 双引号不会转义字符串⾥⾯的特殊字符,特殊字符会表⽰本⾝的含义.

此处的转义理解起来会有些拗⼝,\n本意表⽰的是换⾏

使⽤单引号会转义,就是说,\n不再表⽰换⾏了,⽽是表⽰⼀个普通的字符串

使⽤双引号不会转义,表⽰\n表⽰的是它本⾝的含义,就是换⾏

JavaEE的学习重在理解和使⽤,不纠结概念和描述

5.2.2 配置对象

我们还可以在yml中配置对象,如下配置:

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

 age: 18

或者是使⽤⾏内写法(与上⾯的写法作⽤⼀致):

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

这个时候就不能⽤@Value来读取配置中的对象了,此时要使⽤另⼀个注解 @ConfigurationProperties 来读取,具体实现如下:

java 复制代码
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@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();
 }
}

访问http://127.0.0.1:8080/readStudent 运⾏结果如下:

5.2.3 配置集合

配置⽂件也可以配置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();
 }
}

5.2.4 配置Map

配置⽂件也可以配置map,如下所⽰:

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

或者是使⽤⾏内写法(与上⾯的写法作⽤⼀致):

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

Map的读取和对象⼀样,也是使⽤@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();
 }
}

5.3 yml优缺点

优点:

  1. 可读性⾼,写法简单,易于理解

  2. ⽀持更多的数据类型,可以简单表达对象,数组,List,Map等数据形态.

  3. ⽀持更多的编程语⾔,不⽌是Java中可以使⽤,在Golang,Python,Ruby,JavaScript中也可以使⽤

缺点:

  1. 不适合写复杂的配置⽂件

⽐如properties格式如下

java 复制代码
keycloak.realm = demo
keycloak.resource = fm-cache-cloud
keycloak.credentials.secret = d4589683-Oce7-4982-bcd3
keycloak.security[0].authRoles[0]= user
keycloak.security[0].collections[0].name = ssologinurl
keycloak.security[0].collections[0].patterns[0] = /login/*

转换为yml

java 复制代码
keycloak:
 realm: demo
 resource: fm-cache-cloud
 credentials:
 secret: d4589683-Oce7-4982-bcd3
 security:
 - authRoles:
 - user
 collections:
 - name: ssologinurl
 patterns:
 - /login/*

转换的过程也⽐较花费精⼒,如果配置更复杂⼀点,可读性会更差,代码也会更难写

  1. 对格式有较强的要求(⼀个空格可能会引起⼀场⾎案)
相关推荐
唐青枫1 小时前
Java JdbcTemplate 实战指南:用 Spring 轻量完成数据库增删改查
java·spring boot·spring
未秃头的程序猿1 小时前
别再让大模型单打独斗了!Java 多 Agent 协作实战:任务拆解+结果聚合
java·后端·ai编程
右耳朵猫AI1 小时前
Java & JVM技术周刊 2026年第20周
java·开发语言·jvm
人道领域1 小时前
【LeetCode刷题日记】538.把二叉搜索树转换为累加树
java·开发语言·后端·算法·leetcode
铁皮哥1 小时前
【后端开发】什么是守护线程,和普通线程有什么区别?
java·开发语言·数据库·人工智能·python·spring·intellij-idea
西凉的悲伤1 小时前
Spring Boot + ShardingSphere 介绍
java·spring boot·后端·shardingsphere·分库分表
Lsk_Smion1 小时前
力扣实训 _ [33].搜索旋转排序数组 _ [92].翻转链表Ⅱ
java·数据结构·算法
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题 第86题】【Mysql篇】第16题:MySQL 中锁的种类与行锁实现原理?
java·开发语言·数据库·mysql·面试
code2roc2 小时前
SpringBoot整合Milvus向量数据库
数据库·spring boot·milvus·向量化