Tomcat应用服务器的开发坏境下,数据源的配置往往都是在applicationContext.xml中配置一个dataSource的bean,然后在部署时再修改JNDI数据源配置信息。
最近因为全文检索DIH增量索引数据源配置的问题,总结一下:
Tomcat6的服务器的配置放在${tomcat6}/conf目录底下,这里主要涉及了两个配置文件server.xml和context.xml。
在tomcat6本版中,context元素从server.xml文件中独立出来,放在一个context.xml文件中。这是因为server.xml是不可动态加载的资源,服务器一旦启动了以后,要修改了这个文件,就得重新启动服务器才能使这个配置文件生效。而context.xml文件则不然,tomcat服务器会定时去扫描这个文件,一旦发现文件被修改了,就会自动重新加载这个文件,而不需要重新启动服务器。所以,我们推荐把应用需要的JNDI的资源配置在context.xml文件中,而不是server.xml中。
全文检索数据源的配置:
1. Tomcat context.xml中添加数据源。
<?xml version='1.0' encoding='utf-8'?>
<!-- The contents of this file will be loaded for each web application -->
<Context allowLinking="true">
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
<!-- Uncomment this to enable Comet connection tacking (provides events
on session expiration as well as webapp lifecycle) -->
<!--
<Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
-->
<Resource name ="jdbc/core1" auth = "Container" type = "javax.sql.DataSource"
driverClassName = "com.mysql.jdbc.Driver"
url="jdbc:mysql://ip:port/db_name?characterEncoding=UTF-8" username="root" password="root"/>
<Resource name ="jdbc/core2" auth = "Container" type = "javax.sql.DataSource"
driverClassName = "com.mysql.jdbc.Driver"
url="jdbc:mysql://ip:port/db_name?characterEncoding=UTF-8" username="root" password="root" />
</Context>
- Solr data-config.xml中添加对数据源的引用
源代码:
<dataSource name="jdbc"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://ip:port/db_name?characterEncoding=UTF-8"
user="root"
password="root"/>
修改之后:
<dataSource name="jdbc"
jndiName="java:comp/env/jdbc/core1"
type="JdbcDataSource"
batch-size="1000" />
Tomcat数据源配置总结:
第一种:找到Tomcat的server.xml,在server.xml工程中Context节点,添加一个私有的数据源。
<Context docBase="WebApp" path="/WebApp" reloadable="true" source="org.eclipse.jst.jee.server:WebApp">
<Resource
name="jdbc/mysql"
scope="Shareable"
type="javax.sql.DataSource"
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
url="jdbc:mysql://localhost:3306/test"
driverClassName ="com.mysql.jdbc.Driver"
username="root"
password="root"
/>
</Context>
优点:简单;缺点:重用性差。
第二种:配置全局的JNDI数据源,应用到单个应用
第一步,找到Tomcat的server.xml中的GlobalNamingResources节点,在节点下加一个全局数据源
<Resource
name="jdbc/mysql"
scope="Shareable"
type="javax.sql.DataSource"
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
url="jdbc:mysql://localhost:3306/test"
driverClassName ="com.mysql.jdbc.Driver"
username="root"
password="root"
/>
第二步,找到要应用此JNDI数据源的工程context节点,增加对全局数据源的引用ResourceLink
<Context docBase="WebApp"
path="/WebApp" reloadable="true">
<ResourceLink global="jdbc/mysql"
name="jdbc/mysql" type="javax.sql.DataSource" />
</Context>
第三种:配置全局的JNDI数据源,应用到所有的Tomcat下部署的应用
也分两步:
第一步:参考第二种的第一步
第二步:找到Tomcat的context.xml,在context节点下加一个ResourceLink节点对第一步配置的数据源进行引用
这个xml配置文件的根节点就是<context>
<Context>
<ResourceLink global="jdbc/mysql" name="jdbc/mysql" type="javax.sql.DataSource" />
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Context>
优点:重用性,一次性到位,缺点:没有可控制性。
Spring对JNDI数据源的引用
在applicationContext.xml中加一个bean,替代原来的dataSource
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/mysql" />