解析Spring Boot中的Profile:配置文件与代码的双重掌控

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 解析Spring Boot中的Profile:配置文件与代码的双重掌控

创建一个spring boot 项目

基于 Spring Boot 创建 Web 应用程序的方法有很多,我们选择在idea中直接进行创建,服务器URL选择Spring Initializer 网站,类型选择Maven项目,java版本根据jdk版本进行选择。

然后添加相应依赖以及选择spring boot版本

接下来我们写一个Controller

@RestController
@RequestMapping("/user")
public class UserController {
    // 请求映射,用于处理请求
    @RequestMapping("/zcx")
    public Userinfo getUserInfo() {
        // 创建Userinfo对象
        Userinfo userinfo = new Userinfo();
        // 设置age属性
        userinfo.setAge("45");
        // 设置name属性
        userinfo.setName("zcx-yyds");
        // 返回Userinfo对象
        return userinfo;
    }
}

现在我们需要对这个应用程序进行打包,使用idea上的打包工具,点击package进行打包

我们将得到一个springboot1-0.0.1-SNAPSHOT.jar文件,而这个 jar 文件就是可以直接运行的可执行文件,内置了 Tomcat Web 服务器。我们直接使用如下命令进行运行这个Spring boot程序。

java -jar springboot1-0.0.1-SNAPSHOT.jar

然后我们使用postman来进行项目访问测试,得到如下返回结果,证明我们的程序服务已经启动成功了。

现在我们已经明白如何构建、打包以及运行一个简单的 Web 应用程序了。

spring boot 中的配置体系

在 Spring Boot 中,其核心设计理念是对配置信息的管理采用约定优于配置,也就是说约定大于配置

Spring Boot中的Profile是一个非常有用的功能,它可以让我们在不修改代码的情况下,通过配置文件来控制程序的行为。

在Spring Boot中,Profile是一种用于控制应用程序行为的机制。通过使用不同的Profile,我们可以根据不同的环境或场景来加载不同的配置信息,从而实现应用程序的灵活配置。

配置文件与 Profile

根据环境的不同而存在很多套配置。假设我们存在如下所示的配置文件集合:

配置文件application-dev.properties中的代码为:

server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/dev_db
spring.datasource.username=root 
spring.datasource.password=666666

配置文件application-prod.properties中的代码为:

server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/prod_db
spring.datasource.username=root 
spring.datasource.password=666666

常见的配置文件命名方式有以下几种:

/{application}-{profile}.properties

/{label}/{application}-{profile}.properties

在 Spring Boot 中,我们可以在主 application.properties 中使用如下的配置方式来激活当前所使用的 Profile:

spring.profiles.active = dev

当然还有以下几种方式启动Profile:

  1. 在主 application.properties指定要激活的Profile。
spring.profiles.active = dev
  1. 在启动命令中指定Profile。
java -jar springboot1-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
  1. 在程序中显示设置Profile。例如:
@SpringBootApplication
public class Springboot1Application {
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(Springboot1Application.class);
        app.setAdditionalProfiles("dev");
        app.run(args);
    }
}

这将激活名为prod的Profile。

代码控制与Profile

在 Spring Boot 中,Profile 这一概念的应用场景还包括动态控制代码执行流程。为此,我们需要使用 @Profile 注解,Profile注解可以用于指定某个类或方法在特定的配置环境下生效。只要是被@Component@Configuration注解的类都可以使用@Profile注解。

使用一个示例来了解Profile注解的使用方法:

@Configuration
public class DataSourceConfig {
    @Bean
    @Profile("dev")
    public DataSource devDataSource() {
        //创建 dev 环境下的 DataSource
        return null;
    }
    @Bean()
    @Profile("prod")
    public DataSource prodDataSource() {
        //创建 prod 环境下的 DataSource
        return null;
    }
}

通过这种方式,可以达到与使用配置文件相同的效果。

我们来看一个更为详细具体的例子:

  1. 创建一个接口 MyService
public interface MyService {
    void doSomething();
}
  1. 创建两个不同的实现类,分别用于不同的配置文件。
@Component
@Profile("prod")
public class ProdMyService implements MyService {
    @Override
    public void doSomething() {
        System.out.println("Prod service is running.");
    }
}
@Component
@Profile("dev")
public class DevMyService implements MyService {
    @Override
    public void doSomething() {
        System.out.println("Dev service is running.");
    }
}

上述示例中,我们创建了两个不同的实现类,一个用于 development 配置文件,另一个用于 production 配置文件。@Profile 注解分别标记了它们,以便 Spring 知道在哪个配置文件下激活它们。

3. 在 Spring 配置文件(例如 application.propertiesapplication.yml)中指定要激活的配置文件,例如: application.properties

spring.profiles.active=prod

spring.profiles.active 设置为 development,表示我们希望激活的开发配置文件。

4. 创建一个启动类,以演示如何使用 MyService

