当前位置: 首页 > article >正文

【JavaEE】Spring(4):配置文件


一、什么是配置文件

在编写代码时会遇到一些 [硬编码] 的问题,我们将可能改变的数据放在一个集中的地方,当程序启动时,应用程序会自动扫描配置文件

硬编码:将数据直接嵌入到程序中,也就是我们常说的把代码写死

1.1 配置文件格式

SpringBoot支持的配置文件有以下三种:

  • application.properties
  • application.yml
  • application.yaml

.yml 和 .yaml 在功能和使用上没有任何区别,这里我们以 .yml 为主

当应用程序启动时,SpringBoot会自动加载这些文件

注意:

  • 当.properties 和 .yml 并存在一个项目中时,则以 .properties 为主,因为.properties的优先级更高
  • 在实际开发中,我们会采取一种统一的配置文件格式

二、properties 配置文件

properties配置文件是创建SpringBoot项目时的默认配置文件

2.1 properties基本语法

properties配置文件中,信息以键值对的形式存在,键和值之间以 = 相连

# 配置项⽬端⼝号
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

配置文件中使用 # 来表示注释信息

2.2 读取配置文件

如果想要主动读取配置文件中的信息,可以使用@Value,假如配置文件有如下内容

1 mykey.key1 = sans

编写程序读取配置文件中的内容:

@RestController
public class PropertiesController {
    @Value("${mykey.key1}")
    private String key1; //将配置文件中mykey.key1的值读取到key1中

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

三、yml配置文件

3.1 yml基本语法

yml配置文件中也是键值对,key 和 value 之间以英文冒号和空格相连,空格不可省略

3.2 yml配置不同类型的数据

#字符串
string.value: Sans

#布尔类型
boolean.value: true
boolean.value1: false

#整数
int.value: 10

#浮点数
float.value: 3.14159

#Null,~代表null
null.value: ~

# 空字符串
empty.value: ''

读取yml配置文件的方式和properties相同,都是采用@Value

【value值加单双引号】

在yml配置文件中,字符串的表示不用加单双引号,如果加上单双引号分别会怎么样,配置信息如下:

string:
  str1: Hello \n Spring Boot.
  str2: 'Hello \n Spring Boot.'
  str3: "Hello \n Spring Boot."

测试:

@Value("${string.str1}")
private String str1;
@Value("${string.str2}")
private String str2;
@Value("${string.str3}")
private String str3;

@RequestMapping("/test")
public void test() {
    System.out.println(str1);
    System.out.println(str2);
    System.out.println(str3);
}

总结:双引号会转义特殊字符,单引号就是一个普通的字符串和什么都不加一样

3.3 配置对象

# 第一种
student:
  id: 1
  age: 18
  name: Sans

# 第二种
student1: {id: 2, name: 18, age: Frisk}

读取对象时,要采用一个新注解:@ConfigurationProperties

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

上述代码如果不加@Data,就得加上属性的get、set方法和重写的toString方法

调用类如下:

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

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

3.4 配置集合

dbtypes:
  name:
    - mysql
    - sqlserver
    - db2

读取集合依然采用 @ConfigurationProperties

@Component
@ConfigurationProperties("dbtypes")
@Data
public class ListConfig {
    private List<String> name;
}

调用类实现如下:

@RestController
public class ListController {
    @Autowired
    private ListConfig listConfig;
    @RequestMapping("/readList")
    public String readList(){
        return listConfig.toString();
    }
}

3.5 配置Map

maptypes:
  map:
    k1: kk1
    k2: kk2
    k3: kk3

读取集合依然采用@ConfigurationProperties

@Component
@ConfigurationProperties("maptypes")
@Data
public class MapConfig {
    private HashMap<String,String> map;
}

调用类实现如下:

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


🙉本篇文章到此结束


http://www.kler.cn/a/528539.html

相关文章:

  • 3.Spring-事务
  • C++ 中的类(class)和对象(object)
  • 计算机组成原理——存储系统(一)
  • DDD - 微服务架构模型_领域驱动设计(DDD)分层架构 vs 整洁架构(洋葱架构) vs 六边形架构(端口-适配器架构)
  • git基础使用--1--版本控制的基本概念
  • 嵌入式知识点总结 Linux驱动 (七)-Linux驱动常用函数 uboot命令 bootcmd bootargs get_part env_get
  • 1992-2025年中国计算机发展状况:服务器、电脑端与移动端的演进
  • Effective Objective-C 2.0 读书笔记—— 方法调配(method swizzling)
  • 【自然语言处理(NLP)】深度学习架构:Transformer 原理及代码实现
  • 2025_2_1 C语言中关于字符串
  • 从 HTTP/1.1 到 HTTP/3:如何影响网页加载速度与性能
  • 交易股指期货有什么技巧吗?
  • C++中的构造器(Constructor)(也称为构造函数)
  • 三、js笔记
  • 扬帆启航于数据结构算法之雅舟旅程,悠然漫步于C++秘境——探索线性表之栈的绮丽定义与精妙实现
  • 10.[前端开发-CSS]Day10-CSS的浮动和flex布局
  • 【LeetCode: 81. 搜索旋转排序数组 II + 二分查找】
  • 汽车中控屏HMI界面,安全和便捷是设计的两大准则。
  • 调音基础学习
  • 【LLM-agent】(task3)数据库对话Agent和RAG接入Agent
  • 【数据结构-前缀树】力扣208. 实现 Trie (前缀树)
  • Baklib揭示内容中台实施最佳实践的策略与实战经验
  • 好用的翻译工具
  • 基于VMware的ubuntu与vscode建立ssh连接
  • java练习(1)
  • 网络编程套接字(中)