gpt4 book ai didi

java - 在非 Spring 类中获取 Spring Boot 属性

转载 作者:行者123 更新时间:2023-11-30 02:02:08 24 4
gpt4 key购买 nike

我在 application.properties 文件中定义了许多属性。这些通过 @Configuration@PropertySource@ConfigurationProperties 注释加载到系统中的许多不同配置文件中。

此外,我有一个与该系统分离的库,它不依赖于 Spring(理想情况下将保持这种状态)。在系统执行的某个时刻,它通过反射和无参数构造函数从该库初始化类的实例。然而,在初始化中,我想获取一个 Spring 属性并将其分配给本地字段 - 然而,正如我之前提到的,这个库类不是 spring 配置的,实际上是在一个完全不同的项目中。如何做到这一点?

我当前的解决方案是,当在配置类中初始化属性时,属性的 setter 还会设置系统属性(通过 System.setProperty("someProp", propValue) ),然后在库类的无参数构造函数中调用 System.getProperty("someProp") 。然而,这感觉真的很糟糕,特别是我设置变量的部分。也许有某种方法可以配置 SpringBoot 自动传播该特定属性以成为系统属性?

我的atm代码

ServiceConfig.class

@Configuration
@PropertySource("classpath:application.properties")
@ConfigurationProperties(prefix = "service")
public class ServiceConfig {

private String serviceUrl;

public String getServiceUrl() {
return serviceUrl;
}

public void setServiceUrl(String serviceUrl) {
this.serviceUrl = serviceUrl;
System.setProperty("SERVICE_URL", serviceUrl);
}
}

我的application.properties

service.serviceUrl=http://localhost:8000

LibraryClass.class

public class LibraryClass {
private final String serviceUrl;

public LibraryClass() {
this.serviceUrl = getProperty("OAUTH_SERVICE_URL");
}

...
}

最佳答案

如果您的 LibraryClass 有一个 setter 方法 - 在下面的示例中名为 setServiceUrl(...) - 要设置此配置属性,您可以将其添加到现有的 ServiceConfig配置类:

@Bean
public LibraryClass getLibraryClass(@Value(${"OAUTH_SERVICE_URL"}) String serviceUrl) {
LibraryClass libraryClass = new LibraryClass();
libraryClass.setServiceUrl(serviceUrl);
return libraryClass;
}

除此之外 - 如果您无法修改 LibraryClass 因为它是第三方库的一部分等等...您可以使用 Spring 的 Environment 实例来读取所有需要的内容稍后将在 LibraryClass 的构造函数内部访问这些属性,并按照系统属性的方式设置它们。还将其添加到您的配置类中:

@Autowired
public void setSystemPropsNeededForLibraryClassConstruction(Environment environment) {
System.setProperty("serviceUrl", environent.getProperty("serviceUrl"));
}

关于java - 在非 Spring 类中获取 Spring Boot 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52503675/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com