SpringBoot概述SpringBoot基础配置yml的使用多环境启动
🐌个人主页: 🐌 叶落闲庭
💨我的专栏:💨
c语言
数据结构
javaEE
操作系统
石可破也,而不可夺坚;丹可磨也,而不可夺赤。
SpringBoot简介
- 一、 SpringBoot概述
- 1.1 起步依赖
- 1.2 辅助功能
- 1.3 SpringBoot程序启动
- 二、 SpringBoot基础配置
- 2.1 配置文件格式
- 2.1.1 自动提示功能消失解决方案
- 2.2 yaml
- 2.2.1 yaml语法规则
- 2.2.2 yaml数据读取方式
- 2.2.2.1 使用`@Value`读取单个数据,属性名引用方式:${一级属性名.二级属性名......}
- 2.2.2.2 封装全部数据到`Environment`对象
- 2.2.2.3 自定义对象封装指定数据
- 2.2.2.4 自定义对象封装指定数据警告解决方案
- 2.3 多环境启动
- 2.3.1 yml文件多环境启动方式
- 2.3.2 application.properties文件多环境启动
- 2.3.3 多环境命令行启动参数设置
- 2.3.3 多环境开发兼容问题(Maven与boot)
- 2.4配置文件分类
一、 SpringBoot概述
1.1 起步依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.14</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>springboot_quick_start</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot_quick_start</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>
</project>
- 根据
spring-boot-starter-web
可以得到它对应的配置:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.7.14</version></parent><artifactId>spring-boot-starter-parent</artifactId><packaging>pom</packaging>
</project>
- 这个配置类又继承了
dependencies
: -
-
- 各种
properties
信息:
- 各种
-
<properties><activemq.version>5.16.6</activemq.version>...
</properties>
-
- 2.各种依赖管理:
<dependencies>
<dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-amqp</artifactId><version>${activemq.version}</version></dependency><dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-blueprint</artifactId><version>${activemq.version}</version></dependency>...
</dependencies>
- starter
-
- SpringBoot中常见项目名称,定义了当前项目使用的所有项目目标,已达到减少依赖配置的目的
- parent
-
- 所有SpringBoot项目要继承的项目,定义了若干个坐标版本号(依赖管理,而非依赖),以达到减少依赖冲突的目的
-
- spring-boot-starter-parent(2.5.0)与spring-boot-starter-parent(2.4.6)共计57处坐标版本不同
- 实际开发
-
- 使用任意坐标时,仅书写GAV中的G和A,V由SpringBoot提供
-
- 如发生坐标错误,再指定version(要小心版本冲突)
1.2 辅助功能
- 内置服务器,根据
spring-boot-starter-web
依赖,可以内置一个tomcat服务器
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
- 内置了tomcat服务器
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><version>2.7.14</version><scope>compile</scope>
</dependency>
1.3 SpringBoot程序启动
- 启动方式
@SpringBootApplication
public class SpringbootQuickStartApplication {public static void main(String[] args) {SpringApplication.run(SpringbootQuickStartApplication.class, args);}
}
- SpringBoot在创建项目时,采用jar的打包方式
- SpringBoot的引导类是项目的入口,运行main方法就可以启动项目
- 将tomcat服务器换为jetty服务器:
- 在原有的服务器启动类下使用
exclusion
排除掉Tomcat依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions>
</dependency>
- 添加Jetty服务器的依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
- 启动SpringBoot项目
- Jetty比Tomcat更轻量级,可扩展性更强(相较于Tomcat),谷歌应用引擎(GAE)已经全面切换为Jetty
二、 SpringBoot基础配置
2.1 配置文件格式
- SpringBoot提供了多种属性配置方式(选用不同的配置文件)
- 配置文件名必须是application开头的,否则可能不生效
-
application.properties
server.port=80
-
application.yml
server:port: 81
-
application.yaml
server:port: 82
注意:
port:
后一定要加空格
- 当这三个配置文件都配置时,默认使用顺序是
application.properties
优先级最高,其次是application.yml
,最低优先级是application.yaml
,一般写项目时用的配置文件是application.yml
2.1.1 自动提示功能消失解决方案
在使用以
.yml
或.yaml
为后缀名的配置文件时,可能会出现自动提示功能消失的问题
解决步骤如下:
2.2 yaml
- YAML (YAML Ain’t Markup Language),一种数据序列化格式
- 优点:
-
- 容易阅读
-
- 容易与脚本语言交互
-
- 以数据为核心,重数据轻格式
- YAML文件扩展名
-
.yml
(主流)
-
.yaml
2.2.1 yaml语法规则
- 大小写敏感
- 属性层级关系使用多行描述,每行结尾使用冒号结束
- 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
- 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
- #表示注释
2.2.2 yaml数据读取方式
2.2.2.1 使用@Value
读取单个数据,属性名引用方式:${一级属性名.二级属性名…}
lesson: SpringBootserver:port: 80books:name:subject:- Java- 操作系统- 网络
@RestController
@RequestMapping("/books")
public class BookController {@Value("${lesson}")private String lesson;@Value("${books.subject[0]}")private String subject_0;
}
2.2.2.2 封装全部数据到Environment
对象
@RestController
@RequestMapping("/books")
public class BookController {@Autowiredprivate Environment environment;@Autowiredprivate Books books;@GetMapping("/{id}")public String getById(@PathVariable Integer id) {System.out.println(lesson);System.out.println(subject_0);System.out.println(environment.getProperty("lesson"));System.out.println(environment.getProperty("books"));System.out.println(books);return "hello,spring boot!";}
}
2.2.2.3 自定义对象封装指定数据
@Component
@ConfigurationProperties(prefix = "books")
public class Books {private String name;private String[] subject[];
}
2.2.2.4 自定义对象封装指定数据警告解决方案
在使用自定义对象封装指定数据时,可能会遇到警告信息:
- 在pom.xml文件中添加如下依赖即可:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional>
</dependency>
2.3 多环境启动
2.3.1 yml文件多环境启动方式
# 设置启用的环境
spring:profiles:active: pro
---
# 开发
spring:profiles: dev
server:port: 80
---
# 生产
spring:profiles: pro
server:port: 81
---
# 测试
spring:profiles: test
server:port: 82
2.3.2 application.properties文件多环境启动
-
- 主启动配置文件
application.properties
-
spring.profiles.active=dev
- 环境分类配置文件
application-dev.properties
-
server.port=8080
- 环境分类配置文件
application-pro.properties
server.port=8081
- 环境分类配置文件
application-test.properties
server.port=8082
- 主启动配置文件
2.3.3 多环境命令行启动参数设置
- 带参数启动SpringBoot
java -jar springboot.jar --spring.profiles.active=test
- 可通过命令行修改参数
- 修改端口:
java -jar springboot.jar --spring.profiles.active=test --server.port=88
- 参数加载优先级顺序(从上到下优先级递增)
- 可参考官网https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config
2.3.3 多环境开发兼容问题(Maven与boot)
- Maven中设置多环境属性
<!--开发环境--><profiles><profile><id>dev</id><properties><prfile.active>dev</prfile.active></properties></profile><!--生产环境--><profile><id>pro</id><properties><prfile.active>pro</prfile.active></properties><activation><activeByDefault>true</activeByDefault></activation></profile><!--测试环境--><profile><id>test</id><properties><prfile.active>test</prfile.active></properties></profile></profiles>
- SpringBoot中引用Maven属性
# 设置启用的环境
spring:profiles:active: ${prfile.active}---
# 开发
spring:profiles: dev
server:port: 80
---
# 生产
spring:profiles: pro
server:port: 81
---
# 测试
spring:profiles: test
server:port: 82
- Maven指令执行完毕后,生成了对应的包,其中类参与编译,但是配置文件并没有编译,而是复制到包中
- 解决思路:对于源码中非java类的操作要求加载Maven对应的属性,解析
${}
占位符
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>maven-resources-plugin</artifactId><configuration><encoding>UTF-8</encoding><useDefaultDelimiters>true</useDefaultDelimiters></configuration></plugin></plugins></build>
2.4配置文件分类
- SpringBoot中4级配置文件
-
- 1级:file:config/appication.yml(最高)
-
- 2级:file:application.yml
-
- 3级:classpath:config/application.yml
-
- 4级:classpath:application.yml (最低)
- 作用:
-
- 1级与2级留做系统打包后设置通用属性
-
- 3级与4级用于系统开发阶段设置统用属性
相关文章:

