双数据源配置(一个项目中链接两个数据库)

resin文件配置(我用的resin,其他的可自行配置)
<database>
	<jndi-name>jdbc/OracleDB</jndi-name>
	<driver type="oracle.jdbc.driver.OracleDriver">
		<!--<url>jdbc:oracle:thin:@oa.paipai580.com:1521:orcl</url>
		<user>cggl</user>
		<password>cggl345#$%</password>-->

		 <url>jdbc:oracle:thin:@192.168.1.9:1521:orcl</url>
		<user>ycg</user>
		<password>ycg</password>

	</driver>
	<prepared-statement-cache-size>8</prepared-statement-cache-size>
	<max-connections>20</max-connections>
	<max-idle-time>30s</max-idle-time>
    </database>

      <database>
	<jndi-name>jdbc/mysqlDB</jndi-name>
	<driver type="com.mysql.jdbc.Driver">
		<url>jdbc:mysql://39.98.47.52:3306/dev-idr</url>
		<user>admin</user>
		<password>mySteel2019,[email protected]#</password>

	</driver>
	<prepared-statement-cache-size>8</prepared-statement-cache-size>
	<max-connections>20</max-connections>
	<max-idle-time>30s</max-idle-time>
    </database>

1.  然后写一个数据源持有类:

package org.thcic.ejw.components.datatable;

public class DataSourceHolder {
	private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();

    /**
     * @Description: 设置数据源类型
     * @param dataSourceType  数据库类型
     * @return void
     * @throws
     */
    public static void setDataSourceType(String dataSourceType) {
        contextHolder.set(dataSourceType);
    }

    /**
     * @Description: 获取数据源类型
     * @return String
     * @throws
     */
    public static String getDataSourceType() {
        return contextHolder.get();
    }

    /**
     * @Description: 清除数据源类型
     * @return void
     * @throws
     */
    public static void clearDataSourceType() {
        contextHolder.remove();
    }

}

  2. 写一个数据源路由类

package org.thcic.ejw.components.datatable;

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

public class RoutingDataSource extends AbstractRoutingDataSource {

	@Override
	protected Object determineCurrentLookupKey() {

		return DataSourceHolder.getDataSourceType();
	}

}

  

3. 配置数据源路由

<!--配置数据源路由-->
    <bean id="dataSource" class="org.thcic.ejw.components.datatable.RoutingDataSource">
        <!-- 为targetDataSources注入两个数据源 -->
        <property name="targetDataSources">
            <map key-type="java.lang.String">
                <entry key="orcleDb" value-ref="orclDataSource"/>
                <entry key="mysqlDb" value-ref="mysqlDataSource"/>
            </map>
        </property>
        <!-- 为指定数据源RoutingDataSource注入默认的数据源-->
        <property name="defaultTargetDataSource" ref="orclDataSource"/>
    </bean>

4. spring整合

<!--hibernate start-->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">${dataSource.hibernate.dialect}</prop>
				<prop key="hibernate.connection.useUnicode">true</prop>
				<prop key="hibernate.connection.characterEncoding">utf-8</prop>
				<prop key="hibernate.show_sql">${dataSource.hibernate.show_sql}</prop>
				<prop key="hibernate.jdbc.fetch_size">50</prop>
			</props>
		</property>
		<property name="packagesToScan">
			<list>
				<value>org.thcic.ejw.sys.vo</value>
				<value>org.thcic.ejw.purchase.setting.vo</value>
				<value>org.thcic.ejw.purchase.inquiry.vo</value>
				<value>org.thcic.ejw.purchase.notice.vo</value>
				<value>org.thcic.ejw.purchase.bid.vo</value>
				<value>org.thcic.ejw.purchase.report.vo</value>
            </list>
        </property>
	</bean>

  

5.双jdbcTemplate配置

<!--jdbcTemplate start-->
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" abstract="false"
        lazy-init="false" autowire="default" >
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <bean id="mysqlJdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" abstract="false"
        lazy-init="false" autowire="default" >
        <property name="dataSource" ref="mysqlDataSource"></property>
    </bean>

  

6.使用数据源

/*jdbcTemplate的使用*/
@Autowired
    @Qualifier("oracleJdbcTemplate")
    private JdbcTemplate dbTwojdbcTemplate;

    @Autowired
    @Qualifier("mysqlJdbcTemplate")
    private JdbcTemplate dbOneJdbcTemplate;

/*数据源切换*/
//获取数据源类型
DataSourceHolder.getDataSourceType();
//设置为 db1 的数据源
DataSourceHolder.setDataSourceType("db1");
//设置为 db2 的数据源
DataSourceHolder.setDataSourceType("db2");

  

