• jeesite添加多数据源


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

    Java代码  收藏代码
    1. #mysql database setting  
    2. jdbc.type=mysql  
    3. jdbc.driver=com.mysql.jdbc.Driver  
    4. jdbc.url=jdbc:mysql://localhost:3306/website?useUnicode=true&characterEncoding=utf-8  
    5. jdbc.username=root  
    6. jdbc.password=root  
    7.    
    8. #mysql2 database setting  
    9. #jdbc.type=mysql  
    10. #jdbc.driver=com.mysql.jdbc.Driver  
    11. jdbc.url2=jdbc:mysql://218.28.123.82:3306/stkcentervideosys?useUnicode=true&characterEncoding=utf-8  
    12. jdbc.username2=root  
    13. jdbc.password2=root  



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

    第一处(spring-context.xml): 

    Java代码  收藏代码
    1. <!-- 第一个数据源配置, 使用 BoneCP 数据库连接池 -->  
    2.     <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">   
    3.         <!-- 数据源驱动类可不写,Druid默认会自动根据URL识别DriverClass -->  
    4.         <property name="driverClassName" value="${jdbc.driver}" />  
    5.            
    6.         <!-- 基本属性 url、user、password -->  
    7.         <property name="url" value="${jdbc.url}" />  
    8.         <property name="username" value="${jdbc.username}" />  
    9.         <property name="password" value="${jdbc.password}" />  
    10.            
    11.         <!-- 配置初始化大小、最小、最大 -->  
    12.         <property name="initialSize" value="${jdbc.pool.init}" />  
    13.         <property name="minIdle" value="${jdbc.pool.minIdle}" />   
    14.         <property name="maxActive" value="${jdbc.pool.maxActive}" />  
    15.            
    16.         <!-- 配置获取连接等待超时的时间 -->  
    17.         <property name="maxWait" value="60000" />  
    18.            
    19.         <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->  
    20.         <property name="timeBetweenEvictionRunsMillis" value="60000" />  
    21.            
    22.         <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->  
    23.         <property name="minEvictableIdleTimeMillis" value="300000" />  
    24.            
    25.         <property name="validationQuery" value="${jdbc.testSql}" />  
    26.         <property name="testWhileIdle" value="true" />  
    27.         <property name="testOnBorrow" value="false" />  
    28.         <property name="testOnReturn" value="false" />  
    29.            
    30.         <!-- 打开PSCache,并且指定每个连接上PSCache的大小(Oracle使用)  
    31.         <property name="poolPreparedStatements" value="true" />  
    32.         <property name="maxPoolPreparedStatementPerConnectionSize" value="20" /> -->  
    33.            
    34.         <!-- 配置监控统计拦截的filters -->  
    35.         <property name="filters" value="stat" />   
    36.     </bean>  
    37.     <!-- 第二个数据源配置, 使用 BoneCP 数据库连接池 -->  
    38.     <bean id="dataSource2" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">   
    39.         <!-- 数据源驱动类可不写,Druid默认会自动根据URL识别DriverClass -->  
    40.         <property name="driverClassName" value="${jdbc.driver}" />  
    41.            
    42.         <!-- 基本属性 url、user、password -->  
    43.         <property name="url" value="${jdbc.url2}" />  
    44.         <property name="username" value="${jdbc.username2}" />  
    45.         <property name="password" value="${jdbc.password2}" />  
    46.            
    47.         <!-- 配置初始化大小、最小、最大 -->  
    48.         <property name="initialSize" value="${jdbc.pool.init}" />  
    49.         <property name="minIdle" value="${jdbc.pool.minIdle}" />   
    50.         <property name="maxActive" value="${jdbc.pool.maxActive}" />  
    51.            
    52.         <!-- 配置获取连接等待超时的时间 -->  
    53.         <property name="maxWait" value="60000" />  
    54.            
    55.         <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->  
    56.         <property name="timeBetweenEvictionRunsMillis" value="60000" />  
    57.            
    58.         <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->  
    59.         <property name="minEvictableIdleTimeMillis" value="300000" />  
    60.            
    61.         <property name="validationQuery" value="${jdbc.testSql}" />  
    62.         <property name="testWhileIdle" value="true" />  
    63.         <property name="testOnBorrow" value="false" />  
    64.         <property name="testOnReturn" value="false" />  
    65.            
    66.         <!-- 打开PSCache,并且指定每个连接上PSCache的大小(Oracle使用)  
    67.         <property name="poolPreparedStatements" value="true" />  
    68.         <property name="maxPoolPreparedStatementPerConnectionSize" value="20" /> -->  
    69.            
    70.         <!-- 配置监控统计拦截的filters -->  
    71.         <property name="filters" value="stat" />   
    72.     </bean>  
    73.     <!-- 动态数据源 -->  
    74.     <bean id="dynamicDataSource" class="com.thinkgem.jeesite.common.db.DynamicDataSource">  
    75.         <property name="defaultTargetDataSource" ref="dataSource"/>  
    76.         <property name="targetDataSources">  
    77.             <map>  
    78.                 <entry key="dataSource" value-ref="dataSource"/>  
    79.                 <entry key="dataSource2" value-ref="dataSource2"/>  
    80.             </map>  
    81.         </property>  
    82.     </bean>  



    第二处(spring-context.xml):修改为dynamicDataSource 

    Java代码  收藏代码
    1. <!-- MyBatis begin  -->  
    2.     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
    3.         <property name="dataSource" ref="dynamicDataSource"/>  
    4.         <property name="typeAliasesPackage" value="com.thinkgem.jeesite"/>  
    5.         <property name="typeAliasesSuperType" value="com.thinkgem.jeesite.common.persistence.BaseEntity"/>  
    6.         <property name="mapperLocations" value="classpath:/mappings/**/*.xml"/>  
    7.         <property name="configLocation" value="classpath:/mybatis-config.xml"></property>  
    8.     </bean>  



    第三处(spring-context.xml):修改为dynamicDataSource 

    Java代码  收藏代码
    1. <!-- 定义事务 -->  
    2. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
    3.     <property name="dataSource" ref="dynamicDataSource" />  
    4. </bean>  



    3.添加DynamicDataSource.java (com.thinkgem.jeesite.common.db.DynamicDataSource.java) 

    Java代码  收藏代码
    1. package com.thinkgem.jeesite.common.db;  
    2.    
    3. import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;  
    4.    
    5. /** 
    6.  * Mysql 多数据源切换 
    7.  * 
    8.  * @author sa 
    9.  * @version V1.0 
    10.  * @Description: 
    11.  * @date 2015/10/09 
    12.  */  
    13. public class DynamicDataSource extends AbstractRoutingDataSource {  
    14.     private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();    
    15.          
    16.     /**  
    17.      *   
    18.      * @author sa  
    19.      * @date 2012-5-18 下午4:06:44  
    20.      * @return the currentLookupKey  
    21.      */    
    22.     public static String getCurrentLookupKey() {    
    23.         return (String) contextHolder.get();    
    24.     }    
    25.      
    26.     /**  
    27.      *   
    28.      * @author sa  
    29.      * @date 2012-5-18 下午4:06:44  
    30.      * @param currentLookupKey  
    31.      *            the currentLookupKey to set  
    32.      */    
    33.     public static void setCurrentLookupKey(String currentLookupKey) {    
    34.         contextHolder.set(currentLookupKey);    
    35.     }    
    36.      
    37.     /*  
    38.      * (non-Javadoc)  
    39.      *   
    40.      * @see  
    41.      * org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource#  
    42.      * determineCurrentLookupKey()  
    43.      */    
    44.     @Override    
    45.     protected Object determineCurrentLookupKey() {    
    46.         return getCurrentLookupKey();    
    47.     }    
    48. }  



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

    Java代码  收藏代码
    1. //切换数据源dataSource2,默认数据源dataSource  
    2.         DynamicDataSource.setCurrentLookupKey("dataSource2");  
    3.         List list = stkScenerySpotService.findAll();  
    4.         model.addAttribute("list",list);  
    5.         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很简单 

    Java代码  收藏代码
      1. <?xml version="1.0" encoding="UTF-8" ?>  
      2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
      3. <mapper namespace="com.thinkgem.jeesite.modules.cms.dao.StkScenerySpotDao">  
      4.     <sql id="stkScenerySpotColumns">  
      5.         a.Spot_Id AS "id",  
      6.         a.CamId AS "camId",  
      7.         a.Name AS "name",  
      8.         a.Comment AS "commnet"  
      9.     </sql>  
      10.     <sql id="stkScenerySpotJoins">  
      11.     </sql>  
      12.        
      13.     <select id="findList" resultType="StkScenerySpot">  
      14.         SELECT   
      15.             <include refid="stkScenerySpotColumns"/>  
      16.         FROM stk_scenery_spot a  
      17.         <include refid="stkScenerySpotJoins"/>  
      18.         <where>  
      19.             1 = 1   
      20.         </where>  
      21.         <choose>  
      22.                
      23.             <otherwise>  
      24.                 ORDER BY a.Spot_Id DESC  
      25.             </otherwise>  
      26.         </choose>  
      27.     </select>  
      28. </mapper>  
  • 相关阅读:
    n-1位数
    关于VC预定义常量_WIN32,WIN32,_WIN64
    python中的闭包
    TCP粘包, UDP丢包, nagle算法
    C++中 explicit的用法
    为什么mysql索引要使用B+树,而不是B树,红黑树
    屏障和屏障属性
    带有超时的读写锁
    pthread_mutex_timedlock
    段错误以及调试方式
  • 原文地址:https://www.cnblogs.com/wjlwo2ni/p/11040587.html
Copyright © 2020-2023  润新知