我有一个Web应用程序,通过<GlobalNamingResources>
中的server.xml
标记或<Context>
中的context.xml
标记中的jndi资源标记获取数据库连接。
但即使是其中一种情况,也会为Tomcat中的每个Web应用程序调用资源,是否有办法定义仅为特定Web应用程序加载的资源。
我也被限制在应用程序context.xml
中定义资源,因为我被要求在应用程序/ WAR文件之外安装数据库。
目前,我已将其保留在<GlobalNamingResources>
标记中,并且会为所有网络应用加载它。
有什么想法吗?
答案 0 :(得分:1)
据我所知,一般来说,你在战争之外可以从战争之外获得。
是的,JNDI是一种定义数据源的“简单”方法。 但这意味着,DB驱动程序也将在战争之外部署。 通常,当需要共享不同WAR之间的驱动程序连接时,此方法很好。 资源由Tomcat的内部类加载器加载,而不是由分配给WAR的类加载器加载。
我不知道WAR对这种全球资源的任何限制或限制。
所以,我认为你在这里没有太多选择: 如果要定义“私有”应用程序的数据源,则必须在战争中定义它。
您还说“您被限制在应用程序的context.xml中定义资源”并将数据库配置存储在WAR之外。
为什么你有这样的要求?
一般情况下,可以在WAR之外维护一些外部配置(比如属性文件),这些配置将包含WAR之外的数据库的主机/用户/密码和其余连接属性,但是在内部定义DataSource本身。使用连接池和所有内容的WAR(比如Spring或直接)。
如果您只需要从几个可能的配置中进行选择,它也可以在Spring中使用配置文件,但由于我根本不知道您是否使用Spring,因此很难做出任何陈述并在此提出具体建议
在你的情况下,它可能是更优选的方法吗?
希望这有帮助, 标记