原文地址:https://www.cnblogs.com/HHR-SUN/p/11187408.html

时间: 2024-10-24 18:06:54

双数据源配置(一个项目中链接两个数据库)的相关文章

VS编译linux项目生成静态库并在另一个项目中静态链接的方法

VS2017也推出很久了,在单位的时候写linux的服务端程序只能用vim,这让用惯了IDE的我很难受. 加上想自己撸一套linux上的轮子,决定用VS开工远程编写调试linux程序. 在windows下编写静态库并在另一个项目中引用很简单 新建项目的时候选择静态库,进去把代码撸好,即可编译出静态库*.lib 随后在希望使用该静态库的项目中设置一下链接器"附加库目录"为"../Debug"(和你的输出路径有关),然后添加"附加依赖项"静态库名.l

最近一个项目中关于NGUI部分的总结

最近一个项目中关于NGUI部分的总结           在自己最近的一个项目中,软件的界面部分使用了NGUI来进行制作.在制作过程中,遇到了一些问题,也获取了一些经验,总结下来,作为日后的积累. 1.NGUI图集的使用. 此次是第一个自己正儿八经的制作完整图集的项目,感受颇深.在使用NGUI制作界面时,图集的选用是一个关键,因为它直接关系到了drawcall的数量.最好就是自始至终都只使用同一个图集中的元素,这样的话,在界面制作上drawcall的消耗就只会受到Panel的划分以及字体与图集的

(转)最近一个项目中关于NGUI部分的总结(深度和drawCall)

在自己最近的一个项目中,软件的界面部分使用了NGUI来进行制作.在制作过程中,遇到了一些问题,也获取了一些经验,总结下来,作为日后的积累. 1.NGUI图集的使用. 此次是第一个自己正儿八经的制作完整图集的项目,感受颇深.在使用NGUI制作界面时,图集的选用是一个关键,因为它直接关系到了drawcall的数量.最好就是自始至终都只使用同一个图集中的元素,这样的话,在界面制作上drawcall的消耗就只会受到Panel的划分以及字体与图集的混合使用这两部分的影响. 在制作图集时,可以分为两个制作方

程序员面试100题之十:快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值(转)

能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解. 假如有如下的两个数组,如图所示: 5,6,1,4,7,9,8 给定Sum= 10 1,5,6,7,8,9 给定Sum= 10 分析与解法 这个题目不是很难,也很容易理解.但是要得出高效率的解法,还是需要一番思考的. 解法一 一个直接的解法就是穷举:从数组中任意取出两个数字,计算两者之和是否为给定的数字. 显然其时间复杂度为N(N-1)/2即O(N^2).这个算法很简

JS 从一个字符串中截取两个字符串之间的字符串

/************************************************* 函数说明:从一个字符串中截取 两个字符串之间的字符串 参数说明:src_str 原串, start_str_loc开始查找的字符串, start_str起始字符串 end_str结束字符串 dep :两个字符串之间的字符串 /************************************************/ function analysysRespParam(src_str,s

ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法

ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法 语法 第一种: 通过使用Oracle语句块  --指定文档所有部门都能查看 declare cursor TABLE_DEPT is SELECT ID,UNAME from g_users where utype=2 and STATUS>-1; begin for c in TABLE_DEPT loop INSERT INTO G_KNOWDOCRIGHT(RID,DIRID,DOCID,USERID) VALUES(SYS

vs2010 C# 如何将类做成DLL 再从另一个项目中使用这个类

vs2010 C# 如何将类做成DLL 再从另一个项目中使用这个类 2011-10-20 12:00 486人阅读 评论(0) 收藏 举报 一.将类做成DLL 方法一: 你可以通过在命令行下用命令将以 xxx.cs的文件直接生成为DLL文件 方法二:通过visual studio2010 新建立一个项目,选择为“类库”,然后在这里可以写用户自己的类. 二.引用DLL 在项目中,打开“解决方案资源管理器”,右键“引用”-->“添加引用”-->“浏览” 然后从主机的目录中找到DLL 之后在你的项目

一个Activity中使用两个layout实例

package com.sbs.aas2l; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; imp

可考虑在你下一个项目中使用的 50 个 Bootstrap 插件

可考虑在你下一个项目中使用的 50 个 Bootstrap 插件 作者 jopen 2014-11-12 09:54:16 阅读目录 1. Bootstrap Multiselect 2. Bootstrap Dialog 3. Bootstrap Confirmation 4. Bootstrap Tag Input 5. Bootstrap File Input 6. Bootstrap WYSIWYG 7. Bootstrap Select 8. pNotify 9. Bootstrap