SpringBoot概述SpringBoot基础配置yml的使用多环境启动
🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 SpringBoot简介 一、 SpringBoot概述1.1 起步依赖…...

Python Pandas 处理Excel数据 制图
目录 1、饼状图 2、条形统计图 1、饼状图 import pandas as pd import matplotlib.pyplot as plt import numpy as np #from matplotlib.ticker import MaxNLocator # 解决中文乱码 plt.rcParams[font.sans-serif][SimHei] plt.rcParams[font.sans-serif]Microsoft YaHei …...

如何自己实现一个丝滑的流程图绘制工具(五)bpmn的xml和json互转
背景 因为服务端给的数据并不是xml,而且服务端要拿的数据是json,所以我们只能xml和json互转,来完成和服务端的对接 xml转json import XML from ./config/jsonxml.js/*** xml转为json* param {*} xml*/xmlToJson(xml) {const xotree new X…...

mysql--数据库的操作
数据库,是数据存储的最大单元。 1 创建数据库 create database mydatabase; 每次创建数据库的时候,都会多一个文件夹,关系型数据库是存储在磁盘当中的,所以这时候可以查看新建的数据库 2 指定字符集 MySQL中的字符集转换过程 制…...

kafka--技术文档--架构体系
架构体系 Kafka的架构体系包括以下几个部分: Producer. 消息生产者,就是向Kafka broker发送消息的客户端。Broker. 一台Kafka服务器就是一个Broker。一个集群由多个Broker组成。一个Broker可以容纳多个Topic。Topic. 可以理解为一个队列,一…...

ctfshow web入门 web103-web107
1.web103 和102一样 payload: v2115044383959474e6864434171594473&v3php://filter/writeconvert.base64-decode/resource1.php post v1hex2bin2.web104 值只要一样就可以了 payload: v21 post v113.web105 考查的是$$变量覆盖,die可以带出数据,输出一条消息…...

前端工程化之模块化
模块化的背景 前端模块化是一种标准,不是实现理解模块化是理解前端工程化的前提前端模块化是前端项目规模化的必然结果 什么是前端模块化? 前端模块化就是将复杂程序根据规范拆分成若干模块,一个模块包括输入和输出。而且模块的内部实现是私有的&…...

文件服务器实现方式汇总
hello,伙伴们,大家好,今天这一期shigen来给大家推荐几款可以一键实现文件浏览器的工具,让你轻松的实现文件服务器和内网的文件传输、预览。 基于node 本次推荐的是http-server, 它的githuab地址是:http-s…...

ChatGPT计算机科学与技术专业的本科毕业论文,2000字。论文查重率低于30%。
目录 摘要 Abstract 绪论 1.1 研究背景 1.2 研究目的和意义 2.1 ChatGPT技术概述 2.2 ChatGPT技术的优缺点分析 2.2.1 优点 2.2.2 缺点 摘要 本论文围绕ChatGPT展开,介绍了该技术的发展历程、特点及应用,分析了该技术的优缺点,提出了…...

【Winform学习笔记(八)】通过委托实现跨窗体传值
通过委托实现跨窗体传值 前言正文1、委托及事件2、通过委托实现跨窗体传值的步骤1.在子窗体中定义委托2.在子窗体中声明一个委托类型的事件3.调用委托类型事件4.在实例化子窗体后,子窗体订阅事件接受方法5.实现具体的事件 3、具体示例4、完整代码5、实现效果 前言 …...

Windows用户如何安装Cpolar
目录 概述 什么是cpolar? cpolar可以用在哪些场景? 1. 注册cpolar帐号 1.1 访问官网站点 2. 下载Windows版本cpolar客户端 2.1 下载并安装 2.2 安装完验证 3. token认证 3.1 将token值保存到默认的配置文件中 3.2 创建一个随机url隧道&#x…...

C++最易读手撸神经网络两隐藏层(任意Nodes每层)梯度下降230820a
这是史上最简单、清晰,最易读的…… C语言编写的 带正向传播、反向传播(Forward ……和Back Propagation)……任意Nodes数的人工神经元神经网络……。 大一学生、甚至中学生可以读懂。 适合于,没学过高数的程序员……照猫画虎编写人工智能、…...

机器学习理论笔记(二):数据集划分以及模型选择
文章目录 1 前言2 经验误差与过拟合3 训练集与测试集的划分方法3.1 留出法(Hold-out)3.2 交叉验证法(Cross Validation)3.3 自助法(Bootstrap) 4 调参与最终模型5 结语 1 前言 欢迎来到蓝色是天的机器学习…...

10*1000【2】
知识: -----------金融科技背后的技术---------------- -------------三个数字化趋势 1.数据爆炸:internet of everything(iot);实时贡献数据;公有云服务->提供了灵活的计算和存储。 2.由计算能力驱动的&#x…...

“探秘JS加密算法:MD5、Base64、DES/AES、RSA你都知道吗?”
目录 1、什么是JS、JS反爬是什么?JS逆向是什么? 2、JS逆向的大致流程 3、逆向的环境搭建 3.1、安装node.js 3.2、安装js代码调试工具(vscode) 3.3、安装PyExecJs模块 4、JS常见加密算法 4.1、Base64算法 4.2、MD5算法 4.3、DES/AES算法 4.2.2 AES与DES的…...

Spark项目Java和Scala混合打包编译
文章目录 项目结构Pom完整文件编译查看 实际开发用有时候引用自己写的一些java工具类,但是整个项目是scala开发的spark程序,在项目打包时需要考虑到java和scala混合在一起编译。 今天看到之前很久之前写的一些打包编译文章,发现很多地方不太对…...

深度学习处理文本(NLP)
文章目录 引言1. 反向传播1.1 实例流程实现1.2 前向传播1.3 计算损失1.4 反向传播误差1.5 更新权重1.6 迭代1.7 BackPropagation & Adam 代码实例 2. 优化器 -- Adam2.1 Adam解析2.2 代码实例 3. NLP任务4. 神经网络处理文本4.1 step1 字符数值化4.2 step 2 矩阵转化为向量…...

汽车电子笔记之:AUTOSAR方法论及基础概念
目录 1、AUTOSAR方法论 2、AUTOSAR的BSW 2.1、MCAL 2.2、ECU抽象层 2.3、服务层 2.4、复杂驱动 3、AUTOSAR的RTE 4、AUTOSAR的应用层 4.1、SWC 4.2、AUTOSAR的通信 4.3、AUTOSAR软件接口 1、AUTOSAR方法论 AUTOSAR为汽车电子软件系统开发过程定义了一套通用的技术方法…...

鼠标拖拽盒子移动
目录 需求思路代码页面展示【补充】纯js实现 需求 浮动的盒子添加鼠标拖拽功能 思路 给需要拖动的盒子添加鼠标按下事件鼠标按下后获取鼠标点击位置与盒子边缘的距离给 document 添加鼠标移动事件鼠标移动过程中,将盒子的位置进行重新定位侦听 document 鼠标弹起&a…...

AUTOSAR从入门到精通-【应用篇】面向车联网的车辆攻击方法及入侵检测
目录 前言 国内外研究现状 (1)车辆攻击方法的研究 (2)车辆安全防护技术的研究...

0101prox-shardingsphere-中间件
1 启动ShardingSphere-Proxy 1.1 获取 目前 ShardingSphere-Proxy 提供了 3 种获取方式: 二进制发布包DockerHelm 这里我们使用Docker安装。 1.2 使用Docker安装 step1:启动Docker容器 docker run -d \ -v /Users/gaogzhen/data/docker/shardings…...

FactoryBean和BeanFactory:Spring IOC容器的两个重要角色简介
目录 一、简介 二、BeanFactory 三、FactoryBean 四、区别 五、使用场景 总结 一、简介 在Spring框架中,IOC(Inversion of Control)容器是一个核心组件,它负责管理和配置Java对象及其依赖关系,实现了控制反转&a…...

微服务中间件--分布式搜索ES
分布式搜索ES 11.分布式搜索 ESa.介绍ESb.IK分词器c.索引库操作 (类似于MYSQL的Table)d.查看、删除、修改 索引库e.文档操作 (类似MYSQL的数据)1) 添加文档2) 查看文档3) 删除文档4) 修改文档 f.RestClient操作索引库1) 创建索引库2) 删除索引库/判断索引库 g.RestClient操作文…...

