在我的项目中,每个环境下都有单独的application.yml文件,每个环境下的文件夹内。
注意:下面临时制作了红色yml文件,以使代码正常工作。但应在固定后将其移除。所以我要根据环境使用单独的application.yml文件。 特别是我需要使用local / application.yml进行本地开发
下面有一个在我的项目中获取env变量的示例
@Component
@Configuration
public class ApplicationProperties {
@Value("${ex.my.url}")
private String myServiceUrl;
// getters setters and nedded stuff
}
但是它不起作用,因为找不到找到所需环境的方法。因为它在单独的文件夹中。所有其他示例都提到了在资源文件夹中获取yml文件的方法,无需单独的文件夹。
该问题有解决办法吗?
答案 0 :(得分:0)
在我的项目中,我使用VM选项指定一个配置文件: -Dspring.profiles.active = local
然后我有一个名为application-local.yml的文件
在生产中: -Dspring.profiles.active = prod,将使用文件application-prod.yml
答案 1 :(得分:0)
在资源文件夹中
根据需要创建application.yml,application-local.yml,application-dev.yml等文件
然后在application.yml
spring.profile.active = ${ENV}
现在在运行期间在Intellij下从运行/调试配置中指定ENV变量,或者在application.yml中提及要为其构建jar的配置文件。
或者,您可以使用-D spring.profile.active = dev
答案 2 :(得分:0)
首先,从documentation:
SpringApplication在以下位置从application.properties文件加载属性,并将其添加到Spring Environment:
- 当前目录的/ config子目录
- 当前目录
- 类路径/ config包
- classpath根
因此,通过传递的目录层次结构,您会遇到问题。
第二,对于文件说明,可以使用Profiles。其工作原理如下:
application.properties
application-<name>.properties
的配置文件因此,如果您指定dev
和cool
配置文件,则属性application.properties
,application-dev.properties
和`application-cool.properties将被使用
更新:
您可以传递spring.config.location
来指定属性文件的路径,但是如果您希望拥有目录层次结构,则需要使用context.initializers.classes
和ApplicationContextInitializer
答案 3 :(得分:0)
经典的解决方案是设置一个配置文件 (我更喜欢房地产,因为我很理智) 并允许将覆盖文件放置在每个已安装的主机上。
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);
}