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

Java学习,一文掌握Java之SpringBoot框架学习文集(6)

在这里插入图片描述

🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。
🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。
🎉欢迎 👍点赞✍评论⭐收藏

🔎 SpringBoot 领域知识 🔎

链接专栏
SpringBoot 专业知识学习一SpringBoot专栏
SpringBoot 专业知识学习二SpringBoot专栏
SpringBoot 专业知识学习三SpringBoot专栏
SpringBoot 专业知识学习四SpringBoot专栏
SpringBoot 专业知识学习五SpringBoot专栏
SpringBoot 专业知识学习六SpringBoot专栏

文章目录

  • 🏆 学习Java框架之Spring Boot
    • 🔎 Java框架之Spring Boot学习(6)
      • 🍁🍁 01、Spring Boot 中的自动装配原理是怎样的?
      • 🍁🍁 02、@SpringBootApplication 和 @SpringBootConfiguration 注解有什么区别?
      • 🍁🍁 03、Spring Boot 的注解处理器是什么?它的作用是什么?
      • 🍁🍁 04、Spring Boot 中的配置属性是如何加载和绑定的?
      • 🍁🍁 05、如何使用 Spring Boot 创建一个可执行的 JAR 文件?
      • 🍁🍁 06、Spring Boot 中的 DevTools 是用来做什么的?它的作用是什么?
      • 🍁🍁 07、Spring Boot Actuator 的工作原理是怎样的?
      • 🍁🍁 08、Spring Boot Actuator 中常见的端点有哪些?它们的作用是什么?
      • 🍁🍁 09、如何在 Spring Boot 中自定义 Actuator 端点?
      • 🍁🍁 10、Spring Boot 中的 Profile 是什么?如何使用它来实现多环境配置?

🏆 学习Java框架之Spring Boot

🔎 Java框架之Spring Boot学习(6)

🍁🍁 01、Spring Boot 中的自动装配原理是怎样的?

Spring Boot的自动装配原理主要基于两个关键的概念:条件注解和Spring Boot的启动器。

1. 条件注解(Conditional Annotations):Spring Boot通过条件注解来控制哪些自动装配的配置类应该生效。条件注解可以基于运行时的条件来判断是否满足某个条件,从而决定是否需要装配某个配置类。

常用的条件注解有:

@ConditionalOnClass
@ConditionalOnBean
@ConditionalOnProperty等。

通过合理使用条件注解,可以控制自动装配的精确度和条件。

2. 启动器(Starters):Spring Boot的启动器是一系列依赖描述符的集合,可以让您方便地导入一组相关的依赖。启动器包含一组自动装配的配置类和依赖,根据您的项目需要来自动装配所需的功能。Spring Boot Starters使得构建特定类型的应用程序变得更容易,您可以通过添加适当的启动器来获取所需的依赖。

当应用程序启动时,Spring Boot会根据条件注解的设置以及应用程序的依赖关系,自动装配应用程序所需的各种配置类和其他组件。它会根据约定和配置去扫描和加载自动装配的Bean,并将它们注册到应用程序上下文中以供使用。

自动装配原理的核心在于Spring Boot的启动器以及条件注解的使用。启动器提供了一种方便的方式来引入所需的功能,而条件注解则通过对条件的判断来决定是否需要装配某个配置类。这种机制使得开发者可以根据实际需求进行自由定制和灵活配置。

🍁🍁 02、@SpringBootApplication 和 @SpringBootConfiguration 注解有什么区别?

@SpringBootApplication@SpringBootConfiguration是Spring Boot中的两个注解,它们有一些区别和作用。

1. @SpringBootApplication是一个复合注解,它包含了@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan三个注解。它的作用是标识一个类是Spring Boot应用程序的入口类,同时也是配置类。@EnableAutoConfiguration会自动根据项目的依赖和配置,进行自动装配,而@ComponentScan用于扫描并注册Spring组件。

2. @SpringBootConfiguration是一个元注解,它是Spring Boot提供的专门用于标识配置类的注解。与@Configuration注解类似,@SpringBootConfiguration表明一个类是一个Spring Boot的配置类,用于定义和组织Bean的创建和配置。@SpringBootConfiguration通常与@Configuration一起使用。

综上所述,@SpringBootApplication 是一个更为综合的注解,它不仅标识一个类是Spring Boot应用程序的入口类,同时也是配置类,并且包含了自动装配和组件扫描的功能。

