我正在使用Jersey和Jetty开发一个独立的Java应用程序。为了实现高效的线程池,我想配置工作管理器并将应用程序部署为jar。我已经在
这样的主启动器类中创建了服务器实例Server server = new Server(Integer.valueOf(port));
ServletContextHandler context = new ServletContextHandler(server, "/");
我发现了不同的资源,其中说我可以在config.xml中配置工作管理器,如下所示。
<work-manager>
<name>WM</name>
<max-threads-constraint>64</max-threads-constraint>
<min-threads-constraint>3</min-threads-constraint>
<fairshare>80</fairshare>
</work-manager>
但是,如果要在主类和其他资源(如JDBC Datasource)中以编程方式配置相同的内容,该怎么做?任何帮助将不胜感激。谢谢。
注意:我正在使用码头版本 9.4.16.v20190411 和我的pom条目
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<version>${jetty.version}</version>
</dependency>
编辑:我想要像
这样的参数化工作管理器private WorkManager getWorkManager(String workManagerName) throws RuntimeException {
String workManagerLookupName = null;
try {
workManagerLookupName = "java:comp/env/" + workManagerName;
InitialContext ic = new InitialContext();
//Resource resource = new Resource("java:comp/env/" + workManagerName,);
WorkManager wm = (WorkManager) ic.lookup(workManagerLookupName);
return wm;
} catch (NamingException e) {
throw new RuntimeException("Unable to get WorkManager instance for " + workManagerLookupName, e);
}
}
可以通过编程方式实现吗?
答案 0 :(得分:1)
您可以创建一个threadPool配置并将其传递给服务器构造函数:
QueuedThreadPool threadPool = new QueuedThreadPool();
threadPool.setMaxThreads(64);
threadPool.setMinThreads(3);
Server server = new Server(threadPool);
有关如何添加JDBC数据源的说明可在此处找到: Jetty Bind DataSource in JNDI Context