jeesite添加多数据源

[b]1.jeesite.properties 添加数据源信息,(url2,username2,pawwword2)[/b]

#mysql database setting
jdbc.type=mysql
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/website?useUnicode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=root

#mysql2 database setting
#jdbc.type=mysql
#jdbc.driver=com.mysql.jdbc.Driver
jdbc.url2=jdbc:mysql://218.28.123.82:3306/stkcentervideosys?useUnicode=true&characterEncoding=utf-8
jdbc.username2=root
jdbc.password2=root


[b]2.修改spring-context.xml(src/main/resources/),3处需要修改/添加[/b]

第一处(spring-context.xml):
<!-- 第一个数据源配置, 使用 BoneCP 数据库连接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<!-- 数据源驱动类可不写,Druid默认会自动根据URL识别DriverClass -->
<property name="driverClassName" value="${jdbc.driver}" />

<!-- 基本属性 url、user、password -->
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />

<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="${jdbc.pool.init}" />
<property name="minIdle" value="${jdbc.pool.minIdle}" />
<property name="maxActive" value="${jdbc.pool.maxActive}" />

<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait" value="60000" />

<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000" />

<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="300000" />

<property name="validationQuery" value="${jdbc.testSql}" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />

<!-- 打开PSCache,并且指定每个连接上PSCache的大小(Oracle使用)
<property name="poolPreparedStatements" value="true" />
<property name="maxPoolPreparedStatementPerConnectionSize" value="20" /> -->

<!-- 配置监控统计拦截的filters -->
<property name="filters" value="stat" />
</bean>
<!-- 第二个数据源配置, 使用 BoneCP 数据库连接池 -->
<bean id="dataSource2" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<!-- 数据源驱动类可不写,Druid默认会自动根据URL识别DriverClass -->
<property name="driverClassName" value="${jdbc.driver}" />

<!-- 基本属性 url、user、password -->
<property name="url" value="${jdbc.url2}" />
<property name="username" value="${jdbc.username2}" />
<property name="password" value="${jdbc.password2}" />

<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="${jdbc.pool.init}" />
<property name="minIdle" value="${jdbc.pool.minIdle}" />
<property name="maxActive" value="${jdbc.pool.maxActive}" />

<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait" value="60000" />

<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000" />

<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="300000" />

<property name="validationQuery" value="${jdbc.testSql}" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />

<!-- 打开PSCache,并且指定每个连接上PSCache的大小(Oracle使用)
<property name="poolPreparedStatements" value="true" />
<property name="maxPoolPreparedStatementPerConnectionSize" value="20" /> -->

<!-- 配置监控统计拦截的filters -->
<property name="filters" value="stat" />
</bean>
<!-- 动态数据源 -->
<bean id="dynamicDataSource" class="com.thinkgem.jeesite.common.db.DynamicDataSource">
<property name="defaultTargetDataSource" ref="dataSource"/>
<property name="targetDataSources">
<map>
<entry key="dataSource" value-ref="dataSource"/>
<entry key="dataSource2" value-ref="dataSource2"/>
</map>
</property>
</bean>


第二处(spring-context.xml):修改为dynamicDataSource
<!-- MyBatis begin  -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dynamicDataSource"/>
<property name="typeAliasesPackage" value="com.thinkgem.jeesite"/>
<property name="typeAliasesSuperType" value="com.thinkgem.jeesite.common.persistence.BaseEntity"/>
<property name="mapperLocations" value="classpath:/mappings/**/*.xml"/>
<property name="configLocation" value="classpath:/mybatis-config.xml"></property>
</bean>


第三处(spring-context.xml):修改为dynamicDataSource
<!-- 定义事务 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dynamicDataSource" />
</bean>


[b]3.添加DynamicDataSource.java (com.thinkgem.jeesite.common.db.DynamicDataSource.java)[/b]

package com.thinkgem.jeesite.common.db;

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

/**
* Mysql 多数据源切换
*
* @author sa
* @version V1.0
* @Description:
* @date 2015/10/09
*/
public class DynamicDataSource extends AbstractRoutingDataSource {
private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();

/**
*
* @author sa
* @date 2012-5-18 下午4:06:44
* @return the currentLookupKey
*/
public static String getCurrentLookupKey() {
return (String) contextHolder.get();
}

/**
*
* @author sa
* @date 2012-5-18 下午4:06:44
* @param currentLookupKey
* the currentLookupKey to set
*/
public static void setCurrentLookupKey(String currentLookupKey) {
contextHolder.set(currentLookupKey);
}

/*
* (non-Javadoc)
*
* @see
* org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource#
* determineCurrentLookupKey()
*/
@Override
protected Object determineCurrentLookupKey() {
return getCurrentLookupKey();
}
}


[b]4.在Controller中切换(在service层切换不管用,还没查原因)[/b]

//切换数据源dataSource2,默认数据源dataSource
DynamicDataSource.setCurrentLookupKey("dataSource2");
List list = stkScenerySpotService.findAll();
model.addAttribute("list",list);
DynamicDataSource.setCurrentLookupKey("dataSource");


注:

要对切换的数据源dataSource2 中的表手动写映射和三层
实体:com.thinkgem.jeesite.modules.cms.entity.StkScenerySpot.java
service:com.thinkgem.jeesite.modules.cms.service.StkScenerySpotService.java
mapper:StkScenerySpotDao.xml (src/main/resources/modules/cms)

我只查所有,所以sql很简单
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.thinkgem.jeesite.modules.cms.dao.StkScenerySpotDao">
<sql id="stkScenerySpotColumns">
a.Spot_Id AS "id",
a.CamId AS "camId",
a.Name AS "name",
a.Comment AS "commnet"
</sql>
<sql id="stkScenerySpotJoins">
</sql>

<select id="findList" resultType="StkScenerySpot">
SELECT
<include refid="stkScenerySpotColumns"/>
FROM stk_scenery_spot a
<include refid="stkScenerySpotJoins"/>
<where>
1 = 1
</where>
<choose>

<otherwise>
ORDER BY a.Spot_Id DESC
</otherwise>
</choose>
</select>
</mapper>


效果:
jeesite数据库表
[img]http://dl2.iteye.com/upload/attachment/0112/2525/52a1bcf6-69e3-389a-a7e5-db9ab684562e.jpg[/img]

datasource2数据表
[img]http://dl2.iteye.com/upload/attachment/0112/2527/f01c37c0-9679-3d16-9323-00554116d090.jpg[/img]

获取数据
[img]http://dl2.iteye.com/upload/attachment/0112/2529/15cca972-8989-35f2-bd7d-65319c77f242.png[/img]

前端展示
[img]http://dl2.iteye.com/upload/attachment/0112/2531/2f9eed55-7a68-3cd8-ab26-a7acf1297b42.png[/img]

datasource2数据表中的内容
[img]http://dl2.iteye.com/upload/attachment/0112/2533/763084a4-5a03-3d92-b11e-49fd7ac89090.png[/img]

参考资料:http://www.hifreud.com/2015/02/25/07-spring-datasources/
http://www.cnblogs.com/digdeep/p/4512368.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值