我正在尝试使用 JNDI 为 Springweb 应用程序设置数据库连接属性。
我正在考虑以下两种方法:
方法1:
在您的 Spring 配置中,您可能会遇到这样的情况:
<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/facs"/>
然后在 webapp/META-INF/context.xml 文件中也应该有类似的内容:
<?xml version='1.0' encoding='utf-8'?>
<!-- antiResourceLocking="true" -->
<Context path="/podd-apn"
reloadable="true"
cachingAllowed="false"
antiResourceLocking="true"
>
<Resource name="jdbc/facs"
type="javax.sql.DataSource" username="${database.username}" password="${database.password}"
driverClassName="org.postgresql.Driver"
url="${database.url}"
maxActive="8" maxIdle="4"
global="jdbc/facs"
/>
</Context>
在 web.xml 中,您应该这样做:
<!-- JNDI -->
<resource-ref>
<description>FACs Datasource</description>
<res-ref-name>jdbc/facs</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
方法2:
在 Spring 上下文中的设置如下:
<jee:jndi-lookup id="dbDataSource"
jndi-name="jdbc/DatabaseName"
expected-type="javax.sql.DataSource" />
您可以使用如下方法在 Tomcat 的 server.xml 中声明 JNDI 资源:
<GlobalNamingResources>
<Resource name="jdbc/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/>
并像下面这样引用 Tomcat 的 web context.xml 中的 JNDI 资源:
<ResourceLink name="jdbc/DatabaseName"
global="jdbc/DatabaseName"
type="javax.sql.DataSource"/>
我的问题是,保存数据库属性的最佳位置在哪里? 它们应该放在 Xml还是 Xml中?
另外,如果我有两个数据库,我应该使用两种配置吗?
另外,将它们直接放在 server.xml 或 context.xml 中是最佳实践吗?还是需要通过 Tomcat Manager GUI 控制台进行配置?
谢谢!