在运行时将目录添加到类路径

时间:2014-11-04 12:51:03

标签: java spring spring-mvc classpath spring-boot

在我目前的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的新实例时,这些字段不会收到注释所指示的值。我做错了什么?我验证了文件及其中存在的属性。

0 个答案:

没有答案