我正在处理一个Spring启动项目,其中传递了许多VM参数供应用程序启动,即证书位置、特定配置文件类型(不是dev、qa、prod等)。0/>file.
问题语句
default.yml中设置的属性仅可访问Spring上下文的环境接口,即org.springframework.core.env.环境,并且属性不会自动/默认设置为系统属性。
I
但是我不想使用环境. getProperty(key)显式地调用所有属性,而是希望所有在Spring上下文中可用的属性都应该是循环的/没有循环的
预期的解决方案
我正在寻找一种方法,使用它在listner方法中,我可以将default.yml文件中定义的所有属性设置为系统属性,而无需按其名称访问属性。
下面是我目前遵循的方法,将从Spring环境/default.yml中提取的活动配置文件设置为系统属性。我不想从yml获得活动配置文件或任何属性,但希望. yml中可用的所有属性自动设置到系统中。
Optional.ofNullable(springEnv.getActiveProfiles())
.ifPresent(activeProfiles -> Stream.of(activeProfiles).findFirst().ifPresent(activeProfile -> {
String currentProfile = System.getProperty("spring.profiles.active");
currentProfile = StringUtils.isBlank(currentProfile) ? activeProfile : currentProfile;
System.setProperty("spring.profiles.active", currentProfile);
}));
你可以用这样的方式:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.MapPropertySource;
import org.springframework.core.env.PropertySource;
import org.springframework.core.env.StandardEnvironment;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.Properties;
@Component
public class EnvTest {
final StandardEnvironment env;
@Autowired
public EnvTest(StandardEnvironment env) {
this.env = env;
}
@PostConstruct
public void setupProperties() {
for (PropertySource<?> propertySource : env.getPropertySources()) {
if (propertySource instanceof MapPropertySource) {
final String propertySourceName = propertySource.getName();
if (propertySourceName.startsWith("applicationConfig")) {
System.out.println("setting sysprops from " + propertySourceName);
final Properties sysProperties = System.getProperties();
MapPropertySource mapPropertySource = (MapPropertySource) propertySource;
for (String key : mapPropertySource.getPropertyNames()) {
Object value = mapPropertySource.getProperty(key);
System.out.println(key + " -> " + value);
sysProperties.put(key, value);
}
}
}
}
}
}
当然,当它对你有效时,请删除标准输出消息
问题内容: 配置 : Spring 2.5,Junit 4,Log4j 从系统属性中指定log4j文件位置 在运行时,使用-D java选项设置系统属性。一切都很好。 问题/我需要什么: 在单元测试时,未设置系统属性,并且文件位置未解析。 App使用Spring,想简单地配置Spring以 设置 系统属性。 更多信息: 要求仅用于配置。无法引入新的Java代码或IDE中的条目。理想情况下,Spri
问题内容: 使用Gradle执行JUnit 5测试时,我找不到如何设置系统属性。标准任务可以配置如下: 但是,任务似乎没有这种选择。 问题答案: 更新: 请注意,JUnit团队开发的JUnit Platform 1.2中已弃用,而在1.3中不再使用。请在Gradle 4.6或更高版本中切换到Gradle的标准任务。详细信息在这里。 正如我在这里提到的,如果您仍然使用过时的话,可以像这样设置系统属性
问题内容: 我们正在使用类似于系统规则的方法来处理JUnit 4测试中的(系统)属性。这样做的主要原因是每次测试后都要清理环境,以便其他测试不会无意间依赖于可能的副作用。 由于JUnit 5已发布,所以我想知道是否存在“ JUnit 5方法”吗? 问题答案: 有JUnit 5 Pioneer,一个“ JUnit 5扩展包”。它带有和。从文档: 的和注释可用于清除,分别为测试执行系统设置属性的值。这
问题内容: 我在这里跟随有关JAAS身份验证的教程,当它显示如何运行示例代码时,说应该使用Java启动器的标准选项- Djava.security.auth.login.config ==启动已编译的类。 sample_jaas.config。这样,将设置系统属性: 我是用这种方式完成的,但是现在我也想在NetBeans中运行代码。由于NetBeans使用Ant,因此我认为指定这些选项可能有所不同
作为一个简化的例子,考虑这个有两个字段的表。一个是字符串,另一个是XML。 Source=“MediaConversions” 现在我想查询该表,并将结果作为json,但也要一次性将XML转换为json。 导致 [{"Source":"媒体转换","OrderParameter":" 但我想把它转换成: [{"Source":"MediaConversion","OrderParameter":{
我已经建立了一个管道,在microsoft azure管道中运行我的测试。在我的本地机器上,这工作正常,文件位于我的计算机上的gradle系统目录中: 这是我的: 据我所知,由jetifier从文件。 输出: 下面是我组装调试和测试单元测试的azure-pipelines.yml的一部分: 我在这篇文章、这篇文章和这篇文章中尝试了解决方案,但没有结果。jar文件大4mb,是代码存储库中唯一的文件,