SpringBoot(四)之基础配置

SpringBoot(四)之基础配置

文章目录

    • SpringBoot(四)之基础配置
      • 全局配置文件
      • banner
        • banner替换
        • banner关闭
      • 单个配置注入
        • 系统配置注入
        • 自定义配置
      • 多个配置注入
      • 自定义的配置的文件注入
      • 命令行设置
      • 环境配置(profile)
      • 配置文件中,相互的属性的引入

全局配置文件

  • SpringBoot约定的resources目录(或者resources目录的下一级,如resources/config)下,创建application.properties或者application.yml文件作为SpringBoot的全局配置文件。

  • 可以在该文件中配置项目中需要用到的常量,分环境变量等信息,通过Spring将属性值注入到bean中。

  1. application.properties文件格式

通过name=value的形式配置,如

spring.application.name=spring-boot-start
server.port=8080
  1. application.yml文件格式

**YAML(YAML Ain’t Markup Language)**是一种人类可读的数据序列化格式,通常用于配置文件和数据交换。YAML 使用空格缩进来表示层级关系,而不是像 XML 或 JSON 那样使用大括号或方括号。

以下是 YAML 文件的基本语法规则:

  1. 键值对: 使用冒号(:)分隔键和值,键值对之间使用冒号后面的空格进行分隔。
