【JavaEE】Spring Boot 配置文件详解

一.配置文件的相关概念.

  • 配置文件主要用于配置应用程序的行为和属性. Spring Boot的配置文件提供了一种灵活且强大的方式,用于管理应用程序的配置信息。
  • 很多项目或框架的配置信息也放在配置文件中:
    • 项目的启动端口.
    • 数据库的连接信息(用户名/密码/驱动等的信息).
    • 第三方系统的调用密钥等信息.
    • 用于发现和定位问题的普通日志和异常日志等.
  • Spring Boot配置文件的格式有三种:
    • application.properties
    • application.yml.
    • application.yaml.

  1. yml为yaml的简写,在实际开发的过程中出现的频率最高.
  2. 当应用程序启动时, Spring Boot会自动从classpath路径找到并加载application.properties 和 application.yaml 或者 application.yml 文件.
  3. 理论上讲== .properties 和 .yml 可以并存在于一个项目中==,但在实际的业务当中,我们通常会采取一种统一的配置文件格式,这样可以更好的维护. 当 .properties 和 .yml并存时,两个配置都会加载. 如果配置文件内容有冲突, 则以 .properties 为主, 也就是.properties 优先级更高.

二.properties配置文件说明

1.properties基本语法

  • properties配置文件是以键值的形式配置的,key 和 value 之间是以"="连接的.
  • 举个例子来说明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=120348
  • properties的缺点:properties的配置文件中会有很多的冗余的信息.
    在这里插入图片描述

2.读取properties配置文件的数据.

  • 如果在项目中,想要主动的读取配置文件中的内容,可以使用 @Value 注解来实现。@Value 注解使用" ${} "的格式读取,
  • 配置文件代码: mykey.key1=zhangsan
  • 测试代码:
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;
 }
}

运行结果:
在这里插入图片描述

三.yml配置文件说明.

1.yml的基本语法

  • 它的全称 Yet Another Markup Language 翻译成中文就是"另一种标记语言".

  • yml 是树形结构的配置文件,它的基础语法是"key: value". key 和 value 之间使用英文冒号加空格的方式组成.空格不能省略.
    在这里插入图片描述

  • 第一项的配置为正确的,key 也是高亮蓝色显示的. 第⼆项没有空格是错误的使用方式,第二项的 key 没有高亮显示,该种配置的方式不会生效.

  • 使用yml配置文件连接数据库.

spring:
	datasource:
		url: jdbc:mysql://127.0.0.1:3306/dbname?characterEncoding=utf8&useSSL=false
		username: root
		password: root

2.读取yml配置文件的数据.

1.使用@Value读取yml配置文件的数据

读取基本数据类型以及null
package com.tuanzi.ssm.springhome01.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
    @Value("${string.value}")
    private String value;
    @RequestMapping("/getValue")
    public String getValue() {
        return "读取到值"+value;
    }
}

在这里插入图片描述

注意事项:value 值加单双引号
字符串默认不用加上单引号或者双引号,如果加英文的单双引号可以表示特殊的含义。
配置如下信息:

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

运行结果:
在这里插入图片描述

  • 从上述结果可以看出:
    • 字符串默认不用加上单引号或者双引号。
    • 单引号会转义特殊字符,使其失去特殊功能, 始终是一个普通的字符串.
    • 双引号不会转义字符串里面的特殊字符, 特殊字符会表示本身的含义.
    • 此处的转义理解起来会有些拗口, \n 本意表示的是换行, 使用单引号会转义, 就是说, \n 不再表示换航了, 而是表示一个普通的字符串. 使用双引号不会转义, 表示 \n 表示的是它本身的含义, 就是换行

2.使用@ConfigurationProperties读取yml配置文件的数据

读取的是一个对象.
  • 在yml配置文件中配置如下信息:
student:
  id: 1
  name: java
  age: 18
@ConfigurationProperties(prefix = "student")
@Data
@Component
public class Student {
    private Integer id;
    private String name;
    private Integer age;
    
}
@RestController