@SpringBootConfiguration 只是一个用于标识配置类的注解,用于定义和组织Bean的创建和配置。通常情况下,我们会在Spring Boot应用程序的入口类上使用@SpringBootApplication注解,而在其他的配置类上使用@SpringBootConfiguration@Configuration注解。

以下是 @SpringBootApplication@SpringBootConfiguration 注解的区别总结:

区别点@SpringBootApplication@SpringBootConfiguration
作用标识 Spring Boot 应用程序的入口类,同时也是配置类用于标识 Spring Boot 的配置类
组合注解@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan 三个注解组合而成
自动装配包含 @EnableAutoConfiguration,用于自动装配不包含
扫描组件包含 @ComponentScan,用于扫描组件不包含

总的来说,@SpringBootApplication 是一个更为综合的注解,包含了多个注解的功能,并作为 Spring Boot 应用程序的入口类。而 @SpringBootConfiguration 则是一个专门用于标识配置类的注解,作用相对单一。

🍁🍁 03、Spring Boot 的注解处理器是什么?它的作用是什么?

Spring Boot 的注解处理器是指用于处理 Spring Boot 注解的特殊处理器。它们用于解析和处理 Spring Boot 的特定注解,实现相应的功能。

在 Spring Boot 中,使用注解处理器可以帮助开发人员节省大量的配置代码,使得应用程序的开发更加简洁高效。以下是 Spring Boot 中常用的注解处理器:

1. @EnableAutoConfiguration: 这个注解处理器用于自动配置 Spring Boot 应用程序的参数。它基于应用的依赖和配置信息,自动进行相关的配置,简化了开发人员的工作。

2. @ComponentScan: 这个注解处理器用于自动扫描和注册 Spring 组件,包括普通的 Bean、组件、配置类等。通过指定包路径和过滤条件,@ComponentScan 可以快速地扫描和加载需要的组件。

3. @Conditional: 这个注解处理器用于条件化地装配和配置 Bean。通过在配置类或方法上添加 @Conditional 注解和相关的条件判断,开发人员可以根据特定的条件选择性地装配或配置 Bean。

4. @Profile: 这个注解处理器用于在多环境下选择性地激活配置。通过为配置类或方法添加 @Profile 注解,并指定相应的环境配置,开发人员可以根据不同的环境加载不同的配置。

这些注解处理器都是 Spring Boot 提供的核心功能,通过它们,开发人员可以简化配置代码,提高开发效率,并使得应用程序更加易于维护和扩展。

注解处理器在 Spring Boot 中的作用主要有以下几个方面:

1. 自动配置@EnableAutoConfiguration 注解处理器用于自动配置 Spring Boot 应用程序的参数。它根据应用的依赖和配置信息,自动进行相关的配置,包括加载默认配置、装配 Bean、设置属性等。通过自动配置机制,开发人员可以省去大量的手动配置工作,使得应用程序的开发更加简洁高效。

2. 组件扫描和注册@ComponentScan 注解处理器用于自动扫描和注册 Spring 组件。它可以扫描指定包路径下的组件,包括普通的 Bean、组件、配置类等,然后将它们注册到 Spring 容器中。通过组件扫描和注册的功能,开发人员可以更方便地管理和使用组件,减少手动注册的工作量。

3. 条件装配和配置@Conditional 注解处理器用于条件化地装配和配置 Bean。通过在配置类或方法上添加 @Conditional 注解和相关的条件判断,可以根据特定的条件选择性地装配或配置 Bean。这样可以根据不同的环境或配置要求,在应用程序启动时动态地决定是否加载某个 Bean,从而实现更加灵活的配置管理。

4. 多环境配置@Profile 注解处理器用于在多环境下选择性地激活配置。通过为配置类或方法添加 @Profile 注解,并指定相应的环境配置,可以根据不同的环境加载不同的配置。这样可以方便地管理不同环境下的配置信息,避免在不同环境中频繁修改配置文件。

总的来说,注解处理器在 Spring Boot 中的作用是简化配置代码、提高开发效率、实现灵活的配置管理和自动化的组件装配,使得应用程序的开发、配置和部署更加方便和高效。

🍁🍁 04、Spring Boot 中的配置属性是如何加载和绑定的?

在 Spring Boot 中,配置属性的加载和绑定是通过 @ConfigurationProperties 注解和 Binder 进行的。