key1: value1
key2: value2
  1. 注释: 使用井号(#)表示注释。注释从井号开始一直到行尾。
# This is a comment
key1: value1  # This is another comment
  1. 列表: 使用短横线(-)表示列表项。列表项可以包含标量值、字典或嵌套列表。
fruits:- apple- orange- banana
  1. 嵌套结构: 使用缩进表示层级关系。子项的缩进必须比父项多两个空格。
person:name: Johnage: 30address:street: 123 Main Streetcity: Anytown
  1. 多行字符串: 使用管道符(|)表示多行字符串。换行符会被保留,但末尾的换行符会被忽略。
description: |This is a multi-linestring in YAML.
  1. 折叠的多行字符串: 使用大于符(>)表示折叠的多行字符串。换行符会被转换为空格,但末尾的换行符会被忽略。
description: >This is a foldedmulti-line string in YAML.

这些是 YAML 文件的基本语法规则。通过这些规则,你可以创建结构化、易读的配置文件或数据文件。

banner

项目启动时,有个默认的Spring官方banner图

  .   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/
banner替换

替换步骤:

  • 在resources目录下新建banner.txt,并降自己的图案粘贴进去,ASCII图案可通过网站http://www.network-science.de/ascii/一键生成
                    .__                  __
_____    _______  __|__|____    ____    |__|__ __  ____
\__  \  /  _ \  \/  /  \__  \  /  _ \   |  |  |  \/    \/ __ \(  <_> >    <|  |/ __ \(  <_> )  |  |  |  /   |  \
(____  /\____/__/\_ \__(____  /\____/\__|  |____/|___|  /\/            \/       \/      \______|          \/

启动项目,观察console,默认的Spring已经被替换

                    .__                  __
_____    _______  __|__|____    ____    |__|__ __  ____
\__  \  /  _ \  \/  /  \__  \  /  _ \   |  |  |  \/    \/ __ \(  <_> >    <|  |/ __ \(  <_> )  |  |  |  /   |  \
(____  /\____/__/\_ \__(____  /\____/\__|  |____/|___|  /\/            \/       \/      \______|          \/2024-05-15 17:23:06.823  INFO 25432 --- [           main] c.a.s.SpringBootConfigApplication        : Starting SpringBootConfigApplication using Java 1.8.0_261 on DESKTOP-SQBHU59 with PID 25432 (D:\practise\spring-all\spring-boot-config\target\classes started by aoxiaojun in D:\practise\spring-all)
2024-05-15 17:23:06.825  INFO 25432 --- [           main] c.a.s.SpringBootConfigApplication        : No active profile set, falling back to 1 default profile: "default"
2024-05-15 17:23:07.372  INFO 25432 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2024-05-15 17:23:07.378  INFO 25432 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
  • 如何增加项目名称或者项目版本号

在application.yml中定义application.title,application.version,application.description ,这个配置可以自定义。

利用占位符${application.title}形式替换,如在yaml中配置

application:title: spring boot configversion: 2.0description: spring-boot-config-test

并新增banner中占位符信息

                    .__                  __
_____    _______  __|__|____    ____    |__|__ __  ____
\__  \  /  _ \  \/  /  \__  \  /  _ \   |  |  |  \/    \/ __ \(  <_> >    <|  |/ __ \(  <_> )  |  |  |  /   |  \
(____  /\____/__/\_ \__(____  /\____/\__|  |____/|___|  /\/            \/       \/      \______|          \/:: ${application.title} ::                (${application.version})${application.description}

启动项目,观察console,响应的信息已经被打印出来

                    .__                  __
_____    _______  __|__|____    ____    |__|__ __  ____
\__  \  /  _ \  \/  /  \__  \  /  _ \   |  |  |  \/    \/ __ \(  <_> >    <|  |/ __ \(  <_> )  |  |  |  /   |  \
(____  /\____/__/\_ \__(____  /\____/\__|  |____/|___|  /\/            \/       \/      \______|          \/:: spring boot config ::                (2.0)spring-boot-config-test2024-05-15 17:25:55.586  INFO 4960 --- [           main] c.a.s.SpringBootConfigApplication        : Starting SpringBootConfigApplication using Java 1.8.0_261 on DESKTOP-SQBHU59 with PID 4960 (D:\practise\spring-all\spring-boot-config\target\classes started by aoxiaojun in D:\practise\spring-all)
2024-05-15 17:25:55.588  INFO 4960 --- [           main] c.a.s.SpringBootConfigApplication        : No active profile set, falling back to 1 default profile: "default"
banner关闭
  • 可通过配置spring.main.banner-mode=off 关闭banner
  • 通过SpringApplication配置关闭banner
public static void main(String[] args) {SpringApplication springApplication = new SpringApplication(SpringBootConfigApplication.class);springApplication.setBannerMode(Banner.Mode.OFF);springApplication.run(args);
}

单个配置注入

通过Spring原生注解@Value(“${属性名}”)形式注入

系统配置注入

在TestController中,注入spring.application.name属性,并更改test控制器

@Value("${spring.application.name}")
private String applicationName;@GetMapping("/test")
public String test(){return "hello:	" + applicationName;
}

application.yml中配置spring.application.name的值

spring:application:name: spring-boot-config

访问localhost:8080/test

返回 hello: spring-boot-config

自定义配置

随意配置一个属性

any:attr:name: any-attr

通过@Value 在TestController中注入

@Value("${spring.application.name}")
private String applicationName;@Value("${any.attr.name}")
private String anyAttrName;@GetMapping("/test")
public String test(){return "hello:\t" + applicationName +"anyAttrName: " + anyAttrName;
}

多个配置注入

如果属性很多,且都属于同一个业务下面,则可以通过bean的形式将属性全部注入到一个bean的成员属性中。

  1. 定义接收到属性的bean
  2. 标注@Configuration注解表明该类是一个配置类
  3. 标注@ConfigurationProperties(prefix = “”),prefix配置的前缀。

如:

  • 定义以下配置
config:user:name: zhangsanage: 18
  • 新建ConfigBean类
@Configuration
@ConfigurationProperties(prefix = "config.user")
public class ConfigBean {private String name;private String age;...省略get set方法
}

如何使用?

​ 在其他Bean中通过注入ConfigBean的形式获取配置的信息。代码示例

	private final ConfigBean configBean;@Autowiredpublic TestController(ConfigBean configBean) {this.configBean = configBean;public void test(){System.out.println(configBean.getName() + configBean.getAge());}    

自定义的配置的文件注入

  1. 定义接收到属性的bean
  2. 标注@Configuration注解表明该类是一个配置类
  3. 标注@ConfigurationProperties(prefix = “”),prefix配置的前缀。
  4. 标注@PropertySource(“”),配置配置文件的源

如在resources目下新建test.properties文件,并配置

test.user.name=lisi
test.user.age=20

新建TestConfig

@Configuration
@ConfigurationProperties(prefix = "test.user")
@PropertySource("classpath:test.properties")
public class TestConfig {private String name;private String age;
}

命令行设置

可通过java -jar 命令配置

java -jar xxxx.jar --server.port=8081 //配置服务端口

环境配置(profile)

application.yml为主配置文件,如果要分环境,则需要创建 application-{profile}.yml的环境配置。

如application-dev.yml,appliction-prod.yml

通过在主配置文件中配置spring.profiles.active来启用对应的环境配置

spring:profiles:active: dev

配置文件中,相互的属性的引入

通过${配置名}占位符来引入其他的配置,如一下配置,any.attr.name引入了spring.application.name和server.port值。

spring:application:name: spring-boot-configserver:port: 8080
any:attr:name: ${spring.application.name} - ${server.port}

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

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

相关文章

力扣HOT100 - 32. 最长有效括号

解题思路&#xff1a; 栈 class Solution {public int longestValidParentheses(String s) {int max 0;// 也可以使用 Stack<Integer> stacknew Stack<>();但Stack是遗留类&#xff0c;不推荐Deque<Integer> stack new LinkedList<>();stack.push(…

怎么做微信在线预约

在快节奏的现代生活中&#xff0c;我们总是追求更高效、更便捷的服务体验。而微信&#xff0c;这个拥有数亿用户的社交平台&#xff0c;早已不仅仅是一个聊天工具&#xff0c;它更是一个融合了多种功能的综合性服务平台。今天&#xff0c;就让我们一起探讨如何通过微信在线预约…

线程池的一些问题

核心线程数1.最大线程5.队列5.存活时间10s 1.场景一 如果核心线程数.被一直占用得不到释放.新进来1个任务.会怎么样?答: 会在队列中中死等. 只要进来的任务.不超过队列的长度,就会一直挡在队列中死等 package com.lin;import java.util.concurrent.Executors; import java.u…

通过阿里云的PAI基于开源LLM搭建RAG检索增强对话系统

5月9日参加阿里云AI云峰会活动&#xff0c;学习了下如何借助阿里云的PAI服务进行搭建RAG检索增加对话系统。 前提&#xff1a; 为了方便省钱&#xff0c;建议先通过免费的优惠圈&#xff0c;这样就可以先不花钱学习一下啦。开始实验之前&#xff0c;请务必打开 阿里云免费试用…

与 的区别

在不同的编程语言中&#xff0c;& 和 && 通常有不同的用法和含义。以下是它们在几种常见编程语言中的区别&#xff1a; C/C语言 & 操作符 按位与&#xff08;Bitwise AND&#xff09;&#xff1a; & 用于对两个整数进行按位与操作。 int a 5; // 0101 …

QT在场景中利用freetype实现独立的文字绘制子类QxFreeTypeTextItem

QT在场景中利用freetype实现独立的文字绘制子类QxFreeTypeTextItem&#xff0c;继上一章节讲过qt中如何编译freetype Qt编译和使用freetype矢量字库方法https://blog.csdn.net/wangningyu/article/details/138927379#QT利用freetype提取字库图片_qt freetype-CSDN博客文章浏览…

【SpringBoot】SpringBoot3-基本介绍

目录 环境基本介绍pom.xml启动器依赖管理机制分析为什么导入starter-web所有相关依赖都导入进来&#xff1f;为什么版本号都不用写&#xff1f;自定义版本号第三方的依赖 总结 自动配置机制理解默认的包扫描规则配置默认值按需加载自动配置总结 自动配置流程问题流程步骤流程总…

软件概要设计方案说明书-Word原件2024

1引言 1.1编写目的 1.2项目背景 1.3参考资料 2系统总体设计 2.1整体架构 2.2整体功能架构 2.3整体技术架构 2.4运行环境设计 2.5设计目标 3系统功能模块设计 3.1个人办公 4性能设计 4.1响应时间 4.2并发用户数 5接口设计 5.1接口设计原则 5.2接口实现方式 6运行设计 6.1运行模块…

Python数据分析与数据可视化 概念

考试题型&#xff1a; 一、填空题&#xff08;1分*10&#xff09; 二、程序代码填空&#xff08;1分*20&#xff09; 三、读程序写结果&#xff08;10分*4&#xff09; 四、程序设计&#xff08;10分*1&#xff09; 五、问答题&#xff08;20分*1&#xff09; 考试范围&#x…

2024.5.15晚训题解

毫无难度啊。 A - Trick Taking 硬模拟就行。 #include<bits/stdc.h> using namespace std; const int maxn 2e5 10; int n, t, c[maxn], r[maxn]; signed main(){cin >> n >> t;bool flag 0;for(int i 1; i < n; i) {cin >> c[i];if(c[i] t…

学习MySQL(四):记录的增删改查

记录的增、删、改 增 -- 插入一条数据 INSERT INTO 表名&#xff08;字段 1&#xff0c;字段2&#xff0c;字段3&#xff09; VALUES&#xff08;值 1&#xff0c;值2&#xff0c;值3&#xff09; INSERT INTO 表名 VALUES&#xff08;值 1&#xff0c;值2&#xff0c;值3&am…

沃尔玛自建自养号测评的优势,提升产品排名的新选择

在沃尔玛平台上&#xff0c;产品排名和销量的提升对于卖家而言至关重要&#xff0c;而产品测评则是实现这一目标的有效途径。然而&#xff0c;市场上对于测评的需求激增&#xff0c;随之而来的是寻找测评服务的种种困难和风险。因此&#xff0c;越来越多的卖家选择自建自养号测…

cdn引入vue的项目嵌入vue组件——http-vue-loader 的使用——技能提升

最近在写MVC的后台&#xff0c;看到全是jq的写法&#xff0c;但是对于用惯了vue的我&#xff0c;真是让我无从下手。。。 vue的双向绑定真的很好用。。。 为了能够在cdn引入的项目中嵌入vue组件&#xff0c;则可以使用http-vue-loader了 步骤1&#xff1a;下载http-vue-loader…

使用TerraScan静态扫描KubernetsIaC文件

terrascan https://github.com/tenable/terrascan Terrascan 是基础架构即代码的静态代码分析器。Terrascan 允许&#xff1a; 将基础架构作为代码无缝扫描&#xff0c;以查找错误配置。监控已配置的云基础架构&#xff0c;以查找引入终端安全评估漂移的配置更改&#xff0…

10个必备功能跨境电商ERP开发全指南

跨境电商平台开发是当前电商行业的热门话题。随着全球贸易的不断发展&#xff0c;企业越来越关注并重视跨境电商ERP系统的开发和应用。在本文中&#xff0c;我们将深入探讨跨境电商ERP开发的必备功能&#xff0c;为您呈现全面的指南。 1. 跨境订单管理 跨境电商平台需要具备全…

go语言中Print,Printf和Println的区别

Print是Golang的fmt包中的内置函数&#xff0c;使用其操作数的默认格式打印格式并写入标准输出&#xff1b; Println是Golang的fmt包中的内置函数&#xff0c;用于在结尾处打印带有新行的消息到控制台。它需要零个或多个任意类型的参数&#xff0c;并使用空格分隔它们&#xff…

CST电磁仿真软件什么是Schematic?三维模型和电路协同仿真【小白必学教程】

什么是Schematic? 使用CST Design Studio进行的各种分析&#xff01; Schematic 进行三维仿真时&#xff0c;有时需要将3D模型和电路图放在一起进行仿真分析。比如需要天线和匹配电路协同仿真&#xff0c;两者构成完整的电路图可以系统地分析In/0ut特性。按下3D工作界面下方…

docker本地(非公网)搭建gpt-4-all 和 GPTS 多模态对话页面(支持Chat Gpt4o「omni」)

文章目录 GPT-4o简介API-key的获取Linux环境部署gpt-4-all 和 GPTS 多模态访问测试 GPT-4o简介 新模型 GPT-4o&#xff0c;其中的「o」代表「omni」&#xff08;即全面、全能的意思&#xff09;&#xff0c;这个模型同时具备文本、图片、视频和语音方面的能力 API-key的获取 …

在Ubuntu22.04搭建xfce远程桌面

由于Ubuntu22.04云服务器&#xff08;带GPU&#xff09;只开放部分端口&#xff0c;某些服务&#xff08;如nacos&#xff09;有Web前端需要访问&#xff0c;但是相应的端口并没有开放&#xff0c;只有SSH端口可以使用。于是&#xff0c;就在Ubuntu22.04上安装xfce桌面环境&…

JavaScript对象设计哲学:八种模式塑造高效代码

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、引言 &#x1f680;二、Object 构造函数 &#x1f9f1;&#x1f4cc; 基本用法&#x1f4cc; 重要性&#x1f4cc; 实际应用案例 三、对象字面量 &#x1f4d8;&#x1f4cc; 定义属性&#x1f4cc; 定义方法&#x1f4…