Spring的“环境”变量忽略了.proprties文件中的反斜杠(\)

evrscar2  于 2022-12-02  发布在  Spring
关注(0)|答案(3)|浏览(150)

我正在尝试使用@PropertySourceEnvironment变量在Spring @Configuration java类中加载config.proprties文件数据。
示例:http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/annotation/PropertySource.html问题是,我有一个属性,其值如下所示:

serverName = abc\xyz

当我使用方法读取此属性时,

String server= env.getProprty("serverName");
     System.out.print(server);

值打印为“abcxyz”。
请注意,我尝试使用双反斜杠,例如:

serverName = abc\\xyz

但它仍然只是简单地从值字符串中忽略\。而且我不能用正斜杠代替反斜杠。
你能帮我修一下吗?先谢谢了!!

5ktev3wc

5ktev3wc1#

这是一个真实的丑陋的黑客,但您可以尝试对符号“\”使用unicode转义序列,即“\u005c”,因此请使用“abc\u005cxyz”而不是字符串值“abc\xyz”。但它会再次将其转换为“abc\xyz”,然后将“\”视为转义符号的开始。因此,如果第一个转义序列不起作用,您可以尝试将“abc\xyz”替换为“abc\u005c\u 005 cxyz”。看看第一个或第二个选项是否对你有效。但事实上,我很惊讶简单的转义“\”没有解决你的问题。如果都失败了,试试“abc\\xyz”-这是双重转义。

mdfafbf1

mdfafbf12#

我使用了spring 3.1.4-RELEASE,如果属性文件中的值包含'\',它就可以工作。比如serverName = abc\xyz

package com.test;   

import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration;    
import org.springframework.context.annotation.PropertySource;   
import org.springframework.core.env.Environment;    

@Configuration  
@PropertySource("app.properties")   
public class AppConfig {    

    @Autowired  
    Environment env;

    @Bean   
    public String myBean() {    
        System.out.println(env.getProperty("serverName"));
        return new String(env.getProperty("serverName"));   
    }   
}
fcg9iug3

fcg9iug33#

我在配置文件中用正斜杠存储它们,而不是反斜杠。
在阅读时,我用双反斜杠替换了它们。
源路径= C:/用户/文档/样本数据/我的输入文件. txt

Path currentRelativePath = Paths.get("");
    String filePath = currentRelativePath.toAbsolutePath().toString() + "/config.properties";
    Properties props = new Properties();
    FileInputStream fis = new FileInputStream(filePath);
    props.load(fis);
    sourcePath = props.getProperty("SourcePath").replace("/", "\\\\");

这对我来说是正确的。

相关问题