在我目前的spring项目中,当我运行应用程序时,它在用户的主目录中创建了一个目录,我在其中存储了一些配置文件(* .properties文件)。在我的代码中,我以这种方式引用此文件:
private String getFilename() {
return System.getProperty("user.home")+File.separator+".webapp"+File.separator+"webapp.preferences";
}
允许我在任何操作系统中运行应用程序而无需更改代码。我需要将此目录添加到应用程序的类路径中,以允许我使用注释PropertySource
来使用Enviroment类中的getproperty方法或Value
注释来访问存储在文件中的属性。
我使用spring-boot,因此应用程序的起点是:
@Controller
@EnableJpaRepositories
@EnableAutoConfiguration
@ComponentScan(value="com.spring")
public class Application {
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
我还有类WebAppInitializer,WebAppConfig和DispatcherConfig来存储由spring文件web.xml和dispatcher-config.xml处理的配置。
任何人都可以判断这是否可能并且可以做到这一点?
更新
在评论中的sugestions之后,我向我的项目添加了这个bean:
@Bean
static PropertySourcesPlaceholderConfigurer property() throws Exception {
PropertySourcesPlaceholderConfigurer propertyConfigurer = new PropertySourcesPlaceholderConfigurer();
String filename = System.getProperty("user.home")+File.separator+".webapp"+File.separator+"webapp.preferences";
File file = new File( filename );
if(file.exists())
propertyConfigurer.setLocation( new FileSystemResource( filename ) );
else {
if(file.mkdir()) {
FileOutputStream fos = new FileOutputStream( filename );
fos.close();
propertyConfigurer.setLocation( new FileSystemResource( filename ) );
}
}
return propertyConfigurer;
}
并尝试在我的pojo类中使用它:
@Input(label = "Titulo")
@Property(key = "geral.titulo")
@Value(value = "${geral.titulo}")
private String titulo;
但是当我创建此classe的新实例时,这些字段不会收到注释所指示的值。我做错了什么?我验证了文件及其中存在的属性。