【问题标题】:Use system variable in spring boot [duplicate]在spring boot中使用系统变量[重复]
【发布时间】:2018-12-08 09:20:16
【问题描述】:

我在我的 .bash_profile 中定义了一个变量,如下所示:

export PROFILE=local

现在,我想在我的spring boot应用程序中获取这个值来根据这个值加载不同的配置文件。

为此,我使用了注解@Value 但spring无法解析profile的值:

@Value("${profile}")
private String environment;

我错过了什么?

编辑: 此代码从 Eclipse 内的 JUnit 测试启动(作为桌面应用程序启动)

【问题讨论】:

标签: java spring macos spring-boot


【解决方案1】:

您应该在属性文件中添加spring.profiles.active: ENV_NAME。或者您可以使用 -Dspring.profiles.active=ENV_NAME 从命令行传递它。

编辑:

您还可以使用Map<String, String> getenv = System.getenv(); 来获取代码中的所有环境变量。然后你就可以访问所有的环境变量了。

【讨论】:

  • 我不想拥有 application-dev.properties、application-prod.properties... 因为我不希望 api 密钥或其他关键信息出现在我们的 git 存储库中。跨度>
  • 您可以使用jasypt 加密属性文件中的值。或者您可以使用-Dprofile=ENV_NAME 通过命令提示符发送相同的profile 名称并使用@Value 获取它
【解决方案2】:

您可以在 Environment 类的帮助下做到这一点。

@Autowired
Environment environment;

然后

String profile = ((StandardServletEnvironment) environment).getSystemEnvironment().get("PROFILE").toString();

【讨论】:

  • 它返回一个空值:/
  • 系统属性和环境变量是两个不同的东西!
猜你喜欢
  • 2017-08-08
  • 1970-01-01
  • 1970-01-01
  • 2022-11-10
  • 2016-04-17
  • 1970-01-01
  • 2016-09-19
  • 2023-03-26
  • 1970-01-01
相关资源
最近更新 更多