Solr 扩展:TOMCAT配置数据源

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" />  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值