SpringBoot基础--05基础特性

SpringBoot基础 本专栏是我在学习SpringBoot时的一些笔记,供大家参考和学习。 阅读详情

基础特性

SpringApplication

@SpringBootApplication
public class SpringbootSsmApplication {
    public static void main(String[] args) {
      // SpringApplication:Boot应用的核心API入口
        SpringApplication.run(SpringbootSsmApplication.class, args);

    //使用FluentBuilder API启动springboot
    // ConfigurableApplicationContext context = new SpringApplicationBuilder()
    // .sources(Parent.class)
    // .child(Application.class)
    // .bannerMode(Banner.Mode.OFF)
    // .run(args);
    }
}

Profiles

@Profile注解

用于标识该组件的生效环境,若未指定特定环境则为default环境

这里假设有3个不同的环境,分别为dev(开发环境),test(测试环境),prod(生产环境)

那么被@Profile({“dev”,“test”})标注的组件就只会在开发和测试环境生效

此时若我们在application.properties配置文件中集合指定环境(spring.profiles.active=dev,test),那么被dev或test标识的组件就会生效

注意,若没有被@Profile注解标识,那么表示在所有环境中都生效

# 环境指定

# 激活指定的一个或多个环境
spring.profiles.active = mygroup

# 为环境分组
spring.profiles.group.mygroup=dev,test

# 指定默认环境
spring.profiles.default = default

# 指定包含环境(总会生效的环境)
spring.profiles.include = dev

一句话总结,生效的环境为激活的环境或默认环境加上包含的环境

配置文件使用Profile功能

application.properties:主配置文件,任何情况下都生效

  • application-{profile}.properties可以作为指定环境的配置文件。
  • 激活这个环境,配置就会生效。最终生效的所有配置是
    • application.properties:主配置文件,任意时候都生效
    • application-{profile}.properties:指定环境配置文件,激活指定环境生效
      profile优先级 > application

外部化配置

配置优先级

Spring Boot 允许将配置外部化,以便可以在不同的环境中使用相同的应用程序代码。
我们可以使用各种外部配置源,包括Java Properties文件、YAML文件、环境变量和命令行参数。
@Value可以获取值,也可以用@ConfigurationProperties将所有属性绑定到java object中
以下是 SpringBoot 属性源加载顺序。后面的会覆盖前面的值。由低到高,高优先级配置覆盖低优先级

  1. 默认属性(通过SpringApplication.setDefaultProperties指定的)
  2. @PropertySource指定加载的配置(需要写在@Configuration类上才可生效)
  3. 配置文件(application.properties/yml等)
  4. RandomValuePropertySource支持的random.*配置(如:@Value(“${random.int}”))
  5. OS 环境变量
  6. Java 系统属性(System.getProperties())
  7. JNDI 属性(来自java:comp/env)
  8. ServletContext 初始化参数
  9. ServletConfig 初始化参数
  10. SPRING_APPLICATION_JSON属性(内置在环境变量或系统属性中的 JSON)
  11. 命令行参数
  12. 测试属性。(@SpringBootTest进行测试时指定的属性)
  13. 测试类@TestPropertySource注解
  14. Devtools 设置的全局属性。($HOME/.config/spring-boot)

结论:配置可以写到很多位置,常见的优先级顺序:
命令行> 配置文件> springapplication配置

配置文件优先级如下:(后面覆盖前面)

  1. jar 包内的application.properties/yml
  2. jar 包内的application-{profile}.properties/yml
  3. jar 包外的application.properties/yml
  4. jar 包外的application-{profile}.properties/yml

建议:用一种格式的配置文件。如果.properties和.yml同时存在,则.properties优先

结论:包外 > 包内; 同级情况:profile配置 > application配置
所有参数均可由命令行传入,使用–参数项=参数值,将会被添加到环境变量中,并优先于配置文件。
比如java -jar app.jar --name="Spring",可以使用@Value("${name}")获取

演示场景:

  • 包内: application.properties server.port=8000
  • 包内: application-dev.properties server.port=9000
  • 包外: application.properties server.port=8001
  • 包外: application-dev.properties server.port=9001
    启动端口?:命令行 > 9001 > 8001 > 9000 > 8000
外部配置

SpringBoot 应用启动时会自动寻找application.properties和application.yaml位置,进行加载。顺序如下:(后面覆盖前面)

  1. 类路径: 内部
    a. 类根路径
    b. 类下/config包
  2. 当前路径(项目所在的位置)
    a. 当前路径
    b. 当前下/config子目录
    c. /config目录的直接子目录

使用spring.config.import可以导入额外配置,额外配置优先级更高

测试

对于组件而言,可以直接使用@Autowired容器中的组件进行测试