1. 配置属性的加载:Spring Boot 会读取应用程序的配置文件(如 application.propertiesapplication.yml)中定义的属性,并将其加载到一个属性源(ConfigurationPropertySources)中。属性源是一个包含了所有配置属性的集合。Spring Boot 支持多种类型的属性源,可以从不同的来源读取配置属性,包括特定配置文件、环境变量、系统属性、命令行参数等。

2. 配置属性的绑定:通过 @ConfigurationProperties 注解,开发人员可以将属性源中的属性绑定到特定的 Java 类上。在该类中,通过添加 @ConfigurationProperties 注解并指定前缀,可以将属性源中与前缀匹配的属性绑定到该类的属性上。绑定过程是通过 Binder 进行的,它会根据配置的规则和属性的类型进行属性值的转换和赋值。

在进行配置属性的绑定时,Spring Boot 还提供了一些其他的特性,包括属性值的验证、默认值的设置、多个配置文件的支持等。

通过加载和绑定配置属性,开发人员可以方便地将应用程序的配置信息映射到 Java 类的属性上。这样可以实现类型安全的配置管理,避免了硬编码的配置读取和转换工作,使得配置更加清晰、易于维护和扩展。

🍁🍁 05、如何使用 Spring Boot 创建一个可执行的 JAR 文件?

简单说明如何使用 Spring Boot 创建可执行的 JAR 文件。

1. 创建一个 Spring Boot 项目:使用 Spring Initializr 或手动创建一个基于 Spring Boot 的 Maven 项目。

2. 编写代码:在项目中编写你的应用程序代码,包括控制器、服务、实体类等。

3. 配置应用程序:在 application.propertiesapplication.yml 文件中配置应用程序的相关属性,例如数据库连接、端口号等。

4. 编译和打包:在命令行中进入项目根目录,执行以下命令进行编译和打包:

mvn clean package

5. 在目标文件夹中找到可执行的 JAR 文件:打包完成后,可以在项目的 target 目录中找到生成的 JAR 文件。

6. 运行可执行的 JAR 文件:在命令行中切换到 JAR 文件所在的目录,执行以下命令运行可执行的 JAR 文件:

java -jar your-application.jar

其中,your-application.jar 是生成的 JAR 文件的名称。

7. 验证应用程序的运行:在浏览器中访问应用程序的端口号(默认为 8080),或使用其他工具发送 HTTP 请求,验证应用程序是否成功运行。

通过以上步骤,你就可以使用 Spring Boot 创建一个可执行的 JAR 文件并成功运行应用程序。这种打包方式方便快捷,可以快速部署和分发应用程序,适用于独立运行的 Spring Boot 应用程序。

使用 Spring Boot 创建一个可执行的 JAR 文件可以通过以下步骤完成:

1. 配置 Spring Boot Maven 插件:在 Maven 项目的 pom.xml 文件中,添加 Spring Boot Maven 插件的依赖配置。确保使用的插件版本与你所使用的 Spring Boot 版本相匹配。

<properties><java.version>11</java.version><spring-boot.version>2.5.4</spring-boot.version>
</properties><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins>
</build>

2. 打包应用程序:使用 Maven 命令进行应用程序的打包。在项目根目录执行以下命令:

mvn clean package

该命令会将应用程序的编译输出打包为一个 JAR 文件,并将依赖的类库也包含在其中。

3. 运行可执行的 JAR 文件:在打包完成后,可以在目标文件夹(target)找到生成的 JAR 文件。使用以下命令运行可执行的 JAR 文件:

java -jar your-application.jar

其中,your-application.jar 是生成的 JAR 文件的名称。

通过以上步骤,你可以创建一个包含了应用程序和其依赖的可执行的 JAR 文件。该 JAR 文件可以直接在运行环境中执行,无需依赖其他的部署工具或容器。这种方式非常适合于快速部署和分发独立的 Spring Boot 应用程序。

🍁🍁 06、Spring Boot 中的 DevTools 是用来做什么的?它的作用是什么?

Spring Boot 中的 DevTools 是一个开发辅助工具,主要用于提高开发效率和降低开发成本。

