您好我在java中使用JAX-RS的Rest服务。我想要一段代码,应该在应用程序启动时只执行一次。不应该在每个请求上执行该代码。我怎么能这样做?
@Path("/xyz")
class RestService{
//do anything here will be executed on each request.
}
我正在使用tomcat服务器。任何帮助都会非常感激。
答案 0 :(得分:3)
这是上下文侦听器的确切用例。有关servlet上下文侦听器的一个很好的示例,请参阅this article。本文将介绍如何定义侦听器以及如何将其连接到Web应用程序中。
答案 1 :(得分:1)
您可以在注册资源的位置编写以下课程。在类的构造函数中,您可以调用所需的任何初始化代码,并将该内容传递给您注册的每个资源的构造函数。
如果您希望每个资源的初始化代码不同,那么您可以在资源的构造函数中执行此操作。在下面的这个例子中,我正在初始化Hibernate配置并将其传递给资源
@ApplicationPath("/")
public class AppNameApplication extends Application{
private Set<Object> singletons=new HashSet<Object>();
private Set<Class<?>> empty=new HashSet<Class<?>>();
private final SessionFactory sessionFactory;
public AppNameApplication(){
try{
Configuration configuration=new Configuration();
configuration.configure("hibernate.cfg.xml");
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
this.sessionFactory=configuration.buildSessionFactory(serviceRegistry);
}
catch(Throwable ex){
System.err.println("Initial SessionFactory creation failed."+ ex);
throw new ExceptionInInitializerError(ex);
}
singletons.add(new Resource1(sessionFactory));
singletons.add(new Resource2(sessionFactory));
singletons.add(new Resource3(sessionFactory));
}
@Override
public Set<Class<?>> getClasses(){
return empty;
}
@Override
public Set<Object> getSingletons(){
return singletons;
}
}