我有一个Spring项目,它使用另一个项目。每个项目都有自己的Spring概要文件,每个概要文件都使用applicationContext.xml
和*.properties
从Java代码初始化。我从args[]
注入概要文件。问题是第二个项目使用来自的env默认配置applicationContext.xml
我无法将env从args[]
注入到第二个项目中,我尝试寻找一篇文章来解释Spring配置文件是如何工作的。
1.当applicationContext.xml
上未配置默认值时,是否存在一个层次结构,它将在该层次结构上查找概要文件?
1.系统变量是否比applicationContext.xml
配置更强?
1.你认为我的挑战的最佳解决方案是什么?
如能提供有关这一主题的文章或示例,将不胜感激。
8条答案
按热度按时间jhiyze9q1#
SPRING_PROFILES_ACTIVE是覆盖/选择Spring轮廓的环境变量
bwleehnv2#
如果您为JVM提供Spring配置文件,应该不会有任何问题:
另请参见Spring文档:
http://docs.spring.io/spring-boot/docs/current/reference/html/howto-properties-and-configuration.html
69.5设置活动Spring配置文件
Spring环境有一个API来实现这个功能,但是通常你需要设置一个System属性(spring.profiles.active)或者一个OS环境变量(SPRING_PROFILES_ACTIVE)。例如,用一个-D参数启动你的应用程序(记住把它放在主类或者jar归档文件之前):
$ java -jar -Dspring.配置文件.活动=生产演示-0.0.1-SNAPSHOT.jar
在Sping Boot 中,您还可以在www.example.com中设置活动配置文件application.properties,例如
Spring.配置文件.活动=生产
用这种方式设置的值会被System属性或环境变量设置替换,但不会被SpringApplicationBuilder.profiles()方法替换,因此后一个Java API可以用来扩充配置文件,而无需更改默认值。
有关更多信息,请参见第25章“配置文件”中的“Sping Boot 特性”部分。
sg2wtvxw3#
我通常使用基于注解的配置而不是基于XML的配置来配置applicationContext。无论如何,我相信它们具有相同的优先级。
从applicationContext取得以设定档为基础的Bean
现在,配置文件为
dev
注意:如果概要文件为
@Profile("!dev")
,则概要文件将排除dev,并适用于所有其他配置文件。设置配置文件的值:
在Web应用程序中,WebApplicationInitializer可用于以编程方式配置ServletContext
您还可以直接在环境中设置配置文件:
也可以使用上下文参数在Web应用程序的web.xml中激活配置文件:
作为参数传递的配置文件名称将在应用程序启动期间激活:
在IDE中,您可以设置应用程序运行时使用的环境变量和值。以下是Eclipse中的运行配置:
通过命令行设置:
export spring_profiles_active=dev
任何没有指定概要文件的bean都属于"默认"概要文件。
优先级顺序为:
1.环境变量
x3naxklr4#
如果您使用Docker部署spring Boot 应用,您可以使用标志e设置 profile:
对接器运行-e“Spring配置文件活动=产品”-p 8080:8080 -tr.test.co/myapp:latest
i7uaboj45#
可以通过提供
-Dspring.profiles.active=<env>
设置Spring剖面对于source(src)目录中的java文件,可以通过
System.getProperty("spring.profiles.active")
使用对于test目录中的java文件,可以提供
SPRING_PROFILES_ACTIVE
至<env>
或
由于“测试”任务忽略了“环境”、“jvmArgs”和“systemProperties”,因此在根
build.gradle
中添加任务,设置jvm属性和环境变量。mec1mxoz6#
我的解决方案是将环境变量设置为
spring.profiles.active=development
,这样,在该机器上运行的所有应用程序都将引用该变量并启动该应用程序。2exbekwf7#
如果我运行命令行:
java -Dspring.profiles.active=development -jar yourApplication.jar
从我的webapplication目录,它指出路径是不正确的。所以我只是在手动定义的配置文件在application.properties文件如下:或
或
xzv2uavs8#
太晚了党,但这里有这个主题的新趋势:https://howtodoinjava.com/spring-boot2/logging/profile-specific-logging/
这里有一个很好的例子:
!NB!如果使用
&
时出现问题,请将其替换为&