问题 如何在Google App Engine中加载属性文件?


所以我正在尝试为我的项目添加一些功能,以允许我的部署工件中的用户定义属性 - 一个简单的键:value .properties文件。我将service.properties文件放入

war/WEB-INF/my-service.properties 

在我的ServiceImpl.java构造函数中,我有以下内容:

String propertiesFileName = "my-service.properties"; 

URL propertyURL = ClassLoader.getSystemResource(propertiesFileName);
URL propertyURL2 = this.getClass().getClassLoader().getResource(propertiesFileName);
URL propertyURL3 = this.getClass().getClassLoader().getResource( "WEB-INF/" + propertiesFileName);
URL propertyURL6 = this.getClass().getClassLoader().getResource(
       "E:/Projects/eclipse-workspace/projectName/war/WEB-INF/" + propertiesFileName);

属性URL的所有实例都为空。我知道我错过了一些绝对明显的东西,但我需要第二双眼睛。问候。

编辑:

啊,似乎我很困惑,因为默认的GAE项目在/ war中创建了logging.properties文件。来自 Google App Engine文档:

App Engine Java SDK在appengine-java-sdk / config / user /目录中包含模板logging.properties文件。要使用它,请将文件复制到WEB-INF / classes目录(或WAR中的其他位置),然后将系统属性java.util.logging.config.file复制到“WEB-INF / classes / logging.properties”(或无论您选择哪条路径,相对于应用程序根目录。您可以在appengine-web.xml文件中设置系统属性,如下所示:


1400
2017-09-01 13:39


起源

我认为这是你的问题而不是你的应用程序的拼写错误,但你说你的文件被称为“service.properties”,而propertyFileName被设置为“my-service.properties”! - Todd Owen
@Todd:是的,这是一个错字,我会纠正它。 - Chris K


答案:


尝试将service.properties放在WEB-INF / classes中。然后它应该可以访问:

this.getClass().getClassLoader().getResourceAsStream("/filename.properties");

10
2017-09-01 14:17



你知道为什么对我来说我需要删除路径开头的“/”才能工作吗? - Mike


麦克风 在他的评论中提到 jsight答案,如果我使用它对我有用

this.getClass().getClassLoader().getResourceAsStream("filename.properties");

将文件放入WEB-INF / classes后(删除第一个斜杠)。


1
2017-09-09 13:58





我想你需要的是这样的:

String filePath = servletContext.getRealPath(“/ WEB-INF / views /”)+“/”+ mav.getViewName()+“。vm”; FileInputStream in = new FileInputStream(filePath);

我从spring获得了servletContext:@Autowire ServletContext。


0
2017-10-12 09:09