2014-02-19 4 views
2

Я использую Tomcat, встроенный в мое приложение Java 8. Я попытался переключить порт во время работы следующим образом:Могу ли я изменить порт встроенного Tomcat во время выполнения?

Tomcat tomcat = new Tomcat(); 
    tomcat.setPort(18080); 

    Timer timer =new Timer(); 
    timer.schedule(new TimerTask() { 
     @Override 
     public void run() { 
      tomcat.setPort(18181); 
     } 
    },240000L); 

Но он не работает. Wepapp отвечает только на порт 18080 после того, как была достигнута задержка таймера.

Переключение возможно даже во время работы? Как мне это сделать?

EDIT:

Использование Tomcat встроенный 8.0.3 на JDK 1.8.0b129

Я хотел бы избежать, чтобы перезагрузить сервер, так как процесс запуска занимает много времени.

+0

Почему вам нужно изменить порт? – Stefan

+0

Другое серверное приложение должно обслуживать этот порт как можно более плавно, так что это позволяет избежать простоя. – dajood

+0

@thejeed когда-либо найти решение этого? –

ответ

2

вы должны попытаться рестарт сервера:

timer.schedule(new TimerTask() { 
     @Override 
     public void run() { 
      tomcat.stop(); 
      tomcat.setPort(18181); 
      tomcat.start(); 
      tomcat.getServer().await(); 
     } 
},240000L); 
+0

К сожалению, процесс запуска очень дорог, поэтому я хочу избежать перезагрузки сервера. – dajood

1

Вам нужно вызвать его HTTP по умолчанию соединители уничтожить метод, но я не знаю, если это возможно в Tomcat 8.

+0

Ваш метод почти работает. Я вызываю 'stop()' и 'destroy()' на соединителе, а затем создаю новый экземпляр и назначаю его экземпляру сервера. К сожалению, после этого ни один запрос не может быть обработан - я получаю NPE из Coyote.postParseRequest(). – dajood

Смежные вопросы