Spring读取类路径外的属性文件

时间:2018-05-02 10:00:02

标签: spring properties

我有一个位于tomcat文件夹中的属性文件。我试图读取属性文件内容如下。但我得到属性值的空值。

文件路径没有任何问题。

DateTime

编辑:

我创建了单独的类并加载了如下属性。

@ComponentScan(basePackages = "org.sakaiproject.log.api")
@Configuration
@PropertySource(name = "props", value = {
        "file:/home/tomcat-sakai-7.0.55/sakai/local.properties",
        "file:/home/tomcat-sakai-7.0.55/sakai/sakai.properties" })
public class SpringCryptoContext {



    @Value("${aes.encryption.cipherString}")
    private static String cyperString;

    public SpringCryptoContext() {

    }



    public static void main(String[] args) throws Exception {

        ApplicationContext context = new AnnotationConfigApplicationContext(
                SpringCryptoContext.class);


        System.out.println(cyperString);


    }
}

但是我收到以下错误

  

初始化CryptoToolImpl时出错:转换格式无效:

2 个答案:

答案 0 :(得分:2)

请在配置类中添加以下bean: -

//To resolve values using the @Value
@Bean
public static PropertySourcesPlaceholderConfigurer propertyConfigDev() {
    return new PropertySourcesPlaceholderConfigurer();
}

<强>更新

静态在这种情况下不起作用,您需要执行以下操作: -

添加以下代码: -

@Value("${aes.encryption.cipherString}")
private String cyperString;

public String getCypherString(){
    return this.cyperString;
}

这只是一个示例,但您使用的是静态,因为您在main method static中访问它并且为了访问该变量,您将其标记为static

问题是静态变量是一个类变量,当代码到达变量的System.out行时,它没有属性,此时 - spring仍在进行内部初始化等。< / p>

在使用spring实例化时,您正在访问/使用变量作为非弹簧框架。它必须是单一的方式

我建议有一个单独的类将这些变量加载到上下文中,可能是某些标有@Component或更具体的@Service

的类

答案 1 :(得分:1)

下面的内容应该有所帮助。

@Configuration
@PropertySources(value={
    @PropertySource(value="file:${catalina.home}/sakai/local.properties"),
    @PropertySource(value="file:${catalina.home}/sakai/sakai.properties")
})
public class SpringCryptoContext {

    @Value("${aes.encryption.cipherString}")
    private String cyperString;
}