我习惯在Tomcat / Jetty上使用Spring,现在我正在使用在WildFly上运行的现有JAX-RS项目(RESTEasy)。
我想知道应用程序/部署属性文件在WildFly,standalone / configuration / myapp.properties上的位置是什么?
然后应用程序如何加载它们?我在我们的类中尝试扩展javax.ws.rs.core.Application:
@javax.ws.rs.ApplicationPath("")
public class ApplicationConfig extends Application {
@Override
public Map<String, Object> getProperties() {
System.out.println(">>>>>>>>>>>>>>>> get properties");
// I added this method but nothing is printed...
}
@Override
public Set<Class<?>> getClasses() {
System.out.println(">>>>>>>>>>>>>>>> get classes");
// This is printed
...
// classes are loaded correctly
}
}
然后我将如何访问控制器中的属性?顺便说一下,我们不使用依赖注入。
谢谢!
答案 0 :(得分:1)
通常应该工作
getProperties()
以加载任何所需的应用程序属性。您应该能够将javax.ws.rs.core.Configuration
注入资源类(使用@Context
)并通过该对象检索属性。这在javadoc中说明
可以使用
Context
注释注入此接口。
@ApplicationPath("/api")
public class RestApplication extends Application {
@Override
public Map<String, Object> getProperties() {
System.out.println(">>>>>>>>>>>>>>>> get properties");
Map<String, Object> props = new HashMap<>();
props.put("message", "Hello Configuration Properties!");
return props;
}
}
@Path("config")
public class ConfigResource {
@Context
private Configuration configuration;
@GET
public Response getProperty(@QueryParam("prop") String prop) {
String propValue = (String)configuration.getProperty(prop);
return Response.ok(propValue).build();
}
}
我可以与Resteasy合作的方法是将Application
(如前所述here注入资源(也使用@Context
)并获取属性那样。
@Path("config")
public class ConfigResource {
@Context
Application application;
@GET
public Response getProperty(@QueryParam("prop") String prop) {
String propValue = (String)application.getProperties().get(prop);
return Response.ok(propValue).build();
}
}