前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot(03):Spring Boot多环境配置,如何轻松实现开发、测试、生产环境切换?

Spring Boot(03):Spring Boot多环境配置,如何轻松实现开发、测试、生产环境切换?

作者头像
bug菌
发布2023-09-04 08:13:09
1.1K0
发布2023-09-04 08:13:09
举报
文章被收录于专栏:《项目实战教学》

环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE

1. 前言

        随着企业IT应用架构越来越复杂,为了使应用开发和部署更加稳定、快速、可靠,常常需要把应用程序的配置文件和环境分离,其中的一个重要方案就是多环境配置。在多环境配置中,不同的环境可以定义不同的参数,比如数据库连接、日志输出等等。Spring Boot自带了多环境配置的支持,本文将介绍如何轻松实现开发、测试、生产环境切换。

2. 摘要

        本文将采用Spring Boot的多环境配置,实现应用程序在不同环境下的部署。首先,我们将创建一个Spring Boot应用程序,并定义三个不同的配置文件:application-dev.properties、application-test.properties和application-prod.properties,分别对应开发、测试和生产环境。然后,我们将演示如何在应用程序中通过注入Environment对象来获取配置信息,以及如何在maven中通过profiles来实现环境的切换。

3. 正文

3.1 创建Spring Boot应用程序

        首先,我们需要创建一个Spring Boot应用程序,可以在Spring官网上下载最新版本的Spring Boot框架。在创建应用程序时,需要选择Spring Initializr,然后填写项目基本信息,比如Group、Artifact、Dependencies等等。在本文中,我们选择Web和JPA作为应用程序的依赖,如下所示:

项目整体结构截图演示:

3.2 定义配置文件

        在应用程序的src/main/resources目录下,我们可以定义应用程序的配置文件。Spring Boot提供了多种配置文件格式,包括.properties、.yaml、.json等等。在本文中,我们选择.properties格式来作为应用程序的配置文件。

        在创建应用程序时,可以与原有的application.properties文件合并,也可以单独创建application-dev.properties、application-test.properties和application-prod.properties文件来分别对应不同的环境。在每个文件中,我们可以定义不同的配置参数,比如数据库连接、日志输出等等。下面是一个示例:

application-dev.properties:

代码语言:javascript
复制
spring.datasource.url=jdbc:mysql://localhost:3306/dev
spring.datasource.username=root
spring.datasource.password=root
logging.level.org.springframework.web=DEBUG

application-test.properties:

代码语言:javascript
复制
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
logging.level.org.springframework.web=INFO

application-prod.properties:

代码语言:javascript
复制
spring.datasource.url=jdbc:mysql://localhost:3306/prod
spring.datasource.username=root
spring.datasource.password=root
logging.level.org.springframework.web=ERROR

示例截图如下:

在以上配置文件中,我们分别定义了不同的数据库连接和日志输出级别。在不同的环境下,这些参数可以不同,从而使得应用程序能够灵活地适应不同的环境。

3.3 获取配置信息

        在应用程序中,我们可以通过注入Environment对象来获取不同环境下的配置信息。Environment对象是Spring Boot提供的一个核心组件,可以帮助我们轻松获取应用程序的配置信息。下面是一个简单的示例:

代码语言:javascript
复制
@RestController
public class ExampleController {

    @Autowired
    private Environment env;

    @GetMapping("/config")
    public String getConfig() {
        String url = env.getProperty("spring.datasource.url");
        String username = env.getProperty("spring.datasource.username");
        String password = env.getProperty("spring.datasource.password");
        return "URL=" + url + ", Username=" + username + ", Password=" + password;
    }
}

        在以上示例中,我们定义了一个RestController,通过注入Environment对象来获取数据库连接参数。在应用程序中,我们可以通过调用env.getProperty(String key)方法来获取不同环境下的配置信息。同时,我们也可以使用@Value注解来获取配置参数,如下所示:

代码语言:javascript
复制
@Value("${spring.datasource.url}")
private String url;

@Value("${spring.datasource.username}")
private String username;

@Value("${spring.datasource.password}")
private String password;

3.4 切换环境

        在使用Spring Boot的多环境配置时,我们常常需要在不同的环境下进行切换。Spring Boot提供了多种方法来实现环境的切换,其中最常用的是使用maven的profiles。

        在pom.xml文件中,我们可以定义不同的profiles,比如dev、test和prod。在不同的profiles中,我们可以定义不同的依赖、插件、配置等等。下面是一个简单的示例:

代码语言:javascript
复制
<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <activatedProperties>dev</activatedProperties>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>test</id>
        <properties>
            <activatedProperties>test</activatedProperties>
        </properties>
    </profile>
    <profile>
        <id>prod</id>
        <properties>
            <activatedProperties>prod</activatedProperties>
        </properties>
    </profile>
</profiles>

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

在以上示例中,我们定义了三个不同的profiles,分别对应开发、测试和生产环境。在每个profiles中,我们通过activatedProperties属性来指定应用程序使用的配置文件。同时,在build节点中,我们还需要添加一个resource节点来指定对应的配置文件目录,并设置filtering为true,以便通过maven的profiles来切换环境。

示例截图如下:

4. 测试用例

        为保证代码质量和可靠性,我们需要编写测试用例来验证应用程序的正确性。下面是一个简单的测试用例:

代码语言:javascript
复制
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class ExampleControllerTest {

    @Autowired
    private TestRestTemplate restTemplate;

    @Value("${local.server.port}")
    private int port;

    @Test
    public void getConfig() {
        ResponseEntity<String> response = restTemplate.getForEntity("http://localhost:" + port + "/config", String.class);
        assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
        assertThat(response.getBody()).isEqualTo("URL=jdbc:mysql://localhost:3306/dev, Username=root, Password=root");
    }
}

小结

        Spring Boot的多环境配置是一个非常重要的技术,可以帮助我们轻松实现应用程序的开发、测试、生产环境切换。通过本文的介绍,我们可以学习到如何为应用程序定义多个不同的配置文件,并通过注入Environment对象来获取配置信息。此外,我们还可以通过maven的profiles来实现不同环境间的切换,使得应用程序的部署更加灵活。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 前言
  • 2. 摘要
  • 3. 正文
    • 3.1 创建Spring Boot应用程序
      • 3.2 定义配置文件
        • 3.3 获取配置信息
          • 3.4 切换环境
          • 4. 测试用例
          • 小结
          相关产品与服务
          腾讯云服务器利旧
          云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档