我有一个使用Resteasy的Rest服务(在Appengine上运行),带有以下伪代码:
@Path("/service")
public class MyService {
@GET
@Path("/start")
public Response startService() {
// Need to read properties file here.
// like: servletContext.getResourceAsStream("/WEB-INF/config.properties")
}
}
然而很明显,这里无法访问servlet上下文。
代码如下:
InputStream inputStream = this.getClass().getClassLoader()
.getResourceAsStream("/WEB-INF/config.properties");
无法在Appengine环境中执行。
修改
我尝试过像Spring一样:
appContext.xml
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="/WEB-INF/auth.properties"/>
</bean>
然后,将它放在实际的类字段上:
@Path("/service")
public MyService{
@Autowired
@Value("${myservice.userid}")
private String username;
@Autowired
@Value("${myservice.passwd}")
private String password;
// Code omitted
}
然而,MyService
的部分代码因为username
和password
没有“注入”而抱怨,我的意思是它是空的,尽管它在auth.properties
文件上
答案 0 :(得分:2)
如果您将文件放在/WEB-INF/classes/
(重要的是,在类路径中),将config.properties指定为顶级文件,这应该可以。
this.getClass().getClassLoader().getResourceAsStream("/config.properties");
请参阅此类似问题:How to load properties file in Google App Engine?
修改:现在你已经编辑了,我会回复&amp;回答春天相关的问题。因此,将auth.properties放入/ WEB-INF / classes /,然后按如下所示指定classpath。
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:auth.properties"/>
</bean>
答案 1 :(得分:2)
在RESTEasy中,您可以通过@Context注释轻松注入Servlet上下文:http://docs.jboss.org/resteasy/docs/2.3.1.GA/userguide/html_single/index.html#_Context