Solr 扩展:TOMCAT配置数据源

来源:互联网 发布:蛮牛unity3d 百度云 编辑:程序博客网 时间:2024/06/07 23:21

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>
  1. 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" />  
0 0
原创粉丝点击