DevTools 提供如下功能:

  1. 自动重启:在应用程序的 classpath 下的文件发生改变时,DevTools 会自动重启应用程序,加快开发效率。

  2. 实时类加载:DevTools 通过在类加载器中注册一个特殊的类加载器,可以实现在运行时替换类文件的功能。这意味着你可以在不需要重启应用程序的情况下修改类文件并立即看到更改结果。

  3. 静态资源变化监控:DevTools 可以监控类路径下静态资源文件(如 JavaScript、CSS、HTML 等),并在文件变化时重新加载。

  4. 全局属性配置:通过 DevTools,你可以在运行时配置全局属性,例如:禁用模板缓存、修改日志级别等。

  5. 自动配置:DevTools 可以检测应用程序中的依赖,并根据检测结果自动进行一些配置,例如:自动刷新数据库连接池、自动配置 JPA、自动配置消息处理等。

DevTools 是一个开发环境下非常有用的工具,可以提高开发效率和协作速度,并且使用它非常容易。只需在应用程序中添加以下 Maven 依赖即可:

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

综上所述,DevTools 是一个非常有用的开发辅助工具,可以提高开发效率和协作速度,在开发 Spring Boot 应用程序时非常值得尝试。

DevTools 的主要作用是提高开发效率和开发体验。下面列出了 DevTools 的几个作用:

  1. 自动重启:DevTools 具有自动重启应用程序的功能,这意味着在开发过程中,当你修改了应用程序的代码或资源文件时,无需手动停止和重新启动应用程序,DevTools 会自动检测变化并重新启动应用程序,从而加快了开发的迭代速度。

  2. 实时类加载:DevTools 通过在类加载过程中添加一个特殊的类加载器,实现了在运行时替换类文件的功能。这样,你可以在不关闭或重启应用程序的情况下修改类文件,并立即看到修改结果,无需等待重新编译和启动。

  3. 静态资源变化监控:DevTools 可以监控类路径下的静态资源文件的变化,例如 HTML、CSS、JavaScript 文件等。当这些文件发生变化时,DevTools 会自动重新加载资源,无需手动刷新浏览器。

  4. 全局属性配置:DevTools 提供了一些开发中常用的属性配置,例如禁用模板缓存、修改日志级别、配置全局错误页面等。这样,你可以在运行时对应用程序的属性进行更改,而无需重新编译和启动应用程序。

总的来说,DevTools 的作用是提高开发效率,加速开发迭代,并提供一些便利的开发工具和配置选项,使开发人员更专注于业务逻辑的开发,而不需要花费过多时间来启动、重启和刷新应用程序。

🍁🍁 07、Spring Boot Actuator 的工作原理是怎样的?

Spring Boot Actuator 是 Spring Boot 提供的一个管理端点的框架,可以方便地监控和管理 Spring Boot 应用。它的工作原理可以分为以下几点:

  1. 对 Spring Boot 应用进行运行时监控:Actuator 通过内置的 HTTP 端点提供了一组基本的接口,包括 /health、/metrics、/info 等,这些接口可以用来检查应用程序的运行状况、收集度量数据以及暴露应用程序的信息。这些信息均以 JSON 或者类似的格式输出,可以轻松地进行解析和集成。

  2. 集成 Spring Boot Starter:Actuator 可以轻松地与其他 Spring Boot Starter 集成,通过运行类似于 /actuator/env、/actuator/configprops、/actuator/mappings 等端点获取 Spring 的环境配置、Spring Boot 所有配置和 Spring MVC 映射等信息。

  3. 自定义端点:Actuator 允许开发人员自定义端点,实现任何类型的运行时信息的监控和管理。这样,就可以方便地将自定义信息集成到应用程序管理服务中,从而更好地监督应用程序的性能和运行状况。

  4. 安全和安全性设置:Actuator 支持与 Spring Security 进行集成以实现安全的元数据端点。Spring Boot Actuator 还提供了许多其他功能,例如通过监控 /shutdown 端点实现优雅地关闭应用程序等。

总的来说,Spring Boot Actuator 的工作原理是在应用程序中嵌入一组 HTTP 端点,用来实时监控和管理应用程序。这样,开发人员和系统管理员可以方便地检查应用程序的健康状况、度量数据和所有配置信息。Actuator 可以集成到任何基于 Spring Boot 的应用程序中,大大提高了应用程序的监管速度和管理能力。

🍁🍁 08、Spring Boot Actuator 中常见的端点有哪些?它们的作用是什么?

