我有一个在Tomcat中运行的简单servlet。因为servlet连接到数据库,所以我需要使用连接池。但是,互联网上的所有示例都假设(开发人员)永远不会更改servlet连接的数据库。
例如,这是一个示例context.xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/feeds">
<Resource name="jdbc/TestDB"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
username="username"
password="password"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://example.com:1234/myDB"
maxWait="1000"
removeAbandoned="true"
maxActive="30"
maxIdle="10"
removeAbandonedTimeout="60"
logAbandoned="true"/>
</Context>
在我的情况下,我有一个测试服务器(postgresql)和一个生产服务器(ms sql),因此假设我只能在context.xml中硬编码设置的所有教程都不起作用。
我有2个不同的属性文件用于数据库url,身份验证等,我使用,一个用于测试服务器,一个用于生产服务器,并且效果很好,但现在如果我想使用连接池,我该怎么办?将它集成到我的servlet中?
我希望能够在Netbeans 6.5中点击“build”,在dist目录中进行战争,并将其放入任一服务器的tomcat应用程序目录中,而不必在新战争结束后更改xml文件已部署。 servlet知道在每个系统上获取属性文件的位置,所以如果我可以将属性文件与连接池属性集成,我就会全部设置。
任何想法......?
答案 0 :(得分:4)
我将所有数据源定义放在tomcat的conf / server.xml文件中,因此war完全独立于数据源。
server.xml中:
<GlobalNamingResources>
<Resource name="mail/Mail" auth="Container" type="javax.mail.Session"
mail.smtp.host="localhost"/>
<Resource auth="Container" type="javax.sql.DataSource" name="jdbc/lagalerie"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://localhost/lagalerie?charSet=LATIN1"
maxActive="100" maxIdle="30" maxWait="10000"
username="casashop" password="casashop"/>
</GlobalNamingResources>
context.xml中:
<ResourceLink global="jdbc/lagalerie" name="jdbc/lagalerie" type="javax.sql.DataSource"/>
<ResourceLink global="mail/Mail" name="mail/Mail" type="javax.mail.Session"/>
的web.xml:
<resource-ref>
<description>The datasource</description>
<res-ref-name>jdbc/DataSource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<resource-ref>
<description>The mail session</description>
<res-ref-name>mail/Mail</res-ref-name>
<res-type>javax.mail.Session</res-type>
<res-auth>Container</res-auth>
</resource-ref>
答案 1 :(得分:-1)
您可以拥有2个不同的连接,并在运行中检测要在应用程序中使用的连接。