Как сделать Tomcat быстрым при загрузке изменений, чтобы ускорить веб-разработку на Java - PullRequest
7 голосов
/ 14 января 2011

Мое приложение использует Struts2 MVC, шаблон Spring JDBC с Eclipse IDE и Tomcat.Всякий раз, когда я изменяю код класса, мне приходится перезапускать Tomcat, который каждый раз тратит около 15-20 секунд.

Я настроил горячее развертывание, т.е. on-java-class-change, контекст перезагружается автоматически, ноэто часто терпит неудачу, и я должен перезапустить Tomcat.

Что я хочу, это:

  1. Когда я внесу изменения в JSP, этодолжен загружаться автоматически, а не по первому запросу.

  2. При изменении и сборке java-класса следует загружать только этот класс, без перезапуска Tomcat, даже весь контекст не долженперезагрузите или перезагрузите.

Если кто-то использовал Jetty, пожалуйста, поделитесь - обеспечивает ли Jetty лучшее решение этих проблем.

В PHP вы вносите изменения в сценарий,и получить доступ к этой странице, она готова.Я просто желаю этого на Яве.

Ответы [ 5 ]

3 голосов
/ 14 января 2011

Мы используем встроенную Jetty на работе, и это взрыв. См. http://wiki.eclipse.org/Jetty/Tutorial/Embedding_Jetty для руководства по установке Jetty.

Время запуска на стороне причала очень быстрое (1-2 секунды). В нашем случае для инициализации пружины требуется много времени.

Легко настроить Jetty для автоматической перезагрузки jsps, просто укажите его в каталог, а не на файл war, и jsps перезагрузится автоматически, что-то вроде этого:

public class OneWebAppUnassembled
{
    public static void main(String[] args) throws Exception
    {
        Server server = new Server(8080);

        WebAppContext context = new WebAppContext();
        context.setDescriptor(webapp+"/WEB-INF/web.xml");
        context.setResourceBase("../test-jetty-webapp/src/main/webapp");
        context.setContextPath("/");
        context.setParentLoaderPriority(true);

        server.setHandler(context);

        server.start();
        server.join();
    }
}

Перезагрузка класса возможна с помощью горячей замены, я не знаю, есть ли готовые решения для случаев, когда горячая замена не работает.

3 голосов
/ 14 января 2011

Посмотрите на JRebel .Вы должны заплатить за это, но это может стоить того в конечном счете за сэкономленное время!:)

2 голосов
/ 14 января 2011

Tapestry5 имеет живой класс и шаблонную перезагрузку , работает в Tomcat и Jetty.Это делает разработку намного быстрее.

Что касается Jetty поверх Tomcat, я обычно использую Jetty для разработки в наши дни.Это супер быстрый запуск и очень настраиваемый.Вы можете написать свой собственный простой сервер и запустить его в Eclipse, например:

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;

public class JettyServer {
    public static void main(String[] args) throws Exception {
        run(8080, "/path/to/eclipse/project/WebContent", "/WEB-INF/web.xml");
    }
    private static void run(int port, String resourceBase, String descriptor) throws Exception {
        Server server = new Server(port);

        WebAppContext context = new WebAppContext();
        context.setResourceBase(resourceBase);
        context.setDescriptor(resourceBase+descriptor);
        context.setContextPath("/");
        context.setParentLoaderPriority(true);
        server.setHandler(context);
        server.start();
        server.join();
    }
}
1 голос
/ 09 июня 2012

Я с большим успехом использовал плагин Sysdeo Tomcat Laucher для Eclipse http://www.eclipsetotale.com/tomcatPlugin.html. У DevLoader удивительная вещь.Единственная проблема, с которой я столкнулся, заключается в том, что он не может перезагрузить класс, который вводит новые свойства или методы.Автор плагина тоже очень отзывчив.

1 голос
/ 14 января 2011

Ознакомьтесь с SpringSource Tool Suite. Я начал использовать его пару месяцев назад.

Поставляется с предварительно сконфигурированным сервером SpringSource tc (версия для разработки). Обычно, когда я работаю над веб-приложением, я просто перетаскиваю его из Project Explorer на сервер SpringSource tc и продолжаю разработку. Код, включающий изменения класса Java и изменения JSP, перезагружается на лету. Таким образом, любые сделанные вами изменения можно просмотреть практически мгновенно.

Другая вещь, которую я делаю, - это Jetty, похожий на тот, что упоминал Ювал, однако моя конфигурация находится в pom.xml в Maven 2 и выглядит примерно так:

<plugin>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>maven-jetty-plugin</artifactId>
    <configuration>
        <contextPath>/tas</contextPath>
        <tmpDir>/tmp</tmpDir>
        <jettyEnvXml>${basedir}/jetty-env.xml</jettyEnvXml>
        <systemProperties>
            <systemProperty>
                <key> org.mortbay.jetty.webapp.parentLoaderPriority </key>
                <value>true</value>
            </systemProperty>
        </systemProperties>
    </configuration>
</plugin>

Однако я предпочитаю выполнять ручную перезагрузку с помощью молы, поэтому обычно добавляю

<reload>manual</reload>

в элемент <configuration>. Ручная перезагрузка относится только к изменениям, которые я делаю в файлах Java. Таким образом, после ряда существенных изменений и успешного прохождения тестовых примеров, я нажимаю enter в консоли Jetty, и все это перезагружается. (Мне слишком нравится сочетание клавиш Ctrl-S и, следовательно, оно появляется после каждой второй строки, но я не хочу, чтобы Jetty перезагружалась после каждой второй строки кода, который я пишу).

Также имейте в виду, что ручная перезагрузка применяется только к изменениям класса Java и требуется только при изменении класса Java или, возможно, конфигурации XML. Если все, что вы изменили, - это JSP, то вам не нужно перезагружать изменение, которое было получено автоматически, и вы можете нажать обновить в браузере, чтобы увидеть изменение JSP без перезагрузки вручную.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...