有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java启动Tomcat后的第一次调用REST非常慢

我的Rest服务工作得很好,但当我启动Tomcat服务器并调用first Rest时,它会持续3-4秒。另一个通话休息时间快如2-30毫秒。 我认为这是因为在第一次调用im登录数据库或启动事务(EntityManager)。[对吗?]

我的网络。xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
  <display-name>AggregatorGroupRest</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
        <servlet-name>Jersey Web Application</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>com.agg.rest</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

坚持。xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="EmployeeService">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>    
    <class>com.agg.atomic.model.Employee</class>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
            <properties>
                <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
                <property name="javax.persistence.jdbc.url"    value="jdbc:mysql://db4free.net:3306/qwqwqwqw?useSSL=false" />       
                <property name="javax.persistence.jdbc.user" value="login" />
                <property name="javax.persistence.jdbc.password" value="password" />
                <property name="eclipselink.ddl-generation" value="create-tables" />
                <property name="eclipselink.ddl-generation.output-mode" value="database" />
        </properties>
    </persistence-unit>
</persistence>

我的Rest实现

@Path("/test")
public class TestServiceImpl implements TestService{

    @GET
    @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
    public EmployeeModel getEmployee() {
        TestBuilder testBuilder = new TestBuilder();
        return testBuilder.getEmployee();
    }
}

建筑商:

public class TestBuilder {
    private static EntityManager entityManager = EntityManagerUtil.getEntityManager();

    public EmployeeModel getEmployee(){
        if (!entityManager.getTransaction().isActive()) entityManager.getTransaction().begin();
        Employee employee = entityManager.find(Employee.class, 6);

        EmployeeModel result = TestResultMapping.getEmployee(employee);

        return result;
    }
}

和实施实体管理器:

public class EntityManagerUtil {
    private static final EntityManagerFactory entityManagerFactory;
    static {
        try {
            entityManagerFactory = Persistence.createEntityManagerFactory("EmployeeService");
        } catch (Throwable ex) {
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static EntityManager getEntityManager() {
        return entityManagerFactory.createEntityManager();
    }
}

现在问题是: 我所能做的就是让我的第一次呼叫REST像他之后的其他人一样快速

谢谢你抽出时间


共 (0) 个答案