我有一个位于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时出错:转换格式无效:
答案 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;
}