1. 概述

本教程将讨论Spring Boot 2.5新增的一项功能,即允许指定系统环境变量的前缀。这样,我们可以在同一环境中运行多个不同的Spring Boot应用,而所有属性都将期望使用带有前缀的版本。

2. 环境变量前缀

在同一个环境中可能需要运行多个Spring Boot应用,通常会遇到给不同属性分配环境变量名称的问题。

我们可以使用Spring Boot的属性文件,但从某种程度上讲,这可能会产生相似性,但我们可能希望在应用级别设置一个前缀,以便在环境层面利用这一特性。

2.1. 我们的Spring Boot应用示例

让我们创建一个简单的Spring Boot应用来演示这个功能。首先,我们为应用添加一个前缀,我们称其为“prefix”以保持简洁:

@SpringBootApplication
public class PrefixApplication {

    public static void main(String[] args) {
        SpringApplication application = new SpringApplication(PrefixApplication.class);
        application.setEnvironmentPrefix("prefix");
        application.run(args);
    }
}

作为前缀,我们不能使用包含下划线字符(_)的单词,否则应用会抛出错误。

我们还希望设置一个端点,检查我们的应用监听的端口:

@Controller
public class PrefixController {

    @Autowired
    private Environment environment;

    @GetMapping("/prefix")
    public String getServerPortInfo(final Model model) {
        model.addAttribute("serverPort", environment.getProperty("server.port"));
        return "prefix";
    }
}

在这个例子中,我们使用Thymeleaf来解析模板,设置服务器端口,模板内容很简单:

<html>
    // ...
<body>
It is working as we expected. Your server is running at port : <b th:text="${serverPort}"></b>
</body>
</html>

2.2. 设置环境变量

现在我们可以设置环境变量,例如prefix_server_port为8085。有关如何设置系统环境变量(如在Linux中),可以参考这里

设置环境变量后,我们期望应用基于这个前缀生成相应的属性。

在IDE中运行时,我们需要编辑启动配置并添加环境变量,或者从已加载的环境变量中选择。

2.3. 运行应用

现在可以从命令行或最喜欢的IDE启动应用。

如果我们通过浏览器访问URL http://localhost:8085/prefix,可以看到服务器正在运行,并且使用了我们之前设置的端口号:

It is working as we expected. Your server is running at port : 8085

如果没有前缀,应用将使用默认环境变量。

3. 总结

在这篇教程中,我们了解了如何在Spring Boot中使用环境变量前缀。例如,它可以帮助我们在同一环境中运行多个Spring Boot应用,并为具有相同名称(如服务器端口)的属性分配不同的值。

如往常一样,本文档中的代码可在GitHub上找到。