Spring 配置

配置文件最主要的目的 : 解决硬编码的问题(代码写死)

SpringBoot 的配置文件,有三种格式

1.properties 

2.yaml

3.yml(是 yaml 的简写)

SpringBoot 只支持三个文件 

1.application.properties

2.application.yaml

3.application.yml

yaml 和 yml 是一样的,学会一个就行

如果一个项目中同时存在 properties 和 yml ,虽然两个都会生效,但是 properties 的优先级更高

但是正常情况下都只有一个文件,多了容易乱

properties 的代码格式一般为键值对的样式,以 = 分割,单词小写,单词之间用 . 分割

下面是一些配置举例,配置端口号和配置数据库先不细说

我们自定义的配置该如何拿到运用呢?

我们创建一个类

package com.example.ioc.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 PropertiesController {//读取配置文件@Value("${demo.key1}")private String key1;@RequestMapping("/readkey")public String readkey(){return "读取到的配置项key1"+key1;}
}

就能成功拿到了

名字一一对应

什么样的内容适合放在配置文件中呢?

那些可能会发生改变的信息,与我的程序运行没有太大关系的,我们就把它放在配置文件中

但是其实我们发现 properties 有很多冗余的信息 比如

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

我们先在 resources 底下创建一个文件,application.yml

yml 文件对比 properties 文件格式,yml 文件把 . 换成冒号+换行,key后面用冒号赋值

这样就可以把端口改为 9090 了

但是我们稍作修改,把9090 前面的空格删掉,再次运行程序,发现修改端口失败了

yml 的格式有严格要求,我们要在值前面的冒号的后面加空格,空格不可省略

我们对数据库相关配置进行修改的样式如下

yml 的自定义配置该如何写并且使用呢?

然后创建一个类

package com.example.ioc.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 YmlController
{@Value("${demo.key1}")public String key1;@RequestMapping ("/readYml")public String readYml(){return key1;}
}

这样就能成功使用了

我们再看看多个数据

 @PostConstruct//这是一个初始化注解,在属性注入完成之后就会执行这个方法

package com.example.ioc.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.PostConstruct;@RestController
public class YmlController
{@Value("${demo.key1}")public String key1;@Value("${demo.key2}")public String key2;@Value("${demo.key3}")public String key3;@RequestMapping ("/readYml")public String readYml(){return key1;}@PostConstruct//这是一个初始化注解,在属性注入完成之后就会执行这个方法public void init(){System.out.println("key1:"+key1);System.out.println("key2:"+key2);System.out.println("key3:"+key3);}
}

我们再看看单双引号的区别

双引号里面的 \n 是换行

单引号会对特殊字符进行转义,因为\n 本身表示的意思是换行,但是使用单引号的时候,内容变成了 \n 而不是换行,所以认为是转义

yml 该如何配置对象?

配置文件为

再创建一个student类

package com.example.ioc;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = "student")
@Data
public class Student {private Integer id;private String name;private Integer age;
}

然后就能运行了 

package com.example.ioc.controller;import com.example.ioc.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.PostConstruct;@RestController
public class YmlController
{@Autowiredpublic Student student;@PostConstruct//这是一个初始化注解,在属性注入完成之后就会执行这个方法public void init(){System.out.println("student:"+student);}
}

yml 如何配置集合呢?

package com.example.ioc.model;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;import java.util.List;@Component
@ConfigurationProperties(prefix = "dbtypes")
@Data
public class DBTypes {private List<String> name;
}

 

package com.example.ioc.controller;import com.example.ioc.model.DBTypes;
import com.example.ioc.model.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.PostConstruct;@RestController
public class YmlController
{@Autowiredpublic DBTypes dbTypes;@PostConstruct//这是一个初始化注解,在属性注入完成之后就会执行这个方法public void init(){System.out.println("dbTypes:"+dbTypes);}
}

用数组去接收也是可以滴

记得要加空格哦

yml 也可以配置map