@SpringBootApplication
public class Springboot1Application implements CommandLineRunner {
    // 声明一个注入的MyService对象
    @Autowired
    private MyService myService;
    // 声明一个名为run的方法,用来启动Spring应用
    public static void main(String[] args) {
        // 调用SpringApplication的run方法,传入Springboot1Application类和args参数
        SpringApplication.run(Springboot1Application.class, args);
    }
    // 方法run,用来执行Spring应用的业务逻辑
    @Override
    public void run(String... args) {
        // 调用myService的doSomething方法
        myService.doSomething();
    }
}

通过结果我们发现运行这个应用程序时,它会根据配置文件中的 spring.profiles.active 属性来选择相应的实现类。

如果你还想了解更多内容请参考spring boot官网


目录
打赏
0
0
0
0
5
分享
相关文章
智慧工地云平台的技术架构解析:微服务+Spring Cloud如何支撑海量数据?
慧工地解决方案依托AI、物联网和BIM技术,实现对施工现场的全方位、立体化管理。通过规范施工、减少安全隐患、节省人力、降低运营成本,提升工地管理的安全性、效率和精益度。该方案适用于大型建筑、基础设施、房地产开发等场景,具备微服务架构、大数据与AI分析、物联网设备联网、多端协同等创新点,推动建筑行业向数字化、智能化转型。未来将融合5G、区块链等技术,助力智慧城市建设。
|
21天前
|
Spring底层架构核心概念解析
理解 Spring 框架的核心概念对于开发和维护 Spring 应用程序至关重要。IOC 和 AOP 是其两个关键特性,通过依赖注入和面向切面编程实现了高效的模块化和松耦合设计。Spring 容器管理着 Beans 的生命周期和配置,而核心模块为各种应用场景提供了丰富的功能支持。通过全面掌握这些核心概念,开发者可以更加高效地利用 Spring 框架开发企业级应用。
73 18
微信小程序 app.json 配置文件解析与应用
本文介绍了微信小程序中 `app.json` 配置文件的详细
137 12
Spring Boot 配置文件总结
Spring Boot 提供全局配置文件 `application.properties` 和 `application.yml`,用于修改自动配置的默认值。前者使用键值对配置,后者使用缩进和冒号。不同环境(开发、测试、生产)可切换配置文件,通过 `spring.profiles.active` 指定。例如,开发环境端口为4790,测试环境为4791,生产环境为4792。配置示例展示了属性、List、Map定义及引用方法。
64 14
SpringBoot整合Flowable【04】- 通过代码控制流程流转
本文介绍了如何使用Flowable的Java API控制流程流转,基于前文构建的绩效流程模型。首先,通过Flowable-UI导出模型文件并部署到Spring Boot项目中。接着,详细讲解了如何通过代码部署、启动和审批流程,涉及`RepositoryService`、`RuntimeService`和`TaskService`等核心服务类的使用。最后,通过实际操作演示了流程从部署到完成的全过程,并简要说明了相关数据库表的变化。本文帮助读者初步掌握Flowable在实际业务中的应用,后续将深入探讨更多高级功能。
91 0
如何在 Java 代码中使用 JSqlParser 解析复杂的 SQL 语句?
大家好,我是 V 哥。JSqlParser 是一个用于解析 SQL 语句的 Java 库,可将 SQL 解析为 Java 对象树,支持多种 SQL 类型(如 `SELECT`、`INSERT` 等)。它适用于 SQL 分析、修改、生成和验证等场景。通过 Maven 或 Gradle 安装后,可以方便地在 Java 代码中使用。
268 11
实现一个带有昼夜背景切换的动态时钟:从代码到功能解析
本文介绍了一个使用Python和Tkinter库实现的动态时钟程序,具有昼夜背景切换、指针颜色随机变化及整点和半点报时功能。通过设置不同的背景颜色和随机变换指针颜色,增强视觉吸引力;利用多线程技术确保音频播放不影响主程序运行。该程序结合了Tkinter、Pygame、Pytz等库,提供了一个美观且实用的时间显示工具。欢迎点赞、关注、转发、收藏!
134 94
使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式
本文介绍了在使用Spring框架时,如何通过创建`applicationContext.xml`配置文件来管理对象。首先,在resources目录下新建XML配置文件,并通过IDEA自动生成部分配置。为完善配置,特别是添加AOP支持,可以通过IDEA的Live Templates功能自定义XML模板。具体步骤包括:连续按两次Shift搜索Live Templates,配置模板内容,输入特定前缀(如spring)并按Tab键即可快速生成完整的Spring配置文件。这样可以大大提高开发效率,减少重复工作。
使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
鸿蒙登录页面好看的样式设计-HarmonyOS应用开发实战与ArkTS代码解析【HarmonyOS 5.0(Next)】
鸿蒙登录页面设计展示了 HarmonyOS 5.0(Next)的未来美学理念,结合科技与艺术,为用户带来视觉盛宴。该页面使用 ArkTS 开发,支持个性化定制和无缝智能设备连接。代码解析涵盖了声明式 UI、状态管理、事件处理及路由导航等关键概念,帮助开发者快速上手 HarmonyOS 应用开发。通过这段代码,开发者可以了解如何构建交互式界面并实现跨设备协同工作,推动智能生态的发展。
196 10
鸿蒙登录页面好看的样式设计-HarmonyOS应用开发实战与ArkTS代码解析【HarmonyOS 5.0(Next)】

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等