class StandardTests {

  // 所有单元测试之前执行
    @BeforeAll
    static void initAll() {
    }
  // 每个单元测试之前执行
    @BeforeEach
    void init() {
    }
    // 为测试类或者测试方法设置展示名称
    @DisplayName("tests")
    @Test
    void succeedingTest() {
    }
  // 表示方法是测试方法。但是与JUnit4的@Test不同,他的职责非常单一不能声明任何属性,拓展的测试将会由Jupiter提供额外测试
    @Test
    void failingTest() {
        fail("a failing test");
    }

    @Test
    // 测试类或测试方法不执行,类似于JUnit4中的@Ignore
    @Disabled("for demonstration purposes")
    void skippedTest() {
        // not executed
    }

    @Test
    void abortedTest() {
        assumeTrue("abc".contains("Z"));
        fail("test should have been aborted");
    }

    // 每个单元测试之后执行
    @AfterEach
    void tearDown() {
    }

    // 在所有单元测试之后执行
    @AfterAll
    static void tearDownAll() {
    }

}

利用@ValueSource等注解,指定入参,我们将可以使用不同的参数进行多次单元测试,而不需要每新增一个参数就新增一个单元测试,省去了很多冗余代码。

@ValueSource: 为参数化测试指定入参来源,支持八大基础类以及String类型,Class类型
@NullSource: 表示为参数化测试提供一个null的入参
@EnumSource: 表示为参数化测试提供一个枚举入参
@CsvFileSource:表示读取指定CSV文件内容作为参数化测试入参
@MethodSource:表示读取指定方法的返回值作为参数化测试入参(注意方法返回需要是一个流)

@ParameterizedTest
@ValueSource(strings = {"one", "two", "three"})
@DisplayName("参数化测试1")
public void parameterizedTest1(String string) {
    System.out.println(string);
    // 判断给定的布尔值是否为 true
    Assertions.assertTrue(StringUtils.isNotBlank(string));
}


@ParameterizedTest
@MethodSource("method")    //指定方法名
@DisplayName("方法来源参数")
public void testWithExplicitLocalMethodSource(String name) {
    System.out.println(name);
    // assertNotNull	判断给定的对象引用是否不为 null
    Assertions.assertNotNull(name);
}

static Stream<String> method() {
    return Stream.of("apple", "banana");
}
SpringBoot3 升级介绍 Springboot是Spring家族中的一个框架,它是用来简单应用程序的创建和开发过程,化繁为简,简化SSM(SpringMVC + Spring + MyBatis)框架的配置。比如说在使用SSM框架开发的时候,我们需要配置web.xml,配置spring,配置mybatis,并将它们整合到一起,而是用Springboot就不同了,它采用了大量的默认配置来简化这些文件的配置过程。 阅读详情

相关推荐

springboot系列教程(三十一):springboot整合Nacos组件,环境搭建和入门案例详解

springboot系列教程(三十一):springboot整合Nacos组件,环境搭建和入门案例详解

weixin_43860634的博客 1万+

SpringBoot3基础特性+事件驱动开发+自定义starter

SpringBoot3基础特性、事件驱动开发、自定义starter

张同学的博客 1124

Gemini Enterprise免费试用攻略:解锁企业级AI平台的隐藏技巧与避坑指南

本文详细介绍了Gemini Enterprise免费试用的全流程攻略,包括注册优化、团队协作、资源管理和典型应用场景。通过解锁企业级AI平台的核心功能如Gemini 3.0 Pro模型和Nano Banana图像生成系统,帮助企业高效评估AI与业务的契合度。文章还提供了安全合规与数据管理的实用建议,确保试用过程顺畅无忧。

weixin_29233857的博客 657

05-07、基础入门-SpringBoot-HelloWorld

SpringBoot 2 学习笔记 【尚硅谷】SpringBoot2零基础入门教程(spring boot2干货满满) https://www.bilibili.com/video/BV19K4y1L7MT

JOKER的博客 84

Zynq7000混合启动方案:QSPI Flash引导与eMMC ext4文件系统部署实战

本文详细介绍了Zynq7000平台的混合启动方案,结合QSPI Flash引导与eMMC ext4文件系统部署,解决嵌入式Linux系统启动可靠性与大容量存储需求。通过硬件连接配置、分区规划、Petalinux工程配置及实战部署步骤,帮助开发者高效实现系统优化,提升启动速度和文件系统性能。

weixin_29190169的博客 447

echarts 生成中国陕西省份(或其他省份)的地图,大屏使用