import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;import java.util.HashMap;
import java.util.List;@Component
@ConfigurationProperties(prefix = "dbtypes")
@Data
public class DBTypes {private List<String> name;private HashMap<String,String> map;
}
package com.example.ioc.controller;import com.example.ioc.model.DBTypes;
import com.example.ioc.model.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.PostConstruct;@RestController
public class YmlController
{@Autowiredpublic DBTypes dbTypes;@PostConstruct//这是一个初始化注解,在属性注入完成之后就会执行这个方法public void init(){System.out.println("dbTypes:"+dbTypes);}
}

yml 的优缺点 :

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAXB的XmlElement注解

依赖 如果基于JAX-WS开发&#xff0c;可以在maven工程的pom.xml文件中增加如下依赖&#xff0c;会将依赖的JAXB库也下载下来&#xff1a; <dependency><groupId>jakarta.xml.ws</groupId><artifactId>jakarta.xml.ws-api</artifactId><vers…

redis三种集群方式

redis有三种集群方式&#xff1a;主从复制&#xff0c;哨兵模式和集群。 1.主从复制 主从复制原理&#xff1a; 从服务器连接主服务器&#xff0c;发送SYNC命令&#xff1b; 主服务器接收到SYNC命名后&#xff0c;开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所…

后端技术知识点内容-全部内容-面试宝典-后端面试知识点

文章目录 -2 flink-1 linux of viewlinux查看占用cup最高的10个进程的命令&#xff1b; 〇、分布式锁 & 分布式事务0-1分布式锁--包含CAP理论模型概述分布式锁&#xff1a;分布式锁应该具备哪些条件&#xff1a;分布式锁的业务场景&#xff1a; 分布式锁的实现方式有&#…

【MySQL--->用户管理】

