如何在特定的 Web 应用程序部署事件上加载 tomcat jndi resource/context

How to load tomcat jndi resource/context on a specific web app deploy event

我有一个 Web 应用程序,它通过 server.xml 中的 <GlobalNamingResources> 标记或 context.xml 中的 <Context> 标记中的 jndi 资源标记获取数据库连接。

但即使是这两种情况,资源都会为 Tomcat 中的每个 Web 应用程序调用,有没有一种方法可以定义只为特定 Web 应用程序加载的资源。

我也被限制在应用程序 context.xml 中定义资源,因为我被要求在 application/WAR 文件之外进行数据库配置。

目前,我将它保存在 <GlobalNamingResources> 标签中,并且它会为所有网络应用程序加载。

有什么想法吗?

据我所知,一般来说,您放在 war 之外的内容可以从 war 之外访问。

是的,JNDI 是一种定义数据源的“简单”方法。然而,这意味着 DB 驱动程序也将部署在 war 之外。当需要在不同 WAR 之间共享驱动程序连接时,通常这种方法很好。资源由 Tomcat 的内部类加载器加载,而不是由分配给 WAR.

的类加载器加载

我不是war这样的全球资源的WAR任何方式或限制。

所以,我认为你在这里没有太多选择:如果你想定义一个“私有”应用程序的数据源,你必须在 war.

中定义它

您还说过“您只能在应用程序的 context.xml 中定义资源”并将数据库配置存储在 WAR 之外。

为什么会有这样的需求?

一般来说,可以在 WAR 之外维护一些外部配置(例如,属性文件),其中将包含 host/user/password 和 [=37 之外的数据库的其余连接属性=],但在 WAR 中定义 DataSource 本身(比如在 Spring 中或直接),并带有连接池和所有内容。

如果您需要从几个可能的配置中进行选择,也可以使用 Spring 中的配置文件,但由于我根本不知道您是否使用 Spring,因此很难在这里发表任何声明并给出具体建议。

也许这是您更喜欢的方法?