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上找到。