我一直在尝试修改我的heroku应用程序的嵌入式tomcat配置。我已经使用下面的wiki链接安装了heroku app,它配置了一个简单的嵌入式tomcat。
http://devcenter.heroku.com/articles/create-a-java-web-application-using-embedded-tomcat
源代码在这里:
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));
tomcat.addWebapp("/", new File(webappDirLocation).getAbsolutePath());
System.out.println("configuring app with basedir: " + new File("./" + webappDirLocation).getAbsolutePath());
tomcat.start();
tomcat.getServer().await();
}
问题:
autodeploy = true
以便每次修改java代码时都不必编译并重新启动应用程序?互联网上的文档不是很清楚。你能帮忙吗?
提前致谢.. 基兰
答案 0 :(得分:1)
使用Context.setSessionTimeout(int)。 Java文档here。这是相同的Main类,会话超时设置为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做什么?
您通常可以通过嵌入API从server.xml
执行任何操作。整个嵌入点是您以编程方式配置所有内容。
您仍可以像往常一样设置自己的web.xml
。只需将其添加到您传入的目录WEB-INF
目录下webappDirLocation
即可。但是,我很好奇你想要放在web.xml
中的什么?因为您“拥有”主应用程序循环,所以您可以从main方法设置所需的任何配置。我强烈建议在主循环中初始化您需要的所有内容,并为环境特定的任何内容(例如JDBC URL)读取OS环境变量。
最后,对于Eclipse,您不再需要热部署,因为您没有使用容器部署模型。您只需使用“Debug as ...”从Eclipse内部运行应用程序,Eclipse将在您更改时自动编译并重新加载代码。它与热部署并不完全相似。例如,它不会使用新方法签名热重新加载类。但与使用容器相比,循环整个应用程序的速度要快得多,因此总体而言,我发现它的效率更高。