public class StudentController {
    @Autowired
    private Student student;

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

运行结果
在这里插入图片描述

读取的是一个集合
  • 在yml配置文件中配置如下信息:
dbtypes:
  name:
    - mysql
    - sqlserver
    - db2

@Component
@ConfigurationProperties("dbtypes")
@Data
public class ListConfig {
 	private List<String> name;
}
@RestController
public class ReadYml2 {
 	@Autowired
 	private ListConfig listConfig;
 	@RequestMapping("/readList")
 	public String readList(){
 	return listConfig.toString();
 	}
 }

运行结果:
在这里插入图片描述

读取的是一个Map
  • 在yml配置文件中配置如下信息:
maptypes:
 map:
 	k1: kk1
 	k2: kk2
 	k3: kk3
@Component
@ConfigurationProperties("maptypes")
@Data
public class MapConfig {
 	private HashMap<String,String> map;
}
@RestController
public class ReadYml3 {
 	@Autowired
 	private MapConfig mapConfig;
 	@RequestMapping("/readMap")
 	public String readStudent(){
 	return mapConfig.toString();
 	}
 }

运行结果:
在这里插入图片描述

3.yml的优缺点

优点:
  1. 可读性高,写法简单, 易于理解
  2. 支持更多的数据类型, 可以简单表达对象, 数组, List,Map等数据形态.
  3. 支持更多的编程语言, 不止是Java中可以使用, 在Golang, Python, Ruby, JavaScript中也可以使用.
缺点:
  1. 对格式有较强的要求.
  2. 不适合写复杂的配置文件
  • 比如properties格式如下
keycloak.realm = demo
keycloak.resource = fm-cache-cloud
keycloak.credentials.secret = d4589683-Oce7-4982
keycloak.security[0].authRoles[0]= user
keycloak.security[0].collections[0].name = ssolog nur
keycloak.security[0].collections[0].patterns[0] = /login/*
  • 转换为yml
keycloak:
 realm: demo
 resource: fm-cache-cloud
 credentials:
 secret: d4589683-Oce7-4982-bcd3
 security:
 - authRoles:
 - user
 collections:
 - name: ssologinurl
   pattern:
     - /login/* 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/693003.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python 使用scrapy框架

1、安装scrapy 2、使用scrapy创建项目,在终端命令行 执行如下命令&#xff0c;会创建一个myproject项目 scrapy startproject myproject 3、创建完成后&#xff0c;目录结构如下 4、cd myproject进入项目 ,执行scrapy genspider weather ******&#xff0c;会在spiders下创建…

Linux驱动应用编程(四)IIC(获取BMP180温度/压力数据)

本文目录 一、基础1. 查看开发板手册&#xff0c;获取可用IIC总线2. 挂载从机&#xff0c;查看从机地址。3. 查看BMP180手册&#xff0c;使用命令读/写某寄存器值。4. 查看BMP180手册通信流程。 二、IIC常用API1. iic数据包/报2. ioctl函数 三、数据包如何被处理四、代码编写流…

《软件定义安全》之二:SDN/NFV环境中的安全问题

第2章 SDN/NFV环境中的安全问题 1.架构安全 SDN强调了控制平面的集中化&#xff0c;从架构上颠覆了原有的网络管理&#xff0c;所以SDN的架构安全就是首先要解决的问题。例如&#xff0c;SDN实现中网络控制器相关的安全问题。 1.1 SDN架构的安全综述 从网络安全的角度&…

Client does not support authentication protocol requested by server

连接mysql数据库报错 Client does not support authentication protocol requested by server; 打开命令行进入mysql mysql -uroot -p ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY 123456;FLUSH PRIVILEGES;重新连接成功

P1072 [NOIP2009 提高组] Hankson 的趣味题

Hankson 的趣味题 这题要有思维&#xff01;对。数论&#xff01;最大公约数与最小公倍数。 用LaTex写公式&#xff0c;真的麻烦&#xff01;wcnmd!,,,,,,be---- 于是我用手写了&#xff1a; 大功告成&#xff01;上马&#xff01; #include<cstdio> using namespace …

Python | Leetcode Python题解之第134题加油站

题目&#xff1a; 题解&#xff1a; class Solution:def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:start, cur_res, total_res 0, 0, 0for i in range(len(gas)):cur_res gas[i] - cost[i]total_res gas[i] - cost[i]if cur_res < 0:cur_r…

MFA 轰炸:苹果用户的攻击目标

一些 Apple (苹果) 用户报告了利用密码重置功能进行的网络钓鱼攻击。 你注意到 iPhone 上的系统提示你输入密码。你点击“不允许”。然后这种情况一次又一次地发生。 在某个时候&#xff0c;你可能会感到恼火或开始恐慌&#xff0c;然后点击“允许”。 然后&#xff0c;你接…

【LeetCode:312. 戳气球+ 动态规划】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

创建google cloud storage notification 的权限问题

问题 根据google 的文档&#xff1a; https://cloud.google.com/storage/docs/reporting-changes#command-line 明确表示&#xff0c; 要创建storage notificaiton &#xff0c; 创建者(or service account) 只需要bucket 和 pubsub admin roles 但是实际上我在公司尝试为1个…

《令狐带你阅读JDK源码之简单集合ArrayList》

文章目录 Java简单集合ArrayList继承体系源码解析 总结 大家好哈&#xff0c;欢迎来到令狐小哥本期专栏&#xff0c;这期专栏主要是带着大家阅读JDK源码&#xff0c;我会分几期篇幅来介绍这个jdk源码、会进行剖析、梳理&#xff0c;欢迎大家指正阅读。后面我会配套自己的视频进…

C 语言实现Linux终端显示IP二维码

调试信息&#xff1a;开发者可以在终端生成二维码&#xff0c;包含调试信息或日志数据&#xff0c;便于移动设备扫描和查看。设备配置&#xff1a;物联网设备配置时&#xff0c;通过终端生成配置二维码&#xff0c;扫描后进行设备配置。 Ubuntu/Debian 环境安装二维码库 sudo a…

超详解——python数字和运算——小白篇

目录 1.位运算 2. 常用内置函数/模块 math模块&#xff1a; random模块&#xff1a; decimal模块&#xff1a; 3.内置函数&#xff1a; 总结&#xff1a; 1.位运算 位运算是对整数在内存中的二进制表示进行操作。Python支持以下常见的位运算符&#xff1a; 按位与&…

python字典应用

""" 字典应用 字典中保存了股票信息&#xff0c;完成下面的操作 1.找出股票价格大于100元的股票并创建一个新的字典 2、找出价格最高和最低的股票对应的股票代码 3.按照股票价格从高到低给股票代码排序 """stocks {AAPL: 191.88,G00G: 1186.96,…

记一次postgresql拼接函数string_agg() 和row_number() 使用

PG两个函数使用需求和简单介绍 需求背景介绍第一个需求背景是这样的需求升级一下接下来讲讲STRING_AGG()基本语法排序 然后我们再说说ROW_NUMBER()基本语法使用 row_number() over (partition by) 进行分组统计使用 row_num限定每组数量 需求背景介绍 第一个需求背景是这样的 …

【传知代码】BLIP - VLP任务的新框架(论文复现)

前言&#xff1a;在当今人工智能与机器学习领域&#xff0c;视觉-语言预训练&#xff08;Vision-and-Language Pre-training, VLP&#xff09;任务正逐渐崭露头角&#xff0c;其对于推动跨模态智能系统的进步起着至关重要的作用。在这些系统中&#xff0c;图像与文本不再是孤立…

Python | Leetcode Python题解之第137题只出现一次的数字II

题目&#xff1a; 题解&#xff1a; class Solution:def singleNumber(self, nums: List[int]) -> int:a b 0for num in nums:b ~a & (b ^ num)a ~b & (a ^ num)return b

【vue实战项目】通用管理系统:图表功能

目录 前言 1.概述 2.数据概览页 2.1.柱状图 2.2.折线图 2.3.地图 前言 本文是博主前端Vue实战系列中的一篇文章&#xff0c;本系列将会带大家一起从0开始一步步完整的做完一个小项目&#xff0c;让你找到Vue实战的技巧和感觉。 专栏地址&#xff1a; https://blog.csd…

harbor1.7.1的访问报错502 bad gateway

背景&#xff1a; 在访问harbor镜像仓库时提示报错如下&#xff1a; 问题分析&#xff1a; 根据提供的报错内容来看时harbor服务的nginx组件服务异常了的&#xff0c;导致无法访问harbor服务&#xff0c;查看harbor服务结果如下&#xff1a; serviceharbor:~/harbor$ docker…

MicroPython esp32 连接wifi 配网

整体流程&#xff1a; 1&#xff09;开启STA 和 AP 模式 2&#xff09;扫描周围wifi 保存在 变量 wifi_list&#xff08;后面要用到&#xff09; 3) 尝试STA模式连接Wifi&#xff0c;并查寻状态。 4) 如果STA 无法连网&#xff0c;就用AP模式&#xff0c;创建热点。 5&a…

Vue数据动态代理机制的实现

Object.defineProperty() &#xff08;1&#xff09;这个方法是ES5新增的 &#xff08;2&#xff09;这个方法的作用是&#xff1a;给对象新增属性&#xff0c;或者设置对象原有的属性 &#xff08;3&#xff09;用法&#xff1a;Object.defineProperty(给哪个对象新增属性,‘…