多数据源(sql server 2008,二个数据库不ip,)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 自动扫描 ,多个包以 逗号分隔-->
<context:component-scan base-package="com.yunzhijia.cloudflow" />
<!-- 引入配置文件 -->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:jdbc.properties" />
</bean>
<!-- 数据库测试 -->
<bean id="dataSource_cs" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${dataSource.cs.driver}" />
<property name="url" value="${dataSource.cs.url}" />
<property name="username" value="${dataSource.cs.username}" />
<property name="password" value="${dataSource.cs.password}" />
<property name="initialSize" value="${dataSource.cs.initialSize}"></property>
<property name="maxActive" value="${dataSource.cs.maxActive}"></property>
<property name="maxIdle" value="${dataSource.cs.maxIdle}"></property>
<property name="minIdle" value="${dataSource.cs.minIdle}"></property>
<property name="maxWait" value="${dataSource.cs.maxWait}"></property>
</bean>
<!-- 数据库福清 -->
<bean id="dataSource_fq" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${dataSource.fq.driver}" />
<property name="url" value="${dataSource.fq.url}" />
<property name="username" value="${dataSource.fq.username}" />
<property name="password" value="${dataSource.fq.password}" />
<property name="initialSize" value="${dataSource.fq.initialSize}"></property>
<property name="maxActive" value="${dataSource.fq.maxActive}"></property>
<property name="maxIdle" value="${dataSource.fq.maxIdle}"></property>
<property name="minIdle" value="${dataSource.fq.minIdle}"></property>
<property name="maxWait" value="${dataSource.fq.maxWait}"></property>
</bean>
<!-- 数据库河南 -->
<bean id="dataSource_hn" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${dataSource.hn.driver}" />
<property name="url" value="${dataSource.hn.url}" />
<property name="username" value="${dataSource.hn.username}" />
<property name="password" value="${dataSource.hn.password}" />
<property name="initialSize" value="${dataSource.hn.initialSize}"></property>
<property name="maxActive" value="${dataSource.hn.maxActive}"></property>
<property name="maxIdle" value="${dataSource.hn.maxIdle}"></property>
<property name="minIdle" value="${dataSource.hn.minIdle}"></property>
<property name="maxWait" value="${dataSource.hn.maxWait}"></property>
</bean>
<bean id="dataSource" class="com.yunzhijia.cloudflow.common.utils.ThreadLocalRountingDataSource">
<property name="defaultTargetDataSource" ref="dataSource_cs"/>
<property name="targetDataSources">
<map key-type="com.yunzhijia.cloudflow.common.utils.DataSources">
<entry key="DATASOURCE_CS" value-ref="dataSource_cs"/>
<entry key="DATASOURCE_FQ" value-ref="dataSource_fq"/>
<entry key="DATASOURCE_HN" value-ref="dataSource_hn"/>
</map>
</property>
</bean>
<!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 自动扫描mapping.xml文件 -->
<property name="mapperLocations" value="classpath:com/yunzhijia/cloudflow/mapping/**/*.xml"></property>
<!-- 指向mybatis配置文件 -->
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
</bean>
<!-- DAO接口所在包名,Spring会自动查找其下的类 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.yunzhijia.cloudflow.dao" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
<!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 开启事务控制的注解支持 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
</beans>
========================================
package com.yunzhijia.cloudflow.common.utils;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
/**
* 数据源切换
* 新建ThreadLocalRountingDataSource继承AbstractRoutingDataSource,实现切换
* @author gzh
*
*/
public class ThreadLocalRountingDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return DataSourceTypeManager.get();
}
}
========================================
package com.yunzhijia.cloudflow.common.utils;
import org.apache.log4j.Logger;
/**
* 数据源切换
* @author
*
*/
public class DataSourceTypeManager {
private static final Logger log = Logger.getLogger(DataSourceTypeManager.class);
private static final ThreadLocal<DataSources> dataSourceTypes = new ThreadLocal<DataSources>(){
@Override
protected DataSources initialValue(){
log.info("==>初始化数据源:"+DataSources.DATASOURCE_CS);
return DataSources.DATASOURCE_CS;
}
};
/**
* 取DataSources
* @return DataSources
*/
public static DataSources get(){
log.info("==>取数据源:"+dataSourceTypes.get());
return dataSourceTypes.get();
}
/**
* 设置DataSources源
* @param dataSourceType
*/
public static void set(DataSources dataSourceType){
log.info("==>设置数据源:"+dataSourceType);
dataSourceTypes.set(dataSourceType);
}
/**
* 重置数据库源
*/
public static void reset(){
log.info("==>重置数据源:"+DataSources.DATASOURCE_CS);
dataSourceTypes.set(DataSources.DATASOURCE_CS);
}
}
================================
package com.yunzhijia.cloudflow.common.utils;
/**
* 配置数据库切换
* @author
* 注:注意此枚举值必须对应spring配置文件各数据源的别名
*/
public enum DataSources {
DATASOURCE_CS,DATASOURCE_FQ,DATASOURCE_HN
}
多数据源(sql server 2008,二个数据库不ip,)的更多相关文章
- 基于Sql Server 2008的分布式数据库的实践(二)
原文 基于Sql Server 2008的分布式数据库的实践(二) 从Win7连接Win2003的Sql Server 2008 1.新建链接服务器链接到Win2003的Sql Server 2008 ...
- SQL Server 2008 R2 主从数据库同步
一.准备工作: 主数据库服务器: OS:Windows Server 2008 R2 DB: SQL Server 2008 R2 Hostname : CXMasterDB IP: 192.1 ...
- SQL Server 2008 R2 主从数据库同步设置
一.准备工作: 主数据库服务器: OS:Windows Server 2008 R2 DB: SQL Server 2008 R2 Hostname : CXMasterDB IP: 192.1 ...
- 基于Sql Server 2008的分布式数据库的实践(五)
原文 基于Sql Server 2008的分布式数据库的实践(五) 程序设计 ------------------------------------------------------------- ...
- SQL Server 2008 维护计划实现数据库备份
SQL Server 2008 维护计划实现数据库备份(最佳实践) 2013-08-29 09:08 by 听风吹雨, 173 阅读, 2 评论, 收藏, 编辑 一.背景 之前写过一篇关于备份的文章: ...
- SQL SERVER 2008 R2 还原数据库3154错误
1.SQL SERVER 2008 在还原数据库时,会报错. 提示错误:"备份集中的数据库备份与现有的 '***' 数据库不同.RESTORE DATABASE 正在异常终止. (Micro ...
- 基于Sql Server 2008的分布式数据库的实践(四)
原文 基于Sql Server 2008的分布式数据库的实践(四) 数据库设计 1.E-R图 2.数据库创建 Win 7 1 create database V3 Win 2003 1 create ...
- 基于Sql Server 2008的分布式数据库的实践(三)
原文 基于Sql Server 2008的分布式数据库的实践(三) 配置PHP 1.打开PHP配置文件,找到extension=php_mssql.dll,将前面的注释符号去掉 2.找到mssql.s ...
- 基于Sql Server 2008的分布式数据库的实践(一)
原文 基于Sql Server 2008的分布式数据库的实践(一) 配置Sql Server 2008(Win7) 1.打开SQL server2012,使用windows身份登录 2.登录后,右键选 ...
- SQL Server 2008 /SQL Server 2008 R2 配置数据库邮件
原文:SQL Server 2008 /SQL Server 2008 R2 配置数据库邮件 从2005开始,就引入了"数据库邮件"功能.并且取代SQLMail.原有SQLMail ...
随机推荐
- 几家大的券商的PB系统以及算法交易概况大致是怎样的?
PB的定位是托管-清算-交易.目前的PB系统方面的竞争点主要放在了交易环节(毕竟托管和清算没有多大的差异).目前的pb交易环节的技术提供有恒生.讯投.金证.同花顺等,以满足私募及高净值个人多样化交易和 ...
- Workflow License invalid!!
2019/08/23-17:02:16 >> INFO >> main >> org.hibernate.cfg.HbmBinder.bindRootPersist ...
- malloc和cmalloc
void *malloc(size_t size); 分配内存,但不会初始化,未使用内存不一定是0: void *calloc(size_t numElements,size_t sizeOfElem ...
- python获取csv文本的某行或某列数据
#coding = 'utf-8' import csv # 使用list,只能读取列,而且是全文读取,csv.reader会自动把CSV内容生成数组 ''' df = csv.reader(open ...
- Node.js实战1:创建一个新的Node项目。
你也许在猜专业的Node开发如何创建一个新项目. 有Npm在 ,这会非常简单. 虽然你可以创建一个JS文件,并执行:node file.js,但我建议你使用npm init来先创建一个node项目,这 ...
- mybatis一级缓存和二级缓存的使用
在mybatis中,有一级缓存和二级缓存的概念: 一级缓存:一级缓存 Mybatis的一级缓存是指SQLSession,一级缓存的作用域是SQLSession, Mabits默认开启一级缓存.在同一个 ...
- HTTP/2 最新漏洞,直指 Kubernetes!
Java技术栈 www.javastack.cn 优秀的Java技术公众号 在这个数据.应用横行的时代,漏洞的出现早已屡见不鲜.在尚未造成大面积危害之前,我们该如何做好防御措施?或许从过往经常发生漏洞 ...
- 嗨翻C语言--这里没有蠢问题(一)
问:card_name[0]是什么意思?答:它是用户输入的第一个字符.如果用户输入了10,那么card_name[0]就将是1.问:总是得用/*和*/写注释吗?答:如果你的编译器支持C99标准,就可以 ...
- 卷积神经网络(ConvNets)中卷积的实现
#include <iostream> #include <sstream> #include <fstream> #include <algorithm&g ...
- 基于RSA的前后端登陆密码加密JAVA实现(转)
RSA加密算法简介 SA加密算法是一种非对称加密算法.在公开密钥加密和电子商业中RSA被广泛使用.对极大整数做因数分解的难度决定了RSA算法的可靠性.换言之,对一极大整数做因数分解愈困难,RSA算法愈 ...