效果图: 一、首先第一步需要下载echarts和获取到陕西身份的地图信息。 1.下载echarts链接(官网): Apache ECharts 2.生成指定省份的地图数据信息,数据可以在阿里云获取。 DataV.GeoAtlas地理小工具系列 如图,点击左圈需要的省份,这里我选择的是陕西省,然后点击右圈复制下载链接,得到一个json格式的数据,可以在json转换网站转成js格式。 Json在线解析格式化-Json在线校验Json格式化压缩-Jsons在线工具 转成js格.

PrimaryColor 3889

SpringBoot3核心特性-Web开发

SpringBoot3核心特性-Web开发

蓝影铁哥的博客 1643

STM32_WS2811驱动

STM32的WS2811驱动

健身房 2839

SpringBoot框架05-特性及常用注解

是Spring组件一站式解决方案,主要是简化了使用Spring 的难度,节省了繁重的配置,提供了各种启动器。如果@Autowired 和Map 集合一起使用,则将它的bean名称作为key,所有的bean 作为value;指定了type,则从上下文中找到类型匹配的唯一Bean进行装配,找不到或者多个,都会抛出异常。SpringBoot 会根据再类路径中的jar包、类,为jar包里面的类自动配置Bean。指定了name,则从上下文中查找名称(Id)匹配的Bean 进行匹配,找不到则抛出异常;

xiaohoulove_的博客 177

Cocos Creator Android打包:NDK版本选择与配置全攻略

在Android原生开发中,NDK(Native Development Kit)是编译C/C++代码的核心工具链,它决定了代码如何被编译为不同CPU架构(如ARMv7、ARM64)的动态库。其工作原理在于提供了一套完整的交叉编译环境,将高级语言代码转化为设备可执行的二进制指令。这一技术对于游戏引擎和性能敏感型应用至关重要,因为它能直接调用硬件资源,提升运行效率。在实际工程中,NDK版本必须与Android Gradle插件(AGP)版本、项目依赖的C++标准库精密匹配,否则会导致编译失败或运行时崩溃。特别

weixin_33725270的博客 490

工业场景实战:基于YOLO与多格式标注的传送带异物检测数据集构建指南

本文详细介绍了基于YOLO与多格式标注的传送带异物检测数据集构建方法,涵盖数据采集、标注技巧(YOLO、COCO、VOC格式)、数据增强策略及实战案例。通过工业级解决方案,有效提升异物检测准确率与效率,适用于各类工业场景。

weixin_29168393的博客 463

05.SpringBoot拦截器的使用详解

拦截器(Interceptor)是Spring MVC框架提供的一种组件,它可以在请求处理的不同阶段进行拦截和处理。拦截器基于Java的反射机制和动态代理,是AOP(面向切面编程)思想的具体应用。形象比喻: 想象拦截器就像是公司大楼的多道安检门: 2.2 拦截器的三个核心方法 preHandle:在Controller方法执行前调用postHandle:在Controller方法执行后、视图渲染前调用afterCompletion:在整个请求完成后调用这是最常用的方式: 3.2 继承HandlerInt

yk_dflkg的博客 1133

华为OD机试 - 猴子吃桃 - 二分查找(Java 新系统 100分)

每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 3842

05-SpringBoot

Spring是一个非常优秀的轻量级框架,以IOC(控制反转)和AOP (面向切面)为思想内核,极大简化了JAVA企业级项目的开发。虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。使用Spring进行项目开发需要在配置文件中写很多代码,所有这些配置都代表了开发时的损耗。除此之外,Spring项目的依赖管理也是一件耗时耗力的事情。在环境搭建时,需要分析要导入哪些库的坐标,而且还需要分析导入与之有依赖关系的其他库的坐标,一旦选错了依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。比如Spr

qq_40589140的博客 584

【YOLOv11】014、YOLOv11模型导出:PyTorch到ONNX格式转换与优化

摘要:本文详细介绍了如何将PyTorch训练的YOLOv11模型高效转换为ONNX格式。重点包括:分离模型特征提取与后处理、设置动态维度、优化ONNX算子、验证转换正确性等关键步骤。作者分享了实际项目中的经验教训,如版本对齐、算子兼容性处理、后处理分离等实用技巧,并推荐使用onnx-simplifier工具优化模型。文章强调模型转换是一个需要反复调试的过程,建议保留转换记录形成知识库,以提高部署效率并避免常见错误。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 305

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

狂神说--SpringBoot05

跟着老师学,可能前期基础不好,越学越蒙蔽,啊啊啊,还是再给自己补充下基础,多理解理解吧 spring boot Spring Boot 去除了大量的 xml 配置文件,简化了复杂的依赖管理,配合各种 starter 使用,基本上可以做到自动化配置。Spring 可以做的事情,现在用 Spring boot 都可以做。 微服务 早些年的服务实现和实施思路是将很多功能从开发到交付都打包成一个很大的服务单元(一般称为 Monolith),而微服务实现和实施思路则更强调功能趋向单一,服务单元小型化和微型化。

