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

弹簧不考虑环境变量

弹簧不考虑环境变量

米脂 2022-08-03 15:05:48
在我的项目中,我为每个环境提供了单独的 application.yml 文件,每个文件夹内都有一个环境。注:下面红色的yml文件临时制作,使代码工作。但修复后应将其删除。所以我想要的是根据环境使用单独的appplication.yml文件。特别是我需要使用local/application.yml进行本地开发下面有一个在我的项目中获取 env 变量的示例@Component@Configurationpublic class ApplicationProperties {    @Value("${ex.my.url}")    private String myServiceUrl;   // getters setters and nedded stuff}但它不起作用,因为找不到提及所需环境的方法。因为它位于单独的文件夹中。所有其他示例都提到了在没有单独文件夹的情况下获取资源文件夹内的yml文件的方法。该问题的任何修复?
查看完整描述

4 回答

?
胡说叔叔

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

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

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

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


查看完整回答
反对 回复 2022-08-03
?
慕少森

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

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


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-08-03
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

在资源文件夹中

請製作 application.yml、application-local.yml、application-dev.yml 等的檔案。你想要什么

然后在应用程序中.yml

 spring.profile.active = ${ENV}

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

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


查看完整回答
反对 回复 2022-08-03
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

首先,从文档中可以看出:

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

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

  2. 当前目录

  3. 类路径 /配置包

  4. 类路径根

因此,使用传递的目录层次结构,您将遇到问题。

对于文件规范,您可以使用配置文件。其工作原理如下:

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

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

因此,如果您指定和配置文件,则属性 ,'application-cool.properties, 将处于使用状态devcoolapplication.propertiesapplication-dev.properties

更新:

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


查看完整回答
反对 回复 2022-08-03
  • 4 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信