博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jeesite1.X 集成多数据源
阅读量:5950 次
发布时间:2019-06-19

本文共 4094 字,大约阅读时间需要 13 分钟。

hot3.png

网上看了几个例子,都是相同数据源的动态切换,如果不是同一种数据库类型,分页查询就出问题。经过研究解决问题。

  1. jeesite.properties配置多数数据源地址,这里以mysql5.7sqlserver2008版本为例子
    #mysql database settingjdbc.type=mysql#jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/nkydsj?useUnicode=true&characterEncoding=utf-8jdbc.username=rootjdbc.password=111111#mssql database settings#jdbc.type2=mssqljdbc.url2=jdbc:sqlserver://localhost:1433;DatabaseName=NXQiXiangjdbc.username2=sajdbc.password2=111111#pool settingsjdbc.pool.init=1jdbc.pool.minIdle=3jdbc.pool.maxActive=20#jdbc.testSql=SELECT 'x'jdbc.testSql=SELECT 'x' FROM DUALjdbc.testSql2 = SELECT getdate()
  2.  创建动态数据源类
    package com.thinkgem.jeesite.common.db;import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;public class DynamicDataSource extends AbstractRoutingDataSource {    private static final ThreadLocal
    contextHolder = new ThreadLocal
    (); /** * @return the currentLookupKey * @author sa * @date 2012-5-18 下午4:06:44 */ public static String getCurrentLookupKey() { return (String) contextHolder.get(); } /** * @param currentLookupKey the currentLookupKey to set * @author sa * @date 2012-5-18 下午4:06:44 */ 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(); }}

     

  3. 修改spring-context.xml

     

     

  4. 创建方言动态切换类 com.thinkgem.jeesite.common.db.DbDialectFoactory,暂时只用sqlserver2008和mysql,所以只写两个

     

    package com.thinkgem.jeesite.common.db;import com.thinkgem.jeesite.common.persistence.dialect.Dialect;import com.thinkgem.jeesite.common.persistence.dialect.db.MySQLDialect;import com.thinkgem.jeesite.common.persistence.dialect.db.SQLServer2005Dialect;public class DbDialectFoactory {    public static Dialect createDbDialect(String type) {        if ("sqlserver".equals(type)) {            return new SQLServer2005Dialect();        }        else{            return new MySQLDialect();        }    }}

     

  5. 修改框架自带类 com.thinkgem.jeesite.common.persistence.interceptor.PaginationInterceptor

    67行添加如下两行代码,并修改原来的圆圈地方:
    a090d40837f781f3ef72be4730f4f7c52a5.jpg

  6. pom.xml 添加sqlserver2008驱动和依赖

    com.microsoft.sqlserver
    sqljdbc4
    4.0
    com.github.jsqlparser
    jsqlparser
    1.2

     

  7. mybatis sqlserver 分页查询sql,findlist方法

    1f40ca5cecaf8f2c67bda0c0ef2778f35e9.jpg

  8. 动态调用方式:

     

    @RequestMapping(value = {"api/list", ""})    @ResponseBody    public ResponseEntity
    list(WeatherCondition weatherCondition, HttpServletRequest request, HttpServletResponse response, Model model) { //切换数据源sqlserver,默认数据源mysql DynamicDataSource.setCurrentLookupKey("sqlserver"); Page
    page = weatherConditionService.findPage(new Page
    (request, response), weatherCondition); DynamicDataSource.setCurrentLookupKey("mysql"); return new ResponseEntity(page, HttpStatus.OK); }

     

 

转载于:https://my.oschina.net/matt0614/blog/2254180

你可能感兴趣的文章