Spring Boot Actuator 提供了多个端点以方便用户监控 Spring Boot 应用程序的运行状况。以下是一些常见的端点:

  1. /health:检查应用程序的运行状况,包括检查应用程序的磁盘空间是否足够、数据库是否连接、消息队列是否运行等。

  2. /metrics:提供了用于监控 JVM 内存、HTTP 请求数量、响应时间等度量数据的端点。这些数据可以被外部系统使用,例如 Prometheus、Grafana 等度量监控平台。

  3. /info:提供有关应用程序的基本信息,如 Spring Boot 版本、环境变量、系统属性等。

  4. /trace:提供一个追踪端点来获取 HTTP 请求的跟踪信息,包括请求方法、请求 URL、响应码等。

  5. /env:提供了应用程序的所有环境变量和系统属性。

  6. /loggers:提供了所有日志记录器和它们的当前级别。它还允许用户设置特定记录器的级别。

  7. /configprops:提供了所有配置属性及其源(包括默认值)的详细信息。

  8. /dump:将线程转储输出到 HTTP 响应中,用于调试和故障排除。

  9. /mappings:提供了所有 Spring MVC 映射的详细信息。

此外,还有一些自定义端点可以添加到 Actuator 中。开发人员可以添加自己的端点,以向 Actuator 中添加自定义信息。

这些常见端点在 Spring Boot Actuator 中具有以下作用:

  1. /health:用于检查应用程序的健康状况。通过检查磁盘空间、数据库连接、消息队列等,可以确定应用程序是否正常运行。该端点对于监控应用程序的运行状况非常有用。

  2. /metrics:用于获取应用程序的度量数据。可以监控 JVM 内存使用情况、HTTP 请求数量、请求响应时间等。这些度量数据可以用于性能监控、问题排查和系统优化。

  3. /info:提供了应用程序的基本信息,如 Spring Boot 版本、环境变量、系统属性等。这对于了解应用程序的基本配置及其运行环境非常有用,特别是在多个环境中部署应用程序时。

  4. /trace:用于获取 HTTP 请求的跟踪信息。可以查看每个请求的方法、URL、请求参数、响应码等。这对于定位和解决请求问题非常有帮助。

  5. /env:提供了应用程序的所有环境变量和系统属性。这对于查看和调试应用程序的配置非常有用。

  6. /loggers:提供了应用程序的所有日志记录器和它们的当前级别。可以查看和修改日志记录器的级别,以更好地管理应用程序的日志输出级别。

  7. /configprops:提供了应用程序的所有配置属性和它们的来源信息。可以查看和调试应用程序的配置属性,包括默认值、命令行参数、配置文件等。

  8. /dump:将线程转储输出到 HTTP 响应中。这对于调试和故障排除非常有用,可以查看应用程序中的线程状态及堆栈信息。

  9. /mappings:提供了所有 Spring MVC 请求映射的详细信息。可以查看应用程序中的 URL 映射信息,包括请求路径、Controller、方法等。

这些端点可以通过 HTTP 请求访问,并以 JSON 格式返回相关信息。通过查看和利用这些端点,开发人员和系统管理员可以更好地监控、管理和调试 Spring Boot 应用程序。

🍁🍁 09、如何在 Spring Boot 中自定义 Actuator 端点?

在 Spring Boot 中,可以通过编写自定义的端点类来添加自定义 Actuator 端点。下面是一些步骤:

1. 创建一个新的 Spring Boot 项目或打开现有的项目。

2. 创建一个新的类,实现 Endpoint 接口或其子接口,用于定义自定义端点的行为和返回结果。

