我有一个在 Apache Tomcat 上运行的 Java 开发的休息服务。 这个服务是由一个类实现的,我明确地为它定义了一个构造函数。 我正在对其进行负载测试,发现构造函数被多次调用。然后在构造函数中分配的资源数量不断增加,并且可能比 GC 释放资源的速度更快。 我试图理解多次调用构造函数的原因。我想该服务被 Apache 卸载得太快了,然后必须重新创建它来处理新请求。 关于为什么会发生这种情况的任何提示?
这只是我所拥有的一小部分:
@Path("/myservice")
public class ProcessService
{
private DBConnection conn;
final static public String APP_ID = "MY_APP";
public ProcessService()
{
System.out.println("-----------------------CONSTRUCTOR CALLED --------------------------");
conn = new DBConnection(APP_ID);
System.out.println("-----------------------CONSTRUCTOR CALLED-2 --------------------------");
...
}
...
提前致谢。
最佳答案
这是非 CDI JAX-RS 应用程序的正常行为。您的问题的可能解决方案:
使用 CDI(例如 JBoss)将您的应用程序移动到 EE 容器中,或者使用 Weld 将您的 Tomcat 变成支持 CDI 的容器|并使用 CDI 作用域
@Path("/myservice") @ApplicationScoped public class ProcessService
重构您的应用,使其在每次请求时实例化您的服务时不会造成任何严重问题。例如
final static public String APP_ID = "MY_APP"; private static DBConnection conn = new DBConnection(APP_ID); public ProcessService() { System.out.println("-----------------------CONSTRUCTOR CALLED --------------------------"); // conn is now a static variable so the connection is created only once System.out.println("-----------------------CONSTRUCTOR CALLED-2 --------------------------"); }
关于java - 在 Apache Tomcat 中多次调用 REST 服务构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19595794/