【Spring框架全系列】SpringBoot配置文件相关操作

news2024/11/14 17:37:53

🌇哈喽,大家好,我是小浪。上篇博客我们已经学习了如何创建一个Spring项目,那么创建Spirng项目还可以直接通过在Spring官网的方式来创建,做法也非常的简单,感兴趣的小伙伴可以在C站搜个教程尝试一下;那么,今天我们就来学习SpringBoot如何配置文件;💡💡

📲目录

一、为什么要配置文件,配置文件的作用?

二、SpringBoot配置文件的方法

二、SpringBoot配置文件的格式

一、properties

二、yml

三、读取配置文件

1、properties

2、yml

3、配置对象


一、为什么要配置文件,配置文件的作用?

🍧因为:整个项目中所有重要的数据都是在配置⽂件中配置的,⽐如:
🚅1、数据库的连接信息(包含⽤户名和密码的设置);
🚄2、项目的启动端口;
🚂3、第三方系统的调⽤秘钥等信息;
🚝4、用于发现和定位问题的普通⽇志和异常⽇志等。
🛰想象⼀下如果没有配置信息,那么 Spring Boot 项目就不能连接和操作数据库,甚⾄是不能保存可以用于排查问题的关键⽇志,所以配置⽂件的作用是⾮常重要的;

二、SpringBoot配置文件的方法

1、系统使用的配置文件,如端口号的设置,连接数据库的配置。

2、用户自定义的配置文件。

二、SpringBoot配置文件的格式

一、properties

语法:properties 是以键值的形式配置的,key 和 value 之间是以“=”连接的;

1、当我们没有设置配置文件的时候,我们的SpringBoot默认启动的端口号是8080;

6880f33195834450b99b4bfb80601d7d.png

2 、当我们通过properties来设置一个端口号时,我们启动springboot项目来观察一下;

2.1在resources目录下新建一个文件applications.properties;

0eddd175874049a583273af6b3946b46.png

2.2这里我们可以自己设置任意一个端口号,比如我们给个8888;

server.port=8888

再次运行观察结果:

31a0398e6afb442f8dd4b80e69d2a8f3.png

结果可以看到,我们自己设置的端口号生效了;

那么如何访问到呢?

我们之前在demo包下面新建了一个TestController类,内容如下:

package com.example.demo;

import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@Controller//当前类是控制器
@ResponseBody//返回的是数据,而非页面
public class TestController {

    @RequestMapping("/hello")//url路由注册
    public String sayHi(String name){

        if(!StringUtils.hasLength(name)){
            name = "SpringBoot";
        }
        return "hello"+ name;
    }
}

这个时候我们就可以通过浏览器来访问,在浏览器中输入以下内容:

http://localhost:8888/hello

按下回车,观察运行结果:

2c8b9da1112a4a41a30d2468b8d6a498.png

二、yml

1、yml 是 YAML 是缩写,它的全称 Yet Another Markup Language 翻译成中⽂就是 “另⼀种标记语言”。

yml 是树形结构的配置文件,它的基础语法是“key: value”,注意 key 和 value 之间使⽤英⽂冒汗加空 格的方式组成的,其中的空格不可省略;

2、首先还是在resources目录下新建一个yml文件,格式如下:

abb7729a0b6d4527a9c624403217ffde.png

yml文件代码如下,我们来测试一下新设置的端口号是否生效;

5e94954af5914fd8b19fc7ef6e723816.png

3、在浏览器输入:http://localhost:7777/hello 按下回车,看运行结果;

0f7bd2873e3f4487b72521bbe6da392f.png

结果依然是没有问题;

注:理论上讲 properties 可以和 yml ⼀起存在于⼀个项⽬当中,当 properties 和 yml ⼀起存在⼀个项目中时,如果配置⽂件中出现了同样的配置,比如 properties 和 yml 中都配置“server.port”, 那么这个时候会以 properties 中的配置为主,也就是 .properties 配置⽂件的优先级最高,但加载完 .properties ⽂件之后,也会加载 .yml 文件的配置信息。

三、读取配置文件

1、properties

如果在项⽬中,想要主动的读取配置文件中的内容,可以使用 @Value 注解来实现。
@Value 注解使用“${}”的格式读取;
application.yml文件代码如下:
server:
  port: 7777
  #自定义配置项
mytest: 小黑

TestController:

package com.example.demo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@Controller//当前类是控制器
@ResponseBody//返回的是数据,而非页面
public class TestController {

    @Value("${mytest}")
    private String mytest;


    @RequestMapping("/hello")//url路由注册
    public String sayHi(String name){

        if(!StringUtils.hasLength(name)){
            name = "SpringBoot";
        }
        return "hello"+ name;
    }

    @RequestMapping("/getconf")
    public String getconf(){
        return mytest;
    }
}

首先启动springboot类,启动成功后,再去浏览器访问对应的地址;

3d81b4f564584c44bf66b966cbc8506a.png

浏览器输入以下内容:http://localhost:7777/getconf  按下回车:

f7e7d0a1f0f7482e92dcfd8c1a0fd18a.png

2、yml

2.1 value值加单双引号;

application.yml文件写入以下内容:

#字符串
myStirng1: 哈喽\n呀
myStirng2: '哈喽\n呀'
myStirng3: "哈喽\n呀"

TestController类中代码:

    @Value("${myString1}")
    private String myString1;

    @Value("${myString2}")
    private String myString2;

    @Value("${myString3}")
    private String myString3;

    @PostConstruct
    public void PostConstruct(){
        System.out.println("myString1"+myString1);
        System.out.println("myString2"+myString2);
        System.out.println("myString3"+myString3);
    }

启动springboot项目,观察结果;

得以下结论:

1、字符串默认不用加上单引号或者双引号。
2、单引号不会转义特殊字符,特殊字符最终只是⼀个普通的字符串数据。
3、双引号会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思。

3、配置对象

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

student:
  id: 1
  name: zhangsan
  age: 18

还可以使用行内写法,将对象中的属性写到一行,不用另起很多行;

student1: {id: 1,name: zhangsan,age: 20}

那么读取对象的话就不能使用注解@Value了,需要用到另外一个注解@ConfigurationProperties 来读取;

在demo包下新建一个类Student:

package com.example.demo;

import lombok.Data;
import lombok.NonNull;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

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

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public Student(int id, @NonNull String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

TestController中代码:

    @Component
    public class ReadYml2 {
        @Autowired
        private Student student;
        @PostConstruct
        public void postConstruct() {
            System.out.println(student);
        }
    }

运行结果:87f2afc2a41245d7add5422a19ab4a7f.png

⏳注意:1、学生类Student使用@ConfigurationProperties("student")这个注解,并且注解后面的对象名必须和配置文件中的一致;

⌛️2、实体类的属性名必须和配置中的key保持一致,并且提供getter和setter方法;

🌃OK,今天的学习内容就到这里啦,喜欢的小伙伴可以三连一下,订阅本专栏,以便于及时收到更新信息,感谢阅读,我们下期再见!!🔦🔦

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

22年广东河南省赛-隐藏信息探索

任务十: 1、访问服务器的FTP服务,下载图片QR,从图片中获取flag,并将flag提交; QR.png的内容如下,可以看到,找到二维码的前三块都被反转了,需要反转回来,把这个二维码做成一个正方形,使用截图工具分隔、配合画图工具拼接+旋转。平均分为4块,分出4个方块。即可。 2、…

django 基本使用

django 下载 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django查看版本 django-admin --version 4.2.1创建项目 django-admin startproject project创建一个 app python manage.py startapp app注册 app project/settings # app名称.apps.app名称Config…

2023河南省赛vp题解

目录 A题&#xff1a; B题 C题 D题 E题 F题 G题 H题 I题 J题 K题 L题 A题&#xff1a; 1.思路&#xff1a;考虑暴力枚举和双hash&#xff0c;可以在O(n)做完。 2.代码实现&#xff1a; #include<bits/stdc.h> #define sz(x) (int) x.size() #define rep(i,z,…

头歌计算机算法设计与分析:随机化算法

第1关&#xff1a;硬币实验 任务描述 相关知识随机数 编程要求 测试说明任务描述 本关任务&#xff1a;计算机产生的伪随机数来模拟抛硬币试验。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.如何获取数组的长度&#xff0c;2.如何遍历数组。 随机数 随机…

基于 SpringBoot+WebSocket 无DB实现在线聊天室

0 项目说明 0.1 样例展示 0.2 源码地址 GitHub&#xff1a;https://github.com/ShiJieCloud/web-chat Gitee&#xff1a;https://gitee.com/suitbaby/web-chat GitCode&#xff1a;I’m Jie / web-chat GitCode 1 WebSocket 简介 1.1 HTTP 常用的 HTTP 协议是一种无状态…

【牛客刷题专栏】0x27:JZ29 顺时针打印矩阵(C语言编程题)

前言 个人推荐在牛客网刷题(点击可以跳转)&#xff0c;它登陆后会保存刷题记录进度&#xff0c;重新登录时写过的题目代码不会丢失。个人刷题练习系列专栏&#xff1a;个人CSDN牛客刷题专栏。 题目来自&#xff1a;牛客/题库 / 在线编程 / 剑指offer&#xff1a; 目录 前言问…

2023年Pycharm安装教程,附详细图解

简介 PyCharm是一款Python IDE&#xff0c;其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具&#xff0c;比如&#xff0c; 调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制等等。此外&#xff0c;该IDE提供了一些高级功能&a…

面向对象构造顺序与析构顺序详解

#include<bits/stdc.h> using namespace std;class animal{public:animal(){cout<<"调用animal构造"<<endl;}~animal(){cout<<"调用animal析构"<<endl;} };class verhical{public:verhical(){cout<<"调用verhica…

服装供应链管理包含哪些内容,如何选择服装供应链管理系统?

服装供应链管理是指对服装工厂的采购、生产、物流、仓储和销售等环节的管理&#xff0c;包括原材料的采购、成品的制造、配送、零售等多个环节。 选择合适的服装供应链管理系统&#xff0c;能够帮助服装工厂提高供应链管理的效率、优化库存管理、降低运营成本、保证服装生产的品…

TCP协议三次握手四次挥手详细分析

在学习TCP协议的时候&#xff0c;接触最多的就是TCP的三次握手和四次挥手。关于这个的介绍大多数都是文字和图示来分析的&#xff0c;但是具体到协议的内容时&#xff0c;有可能还是不清楚&#xff0c;下面我就通过具体协议来分析一下这个过程。 这里使用Wireshark网络分析工具…

【Linux】进程与文件系统(上)

由于这部分的知识很多很多&#xff0c;分成两回 目录 1.文件描述符 文件描述符 1.文件描述符 首先我们看一下几个小问题 1.你真的理解文件原理和操作了吗&#xff1f; 这不是语言的问题&#xff0c;而是操作系统的问题 2.是不是只有C/C有文件操作&#xff1f; 其他语…

【数据结构】结构最复杂实现最简单的双向带头循环链表

【数据结构】结构最复杂实现最简单的双向带头循环链表 一、前言二、目标三、实现1、初始化工作2、尾插2.1、图解思路2.2、代码实现 3、尾删3.1、图解思路3.2、代码实现 4、打印链表5、头插5.1、图解思路5.2、代码实现 6、头删6.1、图解思路6.2、代码实现 7、查找8、随机插入8.1…

数据结构与算法基础(青岛大学-王卓)(2)

第二弹火爆来袭中 这波是单链表的内容整理&#xff0c;废话不多说&#xff0c;上小龙虾呀(又到了龙虾季节了&#xff0c;哎&#xff0c;口水直流了~~) beautiful的分割线 文章目录 第二弹火爆来袭中这波是单链表的内容整理&#xff0c;废话不多说&#xff0c;上小龙虾呀(又到了…

【致敬未来的攻城狮计划】— 连续打卡第二十七天:瑞萨RA RA2E1 的 BTN触摸按键

文章目录 由于一些特殊原因&#xff1a; 系列文章链接&#xff1a;&#xff08;其他系列文章&#xff0c;请点击链接&#xff0c;可以跳转到其他系列文章&#xff09;或者参考我的专栏“ 瑞萨MCU ”&#xff0c;里面是 瑞萨RA2E1 系列文章。 24.RA2E1的 DMAC——数据传输 25.R…

DB2_sql_问题

db2新增字段指定顺序 这个是不能做到的&#xff0c;除非把表删除重新创建的&#xff01; 原理是这样子的&#xff1a;当你创建表时系统会记录下你的SEQ-ID,就是字段的顺序号&#xff0c;这个是根据字段先后顺序来生成的&#xff0c;系统默认显示的时候也是根据这个来的&#x…

linux:工具(命令)vi、vim文本编辑器详解。

linux:工具(命令)vi/vim文本编辑器详解。 因此&#xff0c;本质上vi和vim是同种东西&#xff0c;后面也会合起来说&#xff0c;但是使用上会使用vim&#xff0c;因为vim是加强版。 使用形式&#xff1a; 无论退出还是进入都需要去到 “命令模式”。 当使用vi/vim时就会进入“命…

「高性能MySQL」读书笔记(1)- MySQL架构

一、前言 本系列主要是记录阅读「高性能MySQL」期间笔记&#xff0c;记录在日常使用中忽略的知识、模糊的点&#xff0c;主要面对有一定MySQL使用经验的开发者。 本文是针对于MySQL一些基础定义的解释说明&#xff0c;会非常浅显通俗易懂。 二、MySQL的逻辑架构 简单梳理My…

PCL学习九:Registration-配准

参考引用 Point Cloud Library黑马机器人 | PCL-3D点云 1. 点云中的数学 函数求导 对于函数 f ( x ) x 2 f(x)x^2 f(x)x2 其一阶导数也是 x x x 的函数&#xff1a; d f d x 2 x \frac{df}{dx}2x dxdf​2x其二阶导为常数&#xff0c;与 x x x 无关&#xff1a; d 2 f d x…

【漏洞分析】CVE-2021-0920 Linux内核垃圾回收机制中的竞争UAF漏洞

漏洞发现&#xff1a;该漏洞早在2016年被 RedHat 内核开发人员发现并披露&#xff0c;但 Linux 内核社区直到 2021 年重新报告后才对该漏洞进行修补&#xff08;patch&#xff09;。Google的威胁分析小组&#xff08;Threat Analysis Group&#xff09;发现该漏洞在野外被使用&…

shell脚本----基础命令

文章目录 一、sort命令二、uniq命令三、 tr命令四、cut命令 一、sort命令 sort命令以行为单位对文件内容进行排序&#xff0c;也可以根据不同的数据类型来排序&#xff0c;比较的原则是从首字符向后&#xff0c;一次按ASCII码的值进行比较&#xff0c;最后按序输出。 ASCII码…