@Component
public class CustomEndpoint implements Endpoint<Map<String, Object>> {@Overridepublic String getId() {return "customEndpoint";}@Overridepublic boolean isEnabled() {return true;}@Overridepublic boolean isSensitive() {return true;}@Overridepublic Map<String, Object> invoke() {// 自定义端点的逻辑处理Map<String, Object> result = new HashMap<>();result.put("message", "This is a custom endpoint");return result;}
}

在上面的例子中,CustomEndpoint 类实现了 Endpoint 接口,并提供了自定义的端点逻辑。getId() 方法返回端点的唯一标识符,isEnabled() 方法确定端点是否启用,isSensitive() 方法确定端点是否包含敏感信息,invoke() 方法是自定义端点的实际逻辑实现。

3. 在该类上添加 @Component 注解,以将其声明为 Spring Bean。

4.(可选)自定义端点可以接受参数。可以在自定义的端点类中定义所需的参数,然后通过使用 @ReadOperation@WriteOperation@DeleteOperation 注解来处理相应的 HTTP 请求方法。

@Component
public class CustomEndpoint implements Endpoint<Map<String, Object>> {// ...@ReadOperationpublic Map<String, Object> getEndpointInfo(@Selector String name) {// 使用 @Selector 注解来接受参数Map<String, Object> result = new HashMap<>();result.put("message", "Hello, " + name);return result;}// ...
}

在上面的例子中,getEndpointInfo() 方法接受一个参数 name,可以通过 @Selector 注解来获取该参数。

5. 启动应用程序,自定义的端点将会被自动注册到 Actuator 端点中。

现在,你可以通过访问 /actuator/customEndpoint 端点来访问自定义的端点,并获取自定义的结果。根据实际需求,可以根据需要扩展、修改自定义端点的逻辑。自定义端点可以提供更多的应用程序信息,或者实现特定的监控或管理功能。

🍁🍁 10、Spring Boot 中的 Profile 是什么?如何使用它来实现多环境配置?

在 Spring Boot 中,Profile(配置文件) 是一种用于根据不同的环境或条件提供不同配置的机制。通过使用 Profile,可以在同一个应用程序中为不同的目标环境(如开发、测试、生产等)或应用程序需求定义不同的配置。

使用 Profile 可以在应用程序中定义不同的配置,例如数据库连接、日志级别、缓存策略等。在不同的环境或条件下,可以通过激活不同的 Profile 来加载相应的配置。

Spring Boot 提供了多种方式来激活和配置 Profile。下面是一些常用的方式:

1. 使用 spring.profiles.active 配置属性:可以通过在 application.propertiesapplication.yml 文件中设置 spring.profiles.active 属性来指定要激活的 Profile。例如:

spring.profiles.active=dev

2. 使用命令行参数:可以使用 -Dspring.profiles.active=dev 命令行参数来指定要激活的 Profile。

3. 使用环境变量:可以设置名为 SPRING_PROFILES_ACTIVE 的环境变量来指定要激活的 Profile。

4. 使用 @Profile 注解:可以在 Spring Bean 上使用 @Profile 注解来指定该 Bean 在特定 Profile 下才会被创建。例如:

@Component
@Profile("dev")
public class DevBean {// ...
}

在上述示例中,DevBean Bean 只会在 dev Profile 下被创建。

当应用程序启动时,Spring Boot 会根据配置的 Profile 来加载相应的配置。如果未指定任何 Profile,Spring Boot 将使用默认的配置。

使用 Profile 可以轻松地在不同的环境或条件下提供不同的配置,使应用程序能够灵活地适应各种需求,从而实现更好的可配置性和可扩展性。

可以使用 Spring Boot 的 Profile 机制来实现多环境配置。下面是一个示例:

1. 创建不同环境的配置文件

src/main/resources 目录下创建多个配置文件,例如:

  • application-dev.yml:开发环境配置
  • application-test.yml:测试环境配置
  • application-prod.yml:生产环境配置

在这些配置文件中,可以指定相应环境下的配置项,例如:

spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/mydbusername: rootpassword: mypassword

2. 指定要激活的 Profile

可以通过以下方式来指定要激活的 Profile:

  • application.propertiesapplication.yml 文件中设置 spring.profiles.active 属性,例如:

    spring.profiles.active=dev
    
  • 使用命令行参数 -Dspring.profiles.active=dev 来指定要激活的 Profile

3. 在代码中引用配置

可以使用 @Value 注解或使用 Environment 类来引用配置,例如:

@Component
public class MyComponent {@Value("${spring.datasource.url}")private String dbUrl;@Autowiredprivate Environment env;public void doSomething() {String password = env.getProperty("spring.datasource.password");// ...}
}

在上述示例中,MyComponent 类引用了 spring.datasource.urlspring.datasource.password 属性的值,这些属性值是在配置文件中定义的。

通过使用 Profile ,可以在不同环境下使用不同的配置文件,方便地管理相应环境下的配置,从而提高了系统的可维护性和可扩展性。

4. 使用不同的配置文件名

如果不想使用默认的配置文件名,可以使用 spring.config.namespring.config.location 属性来指定要使用的配置文件名和路径。例如,可以将配置文件名改为 app-config.yml,并将路径设置为 /etc/myapp,并使用 dev Profile:

spring.config.location=classpath:/,file:/etc/myapp/
spring.config.name=app-config
spring.profiles.active=dev

在这种情况下,Spring Boot 将在 classpath://etc/myapp 目录下查找 app-config.yml 文件,并将 dev Profile 激活。

5. 使用自定义 Profile

除了使用 devtestprod 等标准的 Profile,还可以通过自定义 Profile 来加载自定义的配置。可以通过以下步骤来定义和激活自定义 Profile:

  • application.propertiesapplication.yml 文件中设置自定义 Profile,例如:

    spring.profiles.active=mycustomprofile
    
  • 创建一个名为 application-mycustomprofile.yml 的配置文件,其中的配置项适用于自定义 Profile

    mycustomproperty: mycustomvalue
    
  • 在代码中引用自定义配置,例如:

    @Value("${mycustomproperty}")
    private String myCustomProperty;
    

在上述示例中,mycustomprofile 是自定义的 Profile 名称。通过使用自定义 Profile,可以为特定的使用场景定义特定的配置项,从而更加灵活地管理应用程序的配置。

总结:通过使用 Profile 机制,可以轻松地实现多环境配置,为不同的运行环境提供不同的配置。可以通过设置不同的 Profile 来激活相应配置,也可以使用自定义 Profile 来定义特定场景下的配置。这使得系统的配置更加灵活和可管理,提高了系统的可靠性和可扩展性。

在这里插入图片描述

相关文章:

Java学习,一文掌握Java之SpringBoot框架学习文集(6)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…...

美团点评秋招前端测评分享

一&#xff0e; 选择题 1. 甲乙二人各自加工一批同样数量的零件&#xff0c;甲完成一半时&#xff0c;乙完成150个&#xff0c;甲全部完成时&#xff0c;乙完成全部的5/6&#xff0c;求这批零件一共有&#xff08;C&#xff09;个 A. 320 B. 400 C. 360 D. 420 2. 分析如…...

docker安装nodejs,并更改为淘宝源

拉取官方 Node.js 镜像 docker pull node:latest创建 Dockerfile&#xff0c;并更改 NPM 下载源为淘宝源&#xff0c;设置为全局持久化 # 使用最新版本的Node.js作为基础镜像 FROM node:latest# 设置工作目录为/app WORKDIR /app # 更改 NPM 下载源为淘宝源&#xff0c;并设置…...

Vue中的class和style绑定

聚沙成塔每天进步一点点 本文内容 ⭐ 专栏简介动态绑定class对象语法数组语法 动态绑定style对象语法多重值 ⭐ 写在最后 ⭐ 专栏简介 Vue学习之旅的奇妙世界 欢迎大家来到 Vue 技能树参考资料专栏&#xff01;创建这个专栏的初衷是为了帮助大家更好地应对 Vue.js 技能树的学习…...

出版实务 | 出版物的成本及其构成

文章目录 出版物成本的总体构成直接成本开发成本制作成本 间接成本期间费用 本量利分析原则特点和作用变动成本项目固定成本项目本量利分析的基本公式及其应用定价发行折扣率销售数量单位销售收入销售收入总额单位销售税金销售税金总额变动成本总额单位变动成本固定成本总额单位…...

docker 部署项目的操作文档,安装nginx

目录 1 部署环境检查2 相关知识点2.1 docker默认镜像存放地址2.2 docker 的镜像都是tar 包&#xff1f;2.3 Docker-compose 是直接使用镜像创建容器&#xff1f;2.4 Docker Compose down 就是将容器删除&#xff1f;2.5 删除&#xff0c;会删除挂载嘛2.6 DockerFile 和 docker …...

spring boot 源码解读与原理分析

一、概述 Spring Boot是一个基于Spring框架的开源项目&#xff0c;旨在简化Spring应用程序的创建和部署。它通过自动配置和约定大于配置的原则&#xff0c;使得开发者能够快速构建独立、可运行的、生产级别的Spring应用程序。本文将对Spring Boot的源码进行解读&#xff0c;并…...

Python基础(二十四、JSON和pyecharts)

文章目录 一、JSON1.JSON介绍2.JSON格式数据转化3.示例 二、pyecharts1.安装pyecharts包2.查看官方示例 三、开发示例 一、JSON 1.JSON介绍 JSON是一种轻量级的数据交互格式&#xff0c;采用完全独立于编程语言的文本格式来存储和表示数据&#xff08;就是字符串&#xff09;…...

Java 并发之《深入理解 JVM》关于 volatile 累加示例的思考

在周志明老师的 《深入理解 JVM》一书中关于 volatile 关键字线程安全性有一个示例代码&#xff08;代码有些许改动&#xff0c;语义一样&#xff09;&#xff1a; public class MyTest3 {private static volatile int race 0;private static void increase() {race;}public …...

GPM合并资料整理-GEM部分

一、性能数据上报项 1. CPU模块 上报键值说明采集平台cpu当前进程cpu使用率平均值Android & iOStotcpu系统cpu总使用率平均值Android & iOScpu_temp_maxcpu最高温度Androidcpu_temp_avgcpu温度平均值Androidgpu_temp_avggpu温度平均值Androidgpu_temp_maxgpu最高温度…...

STM32使用1.69寸液晶显示模块使用缓冲区实现快速刷新全屏显示字符串功能

一个1.69寸SPI接口的液晶显示模块&#xff0c;有320*24076800个点&#xff0c;每个点有2个字节表示RGB的颜色&#xff0c;所以需要153.6K个字节的数据来刷新全屏&#xff0c;如果SPI口输出数据不是高速并且不紧密排列的话&#xff0c;刷新就会比较慢&#xff0c;有从下到下的肉…...

SpringBoot AOP

依赖引入 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency>代码实现 以给公共字段注入值为例 公共字段与枚举类&#xff1a; private LocalDateTime createT…...

鉴源论坛 · 观模丨浅谈Web渗透之信息收集(下)

作者 | 林海文 上海控安可信软件创新研究院汽车网络安全组 版块 | 鉴源论坛 观模 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 信息收集在渗透测试过程中是最重要的一环&#xff0c;“浅谈web渗透之信息收集”将通过上下两篇&#xff0c;对信息收集、…...

构建自己的私人GPT-支持中文

上一篇已经讲解了如何构建自己的私人GPT&#xff0c;这一篇主要讲如何让GPT支持中文。 privateGPT 本地部署目前只支持基于llama.cpp 的 gguf格式模型&#xff0c;GGUF 是 llama.cpp 团队于 2023 年 8 月 21 日推出的一种新格式。它是 GGML 的替代品&#xff0c;llama.cpp 不再…...

php将文本内容写入一个文件(面向过程写法)

一、封装2个函数&#xff0c;读写文件 /*** desc 读取文件内容* param string $filename* return array*/ private function readContent(string $filename): array {$text file_get_contents($filename);if (!$text) {return [];}$result json_decode($text,true);return…...

SPDK As IPU Firmware

对于不熟悉术语Infrastructure Processing Unit (IPU, 基础设施处理器)的同学&#xff0c;IPU是PCIe形态的卡&#xff0c;连接到主机系统后可以卸载主机的“基础设施”工作。它通常是面向云服务商或者超融合服务提供商的。对于熟悉SPDK的开发人员来理解&#xff0c;这些卡通常具…...

快速删除node_modules文件夹

文章目录 快速删除node_modules文件夹PowerShell命令快速删除使用npm提供的命令删除node_modules 快速删除node_modules文件夹 前端开发过程中,经常会遇到npm操作问题,有时候不得不需要删除node_modules目录下所有的文件,然后重新npm install npm cache clean --force rm -rf…...

Mac安装nvm以及使用nvm安装node

1. 安装nvm命令 git clone https://gitee.com/mirrors/nvm.git ~/.nvm && cd ~/.nvm && git checkout git describe --abbrev0 --tags2. 配置环境变量 vi ~/.bash_profileexport NVM_DIR"$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] &&…...

vue element-ui的table列表中展示缩略图片效果实例

这篇文章主要给大家介绍了关于vue element-ui的table列表中展示多张图片(可放大)效果的相关资料,文中通过代码示例介绍的非常详细,需要的朋友可以参考下 一、效果图 二、代码部分 1、原理 使用 <el-table-column> 和 <el-image> 组件来在表格中插入缩略图 2、te…...

C/C++动态内存管理

文章目录 前言1.C/C内存分布2.C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free3.C内存管理方式3.1 new/delete操作内置类型3.2 new和delete操作自定义类型 4. operator new与operator delete函数4.1 operator new与operator delete函数 5. new和delete的实现原…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...