JavaEE >> Spring Boot(2)

news2024/7/6 21:12:45

Spring Boot 配置文件

前面的文章已经介绍了 Spring Boot 项目的创建,上文,本文介绍 Spring Boot 的简单进阶使用。

配置文件的作用

项目中的所有重要数据都是在配置文件中配置的,例如:

  1. 数据库的连接信息(包括数据库的密码和用户名以及一些参数的设置);
  2. 项目的启动端口,比如想要以 8081 作为端口运行项目;
  3. 一些第三方的系统调用信息;
  4. ⽤于发现和定位问题的普通⽇志和异常⽇志等;

配置文件的格式

有两种

  1. .properties:以键值对的形式配置,key 和 value 之间是以“=”连接;
  2. .yml:语法和 JSON 语⾔类似,写法简单,可读性高;

下面通过举例来进行具体说明。

  1. 在这里插入图片描述
  2. 在这里插入图片描述

注意:

项目中两种形式可以共同存在,但 .properties 的优先级更高,即出现相同配置的话,例如配置端口号,会以 .properties 配置的端口号为准。加载完 .properties 配置文件后也会加载 .yml 配置文件。
实际业务中会采取一种统一的配置文件格式,这样一来可以更好的维护以及开发。

.properties

Spring Boot 项目创建完成后,会自动在 resources 包下面加载。
下面进行配置:

在这里插入图片描述

spring.application.name=demo
# 配置项目端口号
server.port=8080
# 连接数据库
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/jdbc?characterEncoding= utf8
spring.datasource.username=root
spring.datasource.password=z0329

上述用 .properties 格式配置数据库、端口号,使得该项目可以与数据库进行关联,对其进行操作。
除上述配置外,还可以根据业务配置其它相关项。

读取配置文件

在项目中,还提供了读取配置文件内容的注解(@Value 注解)
使用方法如下:

@RestController
@RequestMapping("/t")
public class TestController {
    @Value("${server.port}")
    private String port;

    @PostConstruct // @PostConstruct注解的方法将会在依赖注入完成后被自动调用. @PostConstruct修饰的方法只会被服务器执行一次
    public void postConstruct(){
        System.out.println("读取配置文件中的端口号: " + port);
    }

}

结果如下:
在这里插入图片描述

注意:
在这里插入图片描述

.yml

yml 是树形结构的配置⽂件,语法是“key: value”注意 key 和 value 之间使⽤英⽂冒号加空格的⽅式组成的,其中的空格不可省略。
用法如下:

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/jdbc?characterEncoding=utf8
    username: root
    password: z0329

server:
  port: 8088

yml 读取配置文件的方法也是通过使用 @Value 注解,与上述.properties 一样,结果如下:

在这里插入图片描述

当两个配置文件同时存在时:

在这里插入图片描述
端口号就是以 .properties 配置文件为准,其优先级更高。

value 值加单双引号区别

在 yml 中定义三个个字符串,如下:

在这里插入图片描述

编写测试类:

/**
 * Created with IntelliJ IDEA.
 * Description: 用于测试 @Value 注解
 * 作用:读取配置文件中的内容
 */
@RestController
@RequestMapping("/t")
public class TestController {
    @Value("${server.port}")
    private String port;

    @PostConstruct // @PostConstruct注解的方法将会在依赖注入完成后被自动调用. @PostConstruct修饰的方法只会被服务器执行一次
    public void postConstruct(){
        System.out.println("读取配置文件中的端口号: " + port);
    }

}

结果如下:
在这里插入图片描述
结论:

  • 默认为字符串,不用加上单/双引号;
  • 单引号会转义特殊字符,将特殊字符转义成一个普通的字符串;
  • 双引号不会转义特殊字符,即特殊字符会作为本身进行输出

.properties 与 .yml

  1. properties 是以 key=value 形式配置的键值类型的配置⽂件, yml 使⽤的是类似 json 格式的树形配置⽅式进⾏配置.
  2. properties 配置文件内容较为冗余,例如连接数据库信息,都会以 spring.datasource 开头,而 yml 则不会,写法更简单,可读性高
  3. yml 支持更多的数据类型、通用性更好,支持多种语言。

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

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

相关文章

BossCMS RCE(下)

未授权漏洞 在登录后台的时候通过查看添加用户功能,看能不能挖掘sql注入漏洞,结果发现了个大问题,一个比较好玩的权限逻辑问题。这里添加用户的路由 我们跟进到manager.class.php里面的add()方法,这里先into::basc_class(admin)&…

DS进阶:并查集

一、并查集的原理 在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复用到查询某一个元素归属于那个集合的运算。适合于描述这…

局部多项式近似与 AMPM 算法

kappa3; %已在您的代码中定义% 定义窗口大小 windowSize (2*kappa1);% 初始化梯度估计值 [rows, cols] size(wrappedPhase); phi_y zeros(rows, cols); phi_x zeros(rows, cols);% 遍历每个窗口 for m 1kappa:rows-kappafor n 1kappa:cols-kappa% 提取局部窗口Z_mn wrap…

python 使用flask_httpauth和pyjwt实现登录权限控制

最近需要用到,学习了一下记录 首先安装依赖 pip install Flask-HTTPAuth pyjwt passlib Welcome to Flask-HTTPAuth’s documentation! — Flask-HTTPAuth documentation Welcome to PyJWT — PyJWT 2.8.0 documentation Passlib 1.7.4 documentation — Passl…

【代码随想录刷题记录】LeetCode27移除元素

