Java 将变量传递给@Value注释以从属性文件读取特定属性

Java 将变量传递给@Value注释以从属性文件读取特定属性,java,spring,spring-boot,properties,properties-file,Java,Spring,Spring Boot,Properties,Properties File,在我的Spring引导应用程序中,需要根据从另一个函数返回的字符串值从属性文件中读取特定值。我的属性文件如下: A=value_a B=value_b 函数返回A或B,并将其存储在名为stringValue的字符串变量中。我希望按照以下思路做一些事情: @Value(stringValue) String propertyValue @Value("${A}") String valueOfA 但是,我在IDE上收到以下消息: 属性值必须是常量 我曾尝试将stringValue转换为

在我的Spring引导应用程序中,需要根据从另一个函数返回的字符串值从属性文件中读取特定值。我的属性文件如下:

A=value_a
B=value_b 
函数返回A或B,并将其存储在名为stringValue的字符串变量中。我希望按照以下思路做一些事情:

@Value(stringValue) 
String propertyValue 
@Value("${A}")
String valueOfA
但是,我在IDE上收到以下消息:

属性值必须是常量

我曾尝试将stringValue转换为静态最终变量,但没有成功

我知道我可以传递从属性文件读取的特定密钥,例如:

@Value(stringValue) 
String propertyValue 
@Value("${A}")
String valueOfA

我的问题是是否可以将变量传递给@Value注释

@Value
在启动期间,当构建Spring上下文时,注释被解析。由于此时
stringValue
将不可用,因此不能将其用于注入目的

这种情况的一个例外是,如果带有
@Value
注释的bean是原型范围的,那么在这种情况下,只要请求它,就会创建它的新实例。尽管如此,
stringValue
仍需要对Spring上下文可用,以便在注入点使用


如果看不到更多的代码,就不可能给出更详细的答案。

您可以在应用程序中自动连接环境,并使用它在运行时从属性文件中读取属性文件(假设所有属性所在的文件都已添加到环境中)

我将发布我的答案与假设,因为你还没有更新你的问题,与我要求的所有信息

所以你的代码是-

让我们在调用名为getValue的函数以获取stringValue的值的地方调用类-示例。现在,假设您正在类示例中名为doSomething()的方法中调用函数getValue


谢谢你们的帮助!我将属性文件中的值读取到org.springframework.core.io.Resource对象中,然后使用该对象检索所需的特定值。以下是我构建解决方案代码的方式:

@Value("classpath:config.properties")
private Resource propertiesfile; 
然后我声明了一个java.util.Properties对象,并将资源对象中的值读入其中

Properties properties = new Properties();

        try{
            properties.load(propertiesfile.getInputStream());
        }catch(IOException e){
            logger.error("Parsing error while reading properties file",e.toString());
        }
最后,根据我的stringValue变量中的值,我从属性文件中读取相应的值

String propertyValue = properties.getProperty(stringValue); 

如果您的变量是另一个环境变量,则可以尝试此格式。 @值(“${${stringvalue}}”)


其中,stringvalue是环境变量。

包含变量stringvalue的d bean的d名称是什么?您是否可以发布更多代码,包括使用@Value的类,如果返回该值的函数在另一个类中,则该类的代码也是。这个链接将帮助你了解情况。我已经在我的类中使用@Value注释和@PropertySource(“classpath:config.properties”)注释,因为我想从config.properties文件中读取值。这很好。你能发更多的代码吗?包括我上面提到的课程。