文章目录 [TOC](文章目录) 一、用户管理表二、基本操作三、用户权限分配给用户某个数据库中某个表的某个权限. grant 权限 on 库.表名 to 用户名主机名. ![在这里插入图片描述](https://img-blog.csdnimg.cn/fe8eb171ef9343c3a09bd64d4f0db5c1.png)分配给用户某个数据库中全部表…

python中Thread实现多线程任务

目录 多线程概括&#xff1a; 使用 Thread 模块创建线程 如果不使用多线程&#xff1a; 多线程概括&#xff1a; 多线程是一种并发执行的编程方式&#xff0c;允许程序同时执行多个独立的线程&#xff0c;每个线程在程序中运行独立的任务。每个线程都是程序的基本执行单元&a…

全新酷盒9.0源码:多功能工具箱软件的最新iapp解决方案

全能工具箱软件酷盒&#xff1a;源码提供iapp解决方案&#xff0c;自定义打造个性化体验 酷盒是一款功能丰富的工具箱软件&#xff0c;内置众多实用功能&#xff0c;并实时更新热门功能。该软件还拥有丰富的资源库&#xff0c;用户可以在线畅玩游戏、免费下载音乐等。 我们提…

k8s的高可用集群搭建,详细过程实战版

kubernetes高可用集群的搭建 前面介绍过了k8s单master节点的安装部署 今天介绍一下k8s高可用集群搭建 环境准备&#xff1a; vip &#xff1a;192.168.121.99 keeplive master01&#xff1a;192.168.121.153 centos7 master02&#xff1a;192.168.121.154 centos7 master03&a…

MongoDB相关基础操作(库、集合、文档)

文章目录 一、库的相关操作1、查看数据库2、查看当前库3、创建数据库4、删除数据库 二、集合的相关操作1、查看库中所有集合2、创建集合2.1、显示创建2.2、隐式创建 3、删除集合 三、文档的相关操作1、插入文档1.1、插入单条文档1.2、插入多条文档1.3、脚本方式 2、查询文档3、…

深入理解注意力机制(下)——缩放点积注意力及示例

一、介绍 在这篇文章中&#xff0c;我们将重点介绍 Transformer 背后的 Scaled Dot-Product Attention&#xff0c;并详细解释其计算逻辑和设计原理。 在文章的最后&#xff0c;我们还会提供一个Attention的使用示例&#xff0c;希望读者看完后能够对Attention有更全面的了解。…

gRPC 四模式之 双向流RPC模式

双向流RPC模式 在双向流 RPC 模式中&#xff0c;客户端以消息流的形式发送请求到服务器端&#xff0c;服务器端也以消息流的形式进行响应。调用必须由客户端发起&#xff0c;但在此之后&#xff0c;通信完全基于 gRPC 客户端和服务器端的应用程序逻辑。 为什么有了双向流模式…

Windows安装Vmware 虚拟机

目录 一、Vmware 虚拟机介绍 二、Vmware 虚拟机的三种网络模式 2.1桥接模式 2.2仅主机模式 2.3NAT 网络地址转换模式 三、Vmware 虚拟机的安装 一、Vmware 虚拟机介绍 VMware Workstation Pro 是一款可以在个人电脑的操作系统上创建一个完全与主机操作系统隔离的 虚拟机&…

Vite - 静态资源处理 - json文件导入

直接就说明白了 vite 中对json 文件直接当作一个模块来解析。 可以直接导入使用&#xff01; 可以直接导入使用&#xff01; 可以直接导入使用&#xff01;json文件中的key&#xff0c;直接被作为一个属性&#xff0c;可以单独被导入。 因此&#xff0c;导入json文件有两种方式…

特效!视频里的特效在哪制作——Adobe After Effects

今天&#xff0c;我们来谈谈一款在Adobe系列中推出的一款图形视频处理软件&#xff0c;适用于从事设计和视频特技的机构&#xff0c;包括电视台、动画制作公司、个人后期制作工作室以及多媒体工作室的属于层类型后期软件——Adobe After Effects。 Adobe After Effects&#xf…

WPF中行为与触发器的概念及用法

完全来源于十月的寒流&#xff0c;感谢大佬讲解 一、行为 (Behaviors) behaviors的简单测试 <Window x:Class"Test_05.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winf…

nodejs+vue慢性胃炎健康管理系统的设计与实现-微信小程序-安卓-python-PHP-计算机毕业设计

随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于慢性胃炎健康管理系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了慢性胃炎健康管理系统&#xff0c; 系统首页、个…

蓝桥杯单片机综合练习——工厂灯光控制

一、题目 二、代码 #include <reg52.h>sfr AUXR 0x8e; //定义辅助寄存器sbit S5 P3^2; //定义S5按键引脚 sbit S4 P3^3; //定义S4按键引脚unsigned char led_stat 0xff; //定义LED当前状态 unsigned char count 0; //定义50ms定时中断累…

GitHub如何删除仓库

GitHub如何删除仓库 删除方法第一步第二步第三步 删除方法 第一步 在仓库的界面选择Settings 第二步 选择General,页面拉到最后。 第三步 后续按照导向删除仓库即可。

C++ Qt 学习(十):Qt 其他技巧

1. 带参数启动外部进程 QProcess 用于启动外部进程int QProcess::execute(const QString &program, const QStringList &arguments);QObject *parent; ... QString program "./path/to/Qt/examples/widgets/analogclock"; QStringList arguments; argument…

论文阅读——DiffusionDet

在目标检测上使用扩散模型 前向过程&#xff1a;真实框-->随机框 后向过程&#xff1a;随机框-->真实框 前向过程&#xff1a; 一般一张图片真实框的数目不同&#xff0c;填补到同一的N个框&#xff0c;填补方法可以是重复真实框&#xff0c;填补和图片大小一样的框&a…

教程:使用 Keras 优化神经网络

一、介绍 在 我 之前的文章中&#xff0c;我讨论了使用 TensorFlow 实现神经网络。继续有关神经网络库的系列文章&#xff0c;我决定重点介绍 Keras——据说是迄今为止最好的深度学习库。 我 从事深度学习已经有一段时间了&#xff0c;据我所知&#xff0c;处理…