Mar.三月 195

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SpringBoot 05——全局配置

1 全局配置文件           1.1 配置文件           application.properties           application.yml                   1.2 作用          修改Spring Boot自动配置的默认值 2、yml是YAML,不是一个标记语言          YAML:以数据为中心,配置数据的时候具...

菜园子丶For丨丶Tomorrow的博客 197

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Springboot旅游锦囊平台的实现qt05w

Springboot旅游锦囊平台的实现qt05w本系统(程序源码数据库调试部署开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容。

ck3025的博客 998

springboot2入门基础(但不是零基础的)教程(上)

01、基础入门-SpringBoot2课程介绍 Spring Boot 2核心技术 Spring Boot 2响应式编程 学习要求 -熟悉Spring基础 -熟悉Maven使用 环境要求 Java8及以上 Maven 3.3及以上 学习资料 Spring Boot官网 Spring Boot官方文档 本课程文档地址 视频地址1、视频地址2 源码地址 02、基础入门-Spring生态圈 Spring官网 Spring能做什么 Spring的能力 Spring的生态 覆盖了: we

我就吃一口的BLOG 910

【SpringBoot3.x教程05】SpringBoot与关系型数据库的整合

无论是使用JdbcTemplate来直接操作数据库,还是利用Spring Data JPA和MyBatis这样的ORM框架来简化数据持久层的开发,Spring Boot都以其"约定优于配置"的理念,让开发者能够集中精力于业务逻辑的实现,而不是纠结于繁琐的配置和底层实现细节。是Spring框架提供的一个JDBC抽象库,旨在简化传统的JDBC操作,避免了繁琐的JDBC代码和数据库资源的手动处理。它避免了JDBC代码的繁琐和手动设置参数、获取结果集的过程,同时提供了更多的控制权和灵活性。3、使用Mybatis。

升仔聊编程的博客 1607

SpringBoot学习之基础1

web项目重要框架学习与整理

LXMXHJ的博客 962

SpringBoot基础——SpringBoot配置

1、配置文件 两种配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的; application.properties application.yml 配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好 application.properties配置示例: server.port=8080 application...

热爱永不过时! 398

05、SpringBoot开发实用篇

什么是热部署?简单说就是你程序改了,现在要重新启动服务器,嫌麻烦?不用重启,服务器会自己悄悄的把更新后的程序给重新加载一遍,这就是热部署。热部署的功能是如何实现的呢?这就要分两种情况来说了,非springboot工程和springboot工程的热部署实现方式完全不一样。先说一下原始的非springboot项目是如何实现热部署的。非springboot项目热部署实现原理开发非springboot项目时,我们要制作一个web工程并通过tomcat启动,通常需要先安装tomcat服务器到磁盘中,开发的程序配置发布

... 1257

科普文:Java基础Spring系列之【SpringBoot2升级到SpringBoot3】

如果不创建这样的restTemplate类,正常逻辑会校验keycloak服务证书的有效性,而自签名的证书如果没有加入受信keystore里,将会抛出异常,中断逻辑。这个特性对于使用Java编写PC客户端并打包发布的软件大有裨益,但是对于服务器端的Java应用来说没有什么吸引力,因为服务器端的Java应用基本没有存储焦虑,并且在功能实现上大量使用了反射(会调用类的私有类/属性/方法),特别是三方框架类库组件会做这种打破编程语言访问限制的事情,从而让实际的业务开发变得简单。

为无为,事无事,味无味。 1444

05、基础入门-SpringBoot-HelloWorld

*Spring Boot** 是一个用于简化 **Spring** 应用初始搭建和开发的框架,旨在让开发者快速启动项目并减少配置文件。1. 打开 IDEA,选择 **File** > **New** > **Project**。- **Group** 和 **Artifact**:填写项目的组织名和项目名称。- 搜索并选择 **Web**,添加 **Spring Web** 依赖。2. 选择 **Spring Initializr**,点击 **Next**。

专注IT技术免费指导以及想、项目分享 577

05:springboot

SpringBoot提供了一种快速使用Spring的方式,基于约定优于配置的思想,可以让开发人员不必配置与逻 辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度 上缩短了项目周期。2014 年 4 月,Spring Boot 1.0.0 发布。Spring的顶级项目之一(https://spring.io)。虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。

weixin_43761434的博客 156
上一篇: SpringBoot基础--04web场景
下一篇: SpringBoot基础--06事件和监听器
sisyphoslee
博客等级 码龄7年 942粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值