当前位置: 首页 > news >正文

SpringBoot热部署与配置技巧

配置文件

SpringBoot 的热部署

Spring为开发者提供了一个名为spring-boot-devtools的模块来使SpringBoot应用支持热部署,提高开发者的开发效率,无需手动重启SpringBoot应用

相关依赖:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> 
</dependency>

修改Java代码或者配置文件模块后可以通过ctrl+F9来实施热部署

配置文件

SpringBoot使用一个全局的配置文件,配置文件名是固定的

  • application.properties
  • application.yml

配置文件的作用:修改SpringBoot自动配置的默认值。

YML:配置例子

server:port: 8080

XML:配置例子

<server><port>8080</port>
</server>

YML语法

基本语法

k:(1空格)v: 表示一对键值对(1个空格必须有)

以空格的缩进来控制层级关系,只要是左对齐的一列数据,都是同一个层级的

server:port: 8080path: /hello

其中的属性和值也是大小写敏感

值的写法

字符串默认不用加上单引号或双引号

“”:双引号:会转义字符串里面的特殊字符,特殊字符会作为本身想表示的意思,比如换行符(\n),如图:

我在双引号中间写了一个换行符,那么控制台输出这一行 person 信息的时候就会在 Jonathan 后面换行,如:

‘’:单引号:不会转义特殊字符,特殊字符只是一个普通的字符串数据,如图:

这次我把双引号换成了单引号,控制台输出的时候就不会换行了,只会把换行符当成普通字符处理,如:

对象,Map

对象

还是 k: v 的方式

friends:name: zhangsan age: 20

行内写法:

friends: {name: zhangsan,age: 18}

数组

用 - 值表示数组中的一个元素

pets:- cat- dog- pig

行内写法:

pets: {cat,dog,pig}

配置文件注入

配置文件:

person:name: 'Jonathan \n xxx'age: 27sex: "true"birthday: "1993/05/01"lists: [1,2,3]maps: {k1: 1,k2: 2,k3: 3}

javaBean:

/*** @ConfigurationProperties(prefix = "person")告诉SpringBoot将本类中的所有属性  * 和配置文件中相关的配置进行绑定*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {private String name;private int age;private boolean sex;private Date birthday;private List<Object> lists;private Map<String, Object> maps;
}

在这里我们可以导入配置文件处理器,以后编写配置就有提示了

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐configuration‐processor</artifactId><optional>true</optional>
</dependency>

我们可以通过另一种方式获取值

@Value和@ConfigurationProperties的区别

@Value@ConfigurationProperties
功能一个个指定批量注入配置文件中的属性
松散绑定(松散语法)不支持支持
SpEL支持不支持
JSR303数据校验不支持支持
复杂类型封装不支持支持

@Value是一一绑定的

@ConfigurationProperties支持松散绑定

数据校验:

只有前缀支持

@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {@Emailprivate String email;
}

对于复杂封装类型 @Value 不适合,比如:

private List<Object> lists;private Map<String, Object> maps;

@PropertySource

/*** 将配置文件中配置的每一个属性的值,映射到这个组件中* @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;* prefix = "person":配置文件中哪个下面的所有属性进行一一映射* *只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;* @ConfigurationProperties(prefix = "person")默认从全局配置文件中获取值;* */@PropertySource(value = {"classpath:person.properties"})@Component@ConfigurationProperties(prefix = "person")//@Validatedpublic class Person {/*** <bean class="Person">* <property name="lastName" value="字面量/${key}从环境变量、配置文件中获取值/#{SpEL}"></property>* <bean/>*///lastName必须是邮箱格式// @Email//@Value("${person.last‐name}")private String lastName;//@Value("#{11*2}")private Integer age;//@Value("true")private Boolean boss;

@ImportResource:

导入Spring的配置文件,让配置文件里面的内容生效;

Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;

想让Spring的配置文件生效,加载进来,就把@ImportResource放在SpringBoot启动类上

package com.qcby.springbootdemo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;@ImportResource({"classpath:bean.xml"})
@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

Profile

多Profile文件

我们在主配置文件编写的时候,文件名可以是 application-dev.properties

默认使用 application-dev.properties 的配置

yml支持多文档块方式

server:port: 8081
person:name: 'Jonathan \n xxx'age: 27sex: "true"birthday: "1993/05/01"lists: [1,2,3]maps: {k1: 1,k2: 2,k3: 3}
---
server:port: 8082
spring:config:activate:profiles: dev
---
server:port: 8083
spring:config:activate:profiles: prod

激活指定profile

在配置文件中指定 spring.profiles.active=dev

命令行:

java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev;

配置文件加载位置

springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件

–file:./config/

–file:./

–classpath:/config/

–classpath:/

优先级由高到底,高优先级的配置会覆盖低优先级的配置;

SpringBoot会从这四个位置全部加载主配置文件;互补配置;

优先级如图:

http://www.dtcms.com/a/288752.html

相关文章:

  • 从修图到特效:Pillow库的Python图像处理高级实战指南
  • kafka--基础知识点--5.4--max.in.flight.requests.per.connection
  • 《计算机网络》实验报告五 DNS协议分析与测量
  • 网络(HTTP)
  • QT无边框窗口
  • 分享如何在Window系统的云服务器上部署网站及域名解析+SSL
  • kotlin 扩展函数 在链式调用的妙用
  • LINUX入门(二)QT的安装及运行环境搭建
  • jmeter如何做自动化接口测试?
  • 元宇宙经济的四个特征
  • Spring Boot中REST与gRPC并存架构设计与性能优化实践指南
  • Dify 1.6 安装与踩坑记录(Docker 方式)
  • LeetCode 198 打家劫舍 LeetCode 213.打家劫舍II
  • 华为开源自研AI框架昇思MindSpore应用案例:基于ERNIE模型实现对话情绪识别
  • [Python] -项目实战4- 利用Python进行Excel批量处理
  • 基于pyside6的通用机器人遥控控制界面
  • client-go: k8s选主
  • JAVA面试宝典 -《容灾设计:异地多活架构实践》
  • go-redis Pipeline 与事务
  • 民法学学习笔记(个人向) Part.1
  • 如何应对“躺平”文化对项目的冲击
  • 生物化学笔记:安全防护 射频和微波辐射防护 电磁辐射与防护 生物电磁学
  • 《镜语者》
  • 技术演进中的开发沉思-40 MFC系列:多线程协作
  • AI-Compass 前沿速览:ChatGPT Agent、Kimi2、Mistral 语音模型、Grok AI 情感陪伴、百度 Tizzy、有言数字人
  • java学习6--方法
  • 深入解析定点数移位运算:原理、规则与实例
  • Golang的微服务链路追踪
  • github 近期热门项目-2025.7.20
  • RabbitMQ面试精讲 Day 4:Queue属性与消息特性