触摸屏与PLC之间 EtherNet/IP无线以太网通信
在实际系统中,同一个车间里分布多台PLC,用触摸屏集中控制。通常所有设备距离在几十米到上百米不等。在有通讯需求的时候,如果布线的话,工程量较大耽误工期,这种情况下比较适合采用无线通信方式。 本方案以MCGS触摸屏和…...

Crontab定时任务运行Docker容器(Ubuntu 20)
对于一些离线预测任务,或者D1天的预测任务,可以简单地采用Crontab做定时调用项目代码运行项目 Crontab简介: Linux crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令&…...

Fegin异步情况丢失上下文问题
在微服务的开发中,我们经常需要服务之间的调用,并且为了提高效率使用异步的方式进行服务之间的调用,在这种异步的调用情况下会有一个严重的问题,丢失上文下 通过以上图片可以看出异步丢失上下文的原因是不在同一个线程,…...

《Linux从练气到飞升》No.17 进程创建
🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…...

python + pyside2,pyside6,运行错误
在visual studio code运行pyside的时候报错 qt.qpa.plugin: Could not find the Qt platform plugin “windows“ in 后来发现在cmd命令行可以正常运行,应该是VScode和虚拟机类似的问题。 额外设置一下环境变量就可以了。 执行print(os.path.dirname(PySide6.__f…...

第60步 深度学习图像识别:误判病例分析(Pytorch)
基于WIN10的64位系统演示 一、写在前面 上期内容基于Tensorflow环境做了误判病例分析(传送门),考虑到不少模型在Tensorflow环境没有迁移学习的预训练模型,因此有必要在Pytorch环境也搞搞误判病例分析。 本期以SqueezeNet模型为…...

基于Java+SpringBoot+vue前后端分离夕阳红公寓管理系统设计实现
博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…...