题目地址 1. 思路 1.1 基本思路及代码的初步实现 基本思路大体上和卡尔老师的想法是一致的,详见代码随想录:数组:移除元素,暴力法大家都能想到,我这里写一下算法时间复杂度为 O ( n ) O(n) O(n)时候的思路&#xff…

短视频矩阵营销系统 poihuoqu 任意文件读取漏洞复现

0x01 产品简介 短视频矩阵营销系统是由北京华益云数据科技有限公司开发的一款产品,这家公司专注于抖音短视频矩阵营销系统的研发,致力于为企业提供全方位的短视频营销解决方案。华益云抖销短视频矩阵系统可以帮助企业快速搭建多个短视频账号,实现内容的批量制作和发布,提高…

ShardingSphere 5.x 系列【25】 数据分片原理之 SQL 解析

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列ShardingSphere 版本 5.4.0 源码地址:https://gitee.com/pearl-organization/study-sharding-sphere-demo 文章目录 1. 分片执行流程1.1 Simple Push Down1.2 SQL Federation2. SQL 解析2.1 解析…

SystemUI KeyButtonView setDarkIntensity 解析

继承自 ImageView KeyButtonDrawable intensity为0时按键颜色为白色。 intensity为1时黑色为的调用堆栈: java.lang.NullPointerException: Attempt to invoke virtual method int java.lang.String.length() on a null object referenceat com.android.systemui.…

嵌入式学习Day18

一、输入两个数,实现排序 代码: #!/bin/bashread -p "please enter n m:" n m if [ $n -gt $m ] thentemp$nn$mm$temp fi echo $n $m运行结果 二、输入一个数判断是否水仙花数 代码: echo narcissistic number read -p "p…

店匠科技技术产品闪耀,引领新质生产力发展

在科技飞速发展的今天,新质生产力正成为推动社会进步和经济高质量发展的核心力量。店匠科技,作为一家致力于为全球B2C电商提供产品和技术解决方案的领先企业,其技术产品不仅体现了新质生产力的创新特质,更在推动电商行业转型升级中发挥了重要作用。 新质生产力,以创新为主导,摆…

Java设计模式 _创建型模式_原型模式(Cloneable)

一、原型模式 1、原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能比较好。一般对付出较大代价获取到的实体对象进行克隆操作,可以提升性能。 2、实现思路: (1)、需要克隆的…

macOS 一些系统图标的存放位置 icns

macOS 一些系统图标的存放位置 icns macOS 中有很多好看的图标,有时候就想用一下它,我来告诉你他们的具体位置。 系统图标位置,像各种通用文件类型的图标都在这里面,里面好多高清的系统图标 /System/Library/CoreServices/Core…

济宁市中考报名照片要求及手机拍照采集证件照方法

随着中考报名季的到来,并且进入了中考报名演练阶段,济宁市的广大考生和家长都开始忙碌起来。报名过程中,上传一张符合要求的证件照是必不可少的环节。本文将详细介绍济宁市中考报名照片的具体要求,并提供一些实用的手机拍照采集证…

flutter开发实战-build apk名称及指令abiFilters常用gradle设置

flutter开发实战-build apk名称及指令abiFilters常用gradle设置 最近通过打包flutter build apk lib/main.dart --release,发现apk命名规则需要在build.gradle设置。这里记录一下。 一、apk命名规则 在android/app/build.gradle中需要设置 android.applicationVa…

TinyML之Hello world----基于Arduino Nano 33 BLE Sense Rev2的呼吸灯

早期版本的Hello World 这应该是一个逼格比较高的呼吸灯了,用ML来实现呼吸灯功能,之前已经有大佬发过类似的文章:https://blog.csdn.net/weixin_45116099/article/details/126310816 当前版本的Hello World 这是一个ML的入门例程&#xff…

vue3【详解】vue3 比 vue2 升级了哪些重要的功能?

改用 createApp 初始化实例 vue2 使用 new Vue() 初始化实例 vue3 使用 Vue.createApp() 初始化实例 新增 emits 选项 vue3 选项式API中新增了emits 选项,用于显示声明组件中的自定义事件,自定义事件的名称,需用 on 开头。 export default {…

arcgis js 4.x加载SceneLayer并实现基于属性查询定位及高亮

一、代码 <!DOCTYPE html> <html> <head><meta charset"utf-8" /><meta name"viewport" content"widthdevice-width, initial-scale1,maximum-scale1,user-scalableno"><title></title><link rel…

表情识别 | LBP+SVM实现脸部动态特征的人脸表情识别程序(Matlab)

表情识别 | LBPSVM实现脸部动态特征的人脸表情识别程序&#xff08;Matlab&#xff09; 目录 表情识别 | LBPSVM实现脸部动态特征的人脸表情识别程序&#xff08;Matlab&#xff09;预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1 运行环境 程序运行在Windows系统下&am…

PyQt5中QTablewidget生成右键菜单

QTablewidget生成右键菜单&#xff0c;需要自定义一个QTablewidget类 import sys from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem, QMenu, QAction, QDialog from PyQt5.QtCore import Qt from PyQt5 import QtCoreclass CustomTableWidget(QTabl…

数字文旅重塑旅游发展新格局:以数字化转型为突破口,提升旅游服务的智能化水平,为游客带来全新的旅游体验

随着信息技术的迅猛发展&#xff0c;数字化已成为推动各行各业创新发展的重要力量。在旅游业领域&#xff0c;数字文旅的兴起正以其强大的驱动力&#xff0c;重塑旅游发展的新格局。数字文旅以数字化转型为突破口&#xff0c;通过提升旅游服务的智能化水平&#xff0c;为游客带…