Использовать Context.setSessionTimeout (int). Java документы здесь . Вот тот же Основной класс с тайм-аутом сеанса, установленным на 30 дней:
package launch;
import java.io.File;
import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.Context;
public class Main {
public static void main(String[] args) throws Exception {
String webappDirLocation = "src/main/webapp/";
Tomcat tomcat = new Tomcat();
//The port that we should run on can be set into an environment variable
//Look for that variable and default to 8080 if it isn't there.
String webPort = System.getenv("PORT");
if(webPort == null || webPort.isEmpty()) {
webPort = "8080";
}
tomcat.setPort(Integer.valueOf(webPort));
Context ctx = tomcat.addWebapp("/", new File(webappDirLocation).getAbsolutePath());
ctx.setSessionTimeout(2592000);
System.out.println("configuring app with basedir: " + new File("./" + webappDirLocation).getAbsolutePath());
tomcat.start();
tomcat.getServer().await();
}
}
Обратите внимание на Context ctx = ...
и ctx.setSessionTimeout(...)
.
Что касается Tomcat Manager, вы не можете использовать его, когда встраиваете Tomcat в свое приложение таким образом. Мне интересно, для чего вы хотели бы использовать Tomcat Manager?
Все, что вы обычно делаете из server.xml
, вы можете сделать через API встраивания. Весь смысл встраивания заключается в том, что вы настраиваете все программно.
Вы можете настроить свой собственный web.xml
, как обычно. Просто добавьте его в каталог WEB-INF
в каталоге, который вы передаете как webappDirLocation
. Но опять же, мне любопытно, что вы хотели бы вставить в web.xml
? Поскольку вы «владеете» основным циклом приложения, вы можете настроить любую необходимую конфигурацию из основного метода. Я настоятельно рекомендую практику инициализации всего, что вам нужно в основном цикле, и чтения переменных среды ОС для всего, что зависит от среды (например, URL JDBC).
Наконец, что касается Eclipse, вам больше не нужно горячее развертывание, потому что вы не используете модель развертывания контейнера. Вы можете просто запустить свое приложение из Eclipse с помощью «Debug as ...», и Eclipse автоматически скомпилирует и перезагрузит код при его изменении. Это не совсем похоже на горячее развертывание. Например, он не будет перегружать классы новыми сигнатурами методов. Но циклически обрабатывать все приложение намного быстрее, чем при использовании контейнера, поэтому в целом я считаю его гораздо более продуктивным.