栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在server.xml还是context.xml中设置数据库连接属性

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在server.xml还是context.xml中设置数据库连接属性

我更喜欢第三种方法,该方法从 user1016403描述的方法1和方法2 中获得最大的收益。

方法3
1. 将数据库属性保存在

server.xml

2.
server.xml
从Web应用程序引用数据库属性
meta-INF/context.xml

方法3的好处
尽管出于安全原因第一点很有用,但第二点对于从Web应用程序引用服务器属性值也是有用的,即使服务器属性值会发生变化。


此外,将服务器上的资源定义与Web应用程序的使用脱钩可以使这种配置在具有各种复杂性的组织之间可扩展,其中不同的团队在不同的层/层上工作:如果管理员共享相同的资源,则服务器管理员团队可以在不与开发人员团队冲突的情况下工作每个资源的开发人员的JNDI名称。

方法3的实施

定义JNDI名称

jdbc/ApplicationContext_DatabaseName

使用类似这样的声明

jdbc/ApplicationContext_DatabaseName
在Tomcat的各种属性和值
server.xml

<GlobalNamingResources>  <Resource name="jdbc/ApplicationContext_DatabaseName" auth="Container" type="javax.sql.DataSource"   username="dbUsername" password="dbPasswd"   url="jdbc:postgresql://localhost/dbname"   driverClassName="org.postgresql.Driver"   initialSize="5" maxWait="5000"   maxActive="120" maxIdle="5"   validationQuery="select 1"   poolPreparedStatements="true"/></GlobalNamingResources/>

jdbc/ApplicationContext_DatabaseName
通过属性
meta-INF/context.xml
java:comp/env/
指定的应用程序专用JNDI上下文从网络应用程序链接的name属性:

<Context path="/ApplicationContext" ... >  <!--    "global" attribute links to GlobalNamingResources in the ${catalina.base}/conf/server.xml (server administrator team)    "name" attribute is relative to the application-private JNDI context java:comp/env/ and is looked up from the java web application (application developer team)  -->  <Resourcelink global="jdbc/ApplicationContext_DatabaseName" name="jdbc/DatabaseName" type="javax.sql.DataSource"/></Context>

最后,为了使用JNDI资源,请

jdbc/DatabaseName
在Web应用程序的部署描述符中指定JNDI名称:

<resource-ref>    <description>DatabaseName's Datasource</description>    <res-ref-name>jdbc/DatabaseName</res-ref-name>    <res-type>javax.sql.DataSource</res-type>    <res-auth>Container</res-auth></resource-ref> 

在Spring上下文中:

<jee:jndi-lookup id="DatabaseNameDataSource"   jndi-name="jdbc/DatabaseName"   expected-type="javax.sql.DataSource" />

方法3的缺点
如果JNDI名称被更改,则必须同时编辑和server.xml和,meta-INF/context.xml并且必须进行部署。但是,这种情况很少见。

方法3的变化
一个Web应用程序使用的许多数据源

只需将配置添加到Tomcat的

server.xml

<GlobalNamingResources>  <Resource name="jdbc/ApplicationContext_DatabaseName1" ... />  <Resource name="jdbc/ApplicationContext_DatabaseName2" ... />  ...</GlobalNamingResources/>

meta-INF/context.xml通过属性中java:comp/env/指定的应用程序专用JNDI上下文添加链接Web应用程序name:

<Context path="/ApplicationContext" ... >  <Resourcelink global="jdbc/ApplicationContext_DatabaseName1" name="jdbc/DatabaseName1" ... />  <Resourcelink global="jdbc/ApplicationContext_DatabaseName2" name="jdbc/DatabaseName2" ... />  ...</Context>

最后,在Web应用程序的部署描述符中添加JNDI资源使用情况:

<resource-ref>    <description>DatabaseName1's Datasource</description>    <res-ref-name>jdbc/DatabaseName1</res-ref-name> ... </resource-ref> <resource-ref>    <description>DatabaseName2's Datasource</description>    <res-ref-name>jdbc/DatabaseName2</res-ref-name> ... </resource-ref>...

在Spring上下文中:

<jee:jndi-lookup id="DatabaseName1DataSource"   jndi-name="jdbc/DatabaseName1" ... /><jee:jndi-lookup id="DatabaseName2DataSource"   jndi-name="jdbc/DatabaseName2" ... />...

同一台服务器上的许多Web应用程序使用的许多数据源

只需将配置添加到Tomcat的

server.xml

<GlobalNamingResources>  <Resource name="jdbc/ApplicationContextX_DatabaseName1" ... />  <Resource name="jdbc/ApplicationContextX_DatabaseName2" ... />  <Resource name="jdbc/ApplicationContextY_DatabaseName1" ... />  <Resource name="jdbc/ApplicationContextY_DatabaseName2" ... />  ...</GlobalNamingResources/>

其他配置应该可以从以前的变化情况中得出。

同一服务器上许多Web应用程序使用的同一数据库的许多数据源

在这种情况下,Tomcat的server.xml配置如下:

<GlobalNamingResources>  <Resource name="jdbc/ApplicationContextX_DatabaseName" ... />  <Resource name="jdbc/ApplicationContextY_DatabaseName" ... />

最终出现在两个不同的Web应用程序中,meta-INF/context.xml 例如:

<Context path="/ApplicationContextX" ... >  <Resourcelink global="jdbc/ApplicationContextX_DatabaseName" name="jdbc/DatabaseName" ... /></Context>

像:

<Context path="/ApplicationContextY" ... >  <Resourcelink global="jdbc/ApplicationContextY_DatabaseName" name="jdbc/DatabaseName" ... /></Context>

所以有人可能会担心的是,同样

name="jdbc/DatabaseName"
是抬起头,然后使用由部署在同一服务器上的两个不同的应用程序:这不是一个问题,因为
jdbc/DatabaseName
是一个应用程序私有JNDI上下文
java:comp/env/
,因此
ApplicationContextX
使用
java:comp/env/
不能(根据设计)查找链接到的资源
global="jdbc/ApplicationContextY_DatabaseName"

当然,如果你放心而又不用担心,可以使用其他命名策略,例如:

<Context path="/ApplicationContextX" ... >  <Resourcelink global="jdbc/ApplicationContextX_DatabaseName" name="jdbc/applicationXprivateDatabaseName" ... /></Context>

像:

<Context path="/ApplicationContextY" ... >  <Resourcelink global="jdbc/ApplicationContextY_DatabaseName" name="jdbc/applicationYprivateDatabaseName" ... /></Context>


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/407894.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号