Springboot笔记-05

1.Springboot的热部署

spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring

Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用。

在pom文件加入依赖

java 复制代码
<dependency> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-devtools</artifactId> 
<optional>true</optional> 
</dependency>

修改java代码或者配置文件模板后可以通过fn+ctrl+f9来实施热部署

举例子:

现在改为hi我们直接在这儿FN+CTR+F9就行,然后刷新页面

2.配置文件占位符

1.随机数
r a n d o m . v a l u e 、 {random.value}、 random.value、{random.int}、${random.long}
r a n d o m . i n t ( 10 ) 、 {random.int(10)}、 random.int(10)、{random.int1024,65536}

演示:

在配置文件里

java 复制代码
person.last-name=张三${random.uuid}
person.age=${random.int}
person.birth=2017/12/12
person.boss=false
person.dog.name=${person.last-name}_dag
person.dog.age=15
person.maps.k1=v1
person.maps.k2=12
person.lists==a,b,c

测试输出:

java 复制代码
2024-03-20 15:04:24.599  INFO 96092 --- [           main] c.q.s.Springboot02ApplicationTests       : Started Springboot02ApplicationTests in 6.501 seconds (JVM running for 7.315)
Person{lastname='张三f21d8a23-bf66-4213-93ab-56a7059a7112', age=138692754, boss=false, birth=Tue Dec 12 00:00:00 GMT+08:00 2017, maps={k1=v1, k2=12}, lists=[=a, b, c], dog=Dog{name='张三c53af188-de27-4e60-8c13-645a537c61c7_dag', age=15}}

2.占位符获取之前配置的值,如果没有可以是用:指定默认值

java 复制代码
person.last-name=张三${random.uuid}
person.age=${random.int}
person.birth=2017/12/12
person.boss=false
person.dog.name=${person.hello:hi}_dag
person.dog.age=15
person.maps.k1=v1
person.maps.k2=12
person.lists==a,b,c

结果:

java 复制代码
2024-03-20 15:07:55.403  INFO 93212 --- [           main] c.q.s.Springboot02ApplicationTests       : Started Springboot02ApplicationTests in 6.544 seconds (JVM running for 7.304)
Person{lastname='张三ed308fda-8c74-4b8a-8d19-f3ce94578009', age=-2036573979, boss=false, birth=Tue Dec 12 00:00:00 GMT+08:00 2017, maps={k1=v1, k2=12}, lists=[=a, b, c], dog=Dog{name='hi_dag', age=15}}

这里面有很多种,我就不一一展示了,我运行的是,当这个属性假如是last-name没有赋值,然后在dog.name那里 p e r s o n . l a s t − n a m e 就是报错的,而且也不能指定默认值,但是如果这个类没有这个属性,比如 h e l l o 的举例如果无指定的默认值默认是 {person.last-name}就是报错的,而且也不能指定默认值,但是如果这个类没有这个属性,比如hello的举例如果无指定的默认值默认是 person.last−name就是报错的,而且也不能指定默认值,但是如果这个类没有这个属性,比如hello的举例如果无指定的默认值默认是{person.hello}

3.Profile

方便切换环境,提供Profile功能
1.多Profile文件

我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml

默认使用application.properties的配置;

这是我们的application配置

编写两个

此时运行的话,默认走的是application里面的8084

当我们需要走dev的端口号,在application里面激活

spring.profiles.active=dev

在运行的话走的就是8082端口

2.yml支持多文档块方式

把之前的注解掉

在application.yaml里面编写

java 复制代码
server:
  port: 8081
spring:
  profiles:
    active: dev

---
server:
  port: 8082
spring:
  profiles: dev
---

server:
  port: 8083
spring:
  profiles: prod

如果不用spring.profiles.active激活的话,默认还是8081

运行显示:

3.激活指定的profile

1.spring.profiles.active

2.命令行的时候指定:

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

3.可以直接在测试的时候,配置传入命令行参数

4.虚拟机参数:

-Dspring.profiles.active=dev

这里就不一一展示了

4.配置文件加载位置

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

件

优先级由高到底:

  • --file:./config/
  • --file:./
  • --classpath:/config/
  • --classpath:/

高优先级的配置会覆盖低优先级的配置;

演示:

一开始的

然后我们默认走的是8081端口

我们创建config包

此时再运行走的就是8082端口

我们在当前项目目录下创建

那么走的就是8083

我们在项目路径下创建config包

它的优先级最大,此时走的就是8084

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

演示:

controller层是:

java 复制代码
package com.qcby.controller;

import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class hello {
    @RequestMapping("/hello")
    public String hello(){
        return "boot03";
    }

}

运行结果:

也就是配置文件是互补的,当遇到相同配置,优先级高的会覆盖优先级低的

我们还可以通过spring.config.location来改变默认的配置文件位置 :

假如项目打包好了之后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置,指定配置文件和默认加载这些配置文件共同起作用形成互补配置

演示:

在桌面创建个application.properties

server.port=8085

将项目打包

点击最下面一行的Terminal,可以在里面输入命令

再启动的时候就是8085

相关推荐
星恒随风19 小时前
Linux网络编程:应用层协议究竟是什么?从网络计算器到TCP Socket抽象基类完整实现
linux·网络·笔记·tcp/ip
考虑考虑19 小时前
瀚高数据库
数据库·后端·postgresql
锋行天下20 小时前
DeepSeek写Langgraph就是个大傻逼,一本正经胡说八道
前端·人工智能·后端
智学AI20 小时前
AI博主写作素材管理方法分享:资料归集、笔记关联与文档归档
人工智能·笔记
叼烟扛炮21 小时前
[LangChain] 学习笔记(02):LCEL 链式调用与动态模型配置实战
服务器·开发语言·网络·笔记·学习·langchain
weixin_4481199421 小时前
Datawhale Jev Cookbook 202610 笔记5
笔记
一木 之林21 小时前
Dify学习笔记 04 · 检索底座:Embedding、Rerank与向量数据库(第46-54集)
笔记·学习·embedding·dify
小小张说故事21 小时前
Python 的 str 为什么设计成不可变?拆开字符串驻留、字符串池,以及 += 拼接到底慢在哪
后端·python
ljt272496066121 小时前
Python笔记(十一)--Numpy(一)
笔记·python·numpy
芯思路1 天前
STM32开发学习笔记之十【AI部署】
笔记·stm32·学习