SpringBoot3—核心特性:基础特性
- 软件开发
- 2025-09-15 21:06:02

一、SpringApplication (1)自定义 banner 类路径添加 banner.txt 或设置 spring.banner.location 就可以定制 banner推荐网站:Spring Boot banner在线生成工具,制作下载英文banner.txt,修改替换banner.txt文字实现自定义,个性化启动banner-bootschool.net (2)自定义 SpringApplication import org.springframework.boot.Banner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication application = new SpringApplication(MyApplication.class); application.setBannerMode(Banner.Mode.OFF); application.run(args); } } (3)FluentBuilder API new SpringApplicationBuilder() .sources(Parent.class) .child(Application.class) .bannerMode(Banner.Mode.OFF) .run(args); 二、Profiles
环境隔离能力;快速切换开发、测试、生产环境
步骤:
标识环境:指定哪些组件、配置在哪个环境生效切换环境:这个环境对应的所有组件和配置就应该生效 (1)使用 2.1.1指定环境 Spring Profiles 提供一种隔离配置的方式,使其仅在特定环境生效任何@Component, @Configuration 或 @ConfigurationProperties 可以使用 @Profile 标记,来指定何时被加载。【容器中的组件都可以被 @Profile标记】 /** * 环境隔离: * 1、标识环境 * 1)、区分出几个环境: dev(开发环境)、test(测试环境)、prod(生产环境) * 2)、指定每个组件在哪个环境下生效; default环境:默认环境 * 通过: @Profile({"test"})标注 * 组件没有标注@Profile代表任意时候都生效 * 3)、默认只有激活指定的环境,这些组件才会生效。 * 2、激活环境 * 配置文件激活:spring.profiles.active=dev; * 命令行激活: java -jar xxx.jar --spring.profiles.active=dev * * 3、配置文件怎么使用Profile功能 * 1)、application.properties: 主配置文件。任何情况下都生效 * 2)、其他Profile环境下命名规范: application-{profile标识}.properties: * 比如:application-dev.properties * 3)、激活指定环境即可: 配置文件激活、命令行激活 * 4)、效果: * 项目的所有生效配置项 = 激活环境配置文件的所有项 + 主配置文件和激活文件不冲突的所有项 * 如果发生了配置冲突,以激活的环境配置文件为准。 * application-{profile标识}.properties 优先级高于 application.properties * * 主配置和激活的配置都生效,优先以激活的配置为准 */ 2.1.2环境激活 配置文件中激活指定环境 spring.profiles.active=production,hsqldb 也可以使用命令行激活还可以配置默认环境; 不标注@Profile 的组件永远都存在 以前默认环境叫defaultspring.profiles.default=test 推荐使用spring.profiles.active,而不是spring.profiles.default 2.1.3环境包含注意:
spring.profiles.active 和spring.profiles.default 只能用到 无 profile 的文件中(即application.properties/yaml),如果在application-dev.yaml中编写就是无效的也可以额外添加生效文件,而不是激活替换。比如:application-dev.yaml最佳实战:
生效的环境 = 激活的环境/默认环境 + 包含的环境 spring.profiles.include[0]=common spring.profiles.include[1]=local 项目里面这么用 基础的配置mybatis、log、xxx:写到包含环境中需要动态切换变化的 db、redis:写到激活的环境中 (2)Profile分组 创建prod组,指定包含db和mq配置 spring.profiles.group.prod[0]=db spring.profiles.group.prod[1]=mq 使用--spring.profiles.active=prod ,就会激活prod,db,mq配置文件 (3)Profile配置文件 application-{profile}.properties(就是像这种:application-dev.properties)可以作为指定环境的配置文件激活这个环境,配置就会生效。最终生效的所有配置是 application.properties:主配置文件,任意时候都生效application-{profile}.properties:指定环境配置文件,激活指定环境生效 profile优先级 > application 三、外部化配置场景:线上应用如何快速修改配置,并应用最新配置?
SpringBoot 使用 配置优先级 + 外部配置 简化配置更新、简化运维只需要给jar应用所在的文件夹放一个application.properties最新配置文件,重启项目就能自动应用最新配置 (1)配置优先级我们可以使用各种外部配置源,包括Java Properties文件、YAML文件、环境变量和命令行参数
@Value可以获取值,也可以用@ConfigurationProperties将所有属性绑定到java object中
以下是 SpringBoot 属性源加载顺序。后面的会覆盖前面的值。由低到高,高优先级配置覆盖低优先级
默认属性(通过SpringApplication.setDefaultProperties指定的)@PropertySource指定加载的配置(需要写在@Configuration类上才可生效)配置文件(application.properties/yml等)RandomValuePropertySource支持的random.*配置(如:@Value("${random.int}"))OS 环境变量Java 系统属性(System.getProperties())JNDI 属性(来自java:comp/env)ServletContext 初始化参数ServletConfig 初始化参数SPRING_APPLICATION_JSON属性(内置在环境变量或系统属性中的 JSON)(该命令在命令行中输入)命令行参数测试属性。(@SpringBootTest进行测试时指定的属性)测试类@TestPropertySource注解Devtools 设置的全局属性。($HOME/.config/spring-boot)结论:配置可以写到很多位置,常见的优先级顺序:
命令行> 配置文件> springapplication配置
配置文件优先级如下:(后面覆盖前面)
jar 包内的application.properties/ymljar 包内的application-{profile}.properties/ymljar 包外的application.properties/ymljar 包外的application-{profile}.properties/yml建议:用一种格式的配置文件。如果.properties和.yml同时存在,则.properties优先
结论:包外 > 包内; 同级情况:profile配置 > application配置
所有参数均可由命令行传入,使用--参数项=参数值,将会被添加到环境变量中,并优先于配置文件。比如java -jar app.jar --name="Spring",可以使用@Value("${name}")获取
(2)外部配置 SpringBoot 应用启动时会自动寻找application.properties和application.yaml位置,进行加载。顺序如下:(后面覆盖前面) 类路径: 内部 类根路径类下/config包 当前路径(jar包在的位置) 当前路径当前下/config子目录/config目录的直接子目录 最终效果:优先级由高到低,前面覆盖后面 命令行 > 包外config直接子目录 > 包外config目录 > 包外根目录 > 包内目录同级比较: profile配置 > 默认配置properties配置 > yaml配置 规律:最外层的最优先 命令行 > 所有包外 > 包内config目录 > 根目录profile > application 配置不同就都生效(互补),配置相同高优先级覆盖低优先级 (3)导入配置 使用spring.config.import可以导入额外配置优先级: (4)属性占位符配置文件中可以使用 ${name:default}形式取出之前配置过的值
四、单元测试-JUnit5 (1)整合 spring-boot-test提供核心测试能力,spring-boot-test-autoconfigure 提供测试的一些自动配置我们只需要导入spring-boot-starter-test 即可整合测试 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> spring-boot-starter-test 默认提供了以下库供我们测试使用 JUnit 5TestingAssertJ - fluent assertions java libraryGitHub - hamcrest/JavaHamcrest: Java (and original) version of HamcrestMockito framework siteGitHub - json-path/JsonPath: Java JsonPath implementationGitHub - skyscreamer/JSONassert: Write JSON unit tests in less code. Great for testing REST interfaces. (2)测试 4.2.1组件测试直接@Autowired容器中的组件进行测试
4.2.2注解JUnit5的注解与JUnit4的注解有所变化
JUnit 5 User Guide
10个测试方法,BeforeEach运行10次。
10个测试方法,BeforeAll只运行一次。
4.2.3断言明确知道程序运行的结果的情况下,将运行出来的结果和明确知道的结果进行比较
4.2.4嵌套测试JUnit 5 可以通过 Java 中的内部类和@Nested 注解实现嵌套测试,从而可以更好的把相关的测试方法组织在一起。在内部类中可以使用@BeforeEach 和@AfterEach 注解,而且嵌套的层次没有限制
4.2.5参数化测试 参数化测试是JUnit5很重要的一个新特性,它使得用不同的参数多次运行测试成为了可能,也为我们的单元测试带来许多便利利用@ValueSource等注解,指定入参,我们将可以使用不同的参数进行多次单元测试,而不需要每新增一个参数就新增一个单元测试,省去了很多冗余代码
SpringBoot3—核心特性:基础特性由讯客互联软件开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“SpringBoot3—核心特性:基础特性”