为了账号安全,请及时绑定邮箱和手机立即绑定

Spring不接受环境变量

Spring不接受环境变量

一只萌萌小番薯 2022-07-27 21:20:44
在我的项目中,我在每个环境的每个文件夹中都有单独的 application.yml 文件。注意:下面是临时制作的红色 yml 文件,以使代码正常工作。但应在修复后将其删除。所以我想要的是根据环境使用单独的 application.yml 文件。特别是我需要使用 local/application.yml 进行本地开发下面有一个在我的项目中获取环境变量的示例@Component@Configurationpublic class ApplicationProperties {    @Value("${ex.my.url}")    private String myServiceUrl;   // getters setters and nedded stuff}但这不起作用,因为找不到提及所需环境的方法。因为它在一个单独的文件夹中。所有其他示例都提到了在资源文件夹中获取 yml 文件的方法,没有单独的文件夹。有什么办法解决这个问题吗?
查看完整描述

4 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

在资源文件夹中

制作 application.yml、application-local.yml、application-dev.yml 等文件。你想要什么

然后在 application.yml

 spring.profile.active = ${ENV}

现在在运行期间从 Intellij 下的运行/调试配置中指定 ENV 变量,或者在 application.yml 中提及您要为其构建 jar 的配置文件。

或者,您可以使用 -D spring.profile.active=dev


查看完整回答
反对 回复 2022-07-27
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

经典的解决方案是设置一个配置文件(我更喜欢属性,因为我很理智)并允许在每个已安装的主机上放置一个覆盖文件。


Spring 开箱即用地支持这一点。


这是一个例子:


public static void main(final String[] argumentArray)

{

  final StringApplicationBuilder springApplicationBuilder;


  springApplicationBuilder = new SpringApplicationBuilder(YourSpringBootApplication.class)


  springApplicationBuilder.properties(

    "spring.config.location=classpath:/yourConfig.properties,/some/path/to/overrides/directory/yourConfig.properties");


  springApplicationBuilder.build().run(argumentArray);

}


查看完整回答
反对 回复 2022-07-27
?
心有法竹

TA贡献1866条经验 获得超5个赞

首先,来自文档

SpringApplication 从以下位置的 application.properties 文件中加载属性并将它们添加到 Spring 环境中:

  1. 当前目录的 /config 子目录

  2. 当前目录

  3. 一个类路径 /config 包

  4. 类路径根

因此,通过传递目录层次结构,您会遇到问题。

其次,对于文件规范,您可以使用Profiles。这工作如下:

  • 如果没有指定的配置文件 -application.properties将被使用

  • 对于任何其他配置文件,也将使用带有名称的配置文件application-<name>.properties

因此,如果您指定devcool配置文件,属性application.properties,,,application-dev.properties`application-cool.properties,将被使用

更新:

您可以传递spring.config.location属性文件路径指定,但如果您想要目录层次结构 - 您需要使用ApplicationContextInitializercontext.initializers.classes进行一些自定义


查看完整回答
反对 回复 2022-07-27
?
红颜莎娜

TA贡献1842条经验 获得超13个赞

在我的项目中,我使用 VM 选项指定了一个配置文件:-Dspring.profiles.active=local

然后我有一个名为 application-local.yml 的文件

在生产中: -Dspring.profiles.active=prod ,将使用文件 application-prod.yml


查看完整回答
反对 回复 2022-07-27
  • 4 回答
  • 0 关注
  • 243 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号