1、概览 {#1概览}
本文将带你了解 Spring Boot 2.5 中的一个新特性:为系统环境变量指定前缀。通过该特性,就可以在同一环境中运行多个不同的 Spring Boot 应用,只要所有属性都使用带前缀的版本。
2、环境变量前缀 {#2环境变量前缀}
有时,我们可能需要在同一个环境中运行多个 Spring Boot 应用,并且经常会面临环境变量名称分配的问题。现在,我们可以在应用级别设置一个 "前缀",不同应用加载不同前缀的环境变量即可。
以一个简单的 Spring Boot 应用为例,通过设置前缀来修改应用属性,例如 tomcat 服务器端口。
关于 Spring Boot 中属性属性的优先级,你可以参阅 中文文档。
2.1、Spring Boot 应用示例 {#21spring-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);
}
}
不能使用已经包含下划线字符(_
)的单词作为前缀。否则,抛出异常。
再创建一个 API 端点,返回应用正在监听的端口:
@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、设置环境变量 {#22设置环境变量}
现在,将 prefix_server_port
这样的环境变量设置为 8085
。
例如在 Linux 中。
env prefix_server_port=8085
一旦设置了环境变量,应用就会根据该前缀创建属性。
在 IDE 中运行时,需要编辑启动配置并添加环境变量,或从已加载的环境变量中选取环境变量。
2.3、运行应用 {#23运行应用}
通过命令行或最 IDE 启动应用。
然后使用浏览器访问 http://localhost:8085/prefix
,可以看到端口是 8085,和我们在环境变量中配置的一致:
It is working as we expected. Your server is running at port : 8085
如果不加前缀,应用将使用默认环境变量启动。
3、总结 {#3总结}
本文介绍了如何在 Spring Boot 中通过环境变量前缀来为不同应用的同名属性设置不同的值,从而实现在同一个环境中运行多个应用。
Ref:https://www.baeldung.com/spring-boot-env-variable-prefixes