Spring属性文件路径参考?

时间:2015-08-31 09:43:54

标签: java spring spring-mvc

我正在使用Spring。我已在src/main/resources中放置了属性文件,并尝试在弹簧bean中引用它,如下所示。

InputStream input = new FileInputStream("classpath:AwsCredentials.properties");

AWSCredentials credentials = new PropertiesCredentials(input);

上面的代码不起作用,它说File not found。有什么不对吗?请帮帮我。

3 个答案:

答案 0 :(得分:0)

您可以使用Springs resource loading机制将InputStream移至给定的Resource

Resource resource = new ClassPathResource("path/to/AwsCredentials.properties");
AWSCredentials credentials = new PropertiesCredentials(resource.getInputStream());

但是,我强烈建议您使用Environment abstraction并构建BasicCredentials,而不是自己管理这些内容。这样可以节省您处理资源和获取输入流的麻烦。您可以通过多种方式配置AWS凭据。

@PropertySource("classpath:AwsCredentials.properties")
public class AWSConfiguration {

    @Autowired
    private Environment env;

    @Bean
    public AwsCredentials credentials() {
        String secretKey = env.getRequiredProperty("name of property");
        String accessKey = env.getRequiredProperty("name of property");
        return new BasicCredentials(accessKey, secretKey);
    }

}

现在Spring负责为您加载资源。

注意:两个示例都假定AwsCredentials.properties位于类路径的根目录中。如果它在子目录/包中,则需要添加它。

答案 1 :(得分:0)

我使用getClass()。getResource()方法读取放在/ resources文件夹中的文件

此示例读取json,但也适用于属性文件。

String json = null;

    try {
        URI path = getClass().getResource("/" + file).toURI();
        json = new String(Files.readAllBytes(Paths.get(path)));
    } catch (URISyntaxException e) {
        logger.error("error in path to the file", e);
    } catch (IOException e) {
        logger.error("error while reading the file", e);
    }
    return json;

答案 2 :(得分:-1)

请尝试此更正: -

Resource resource = 
           appContext.getResource("classpath:src/main/resources/AwsCredentials.properties");
try{
          InputStream is = resource.getInputStream();
          AWSCredentials credentials = new PropertiesCredentials(input);
}catch(IOException e){
            e.printStackTrace();
}