Spring不接受环境变量

在我的项目中,我在每个环境的每个文件夹中都有单独的 application.yml 文件。

http://img2.mukewang.com/62e13bcb0001f1a602600217.jpg

注意:下面是临时制作的红色 yml 文件,以使代码正常工作。但应在修复后将其删除。所以我想要的是根据环境使用单独的 application.yml 文件。特别是我需要使用 local/application.yml 进行本地开发


下面有一个在我的项目中获取环境变量的示例


@Component

@Configuration

public class ApplicationProperties {

    @Value("${ex.my.url}")

    private String myServiceUrl;

   // getters setters and nedded stuff

}

但这不起作用,因为找不到提及所需环境的方法。因为它在一个单独的文件夹中。所有其他示例都提到了在资源文件夹中获取 yml 文件的方法,没有单独的文件夹。


有什么办法解决这个问题吗?


一只萌萌小番薯
浏览 244回答 4
4回答

当年话下

在资源文件夹中制作 application.yml、application-local.yml、application-dev.yml 等文件。你想要什么然后在 application.yml spring.profile.active = ${ENV}现在在运行期间从 Intellij 下的运行/调试配置中指定 ENV 变量,或者在 application.yml 中提及您要为其构建 jar 的配置文件。或者,您可以使用 -D spring.profile.active=dev

海绵宝宝撒

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

心有法竹

首先,来自文档:SpringApplication 从以下位置的 application.properties 文件中加载属性并将它们添加到 Spring 环境中:当前目录的 /config 子目录当前目录一个类路径 /config 包类路径根因此,通过传递目录层次结构,您会遇到问题。其次,对于文件规范,您可以使用Profiles。这工作如下:如果没有指定的配置文件 -application.properties将被使用对于任何其他配置文件,也将使用带有名称的配置文件application-<name>.properties因此,如果您指定dev和cool配置文件,属性application.properties,,,application-dev.properties`application-cool.properties,将被使用更新:您可以传递spring.config.location属性文件路径指定,但如果您想要目录层次结构 - 您需要使用ApplicationContextInitializercontext.initializers.classes进行一些自定义

红颜莎娜

在我的项目中,我使用 VM 选项指定了一个配置文件:-Dspring.profiles.active=local然后我有一个名为 application-local.yml 的文件在生产中: -Dspring.profiles.active=prod ,将使用文件 application-prod.yml
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java