zoukankan      html  css  js  c++  java
  • solr dataimport 数据导入源码分析(七)

    solr dataimport 数据导入源码分析(五) 提到了contextimpl类调用DataImporter对象获取数据源 

     contextimpl.java

     private DataSource ds;
      

    private DataImporter dataImporter;

       

    @Override

      public DataSource getDataSource() {

        if (ds != nullreturn ds;

        if(entity == nullreturn  null;

        if (entity.dataSrc == null) {

          entity.dataSrc = dataImporter.getDataSourceInstance(entity, entity.dataSource, this);

        }

        if (entity.dataSrc != null && docBuilder != null && docBuilder.verboseDebug &&

                 Context.FULL_DUMP.equals(currentProcess())) {

          //debug is not yet implemented properly for deltas

          entity.dataSrc = docBuilder.getDebugLogger().wrapDs(entity.dataSrc);

        }

        return entity.dataSrc;

      }

    我们跟踪源码,在DataImporter.java里面调用了jdbcDataSource对象方法

    参考solr dataimport 数据导入源码分析(二) DataImporter.java 源码

    DataImporter.java  

     DataSource getDataSourceInstance(DataConfig.Entity key, String name, Context ctx) {

        Properties p = dataSourceProps.get(name);
        if (p == null)
          p = config.dataSources.get(name);
        if (p == null)
          p = dataSourceProps.get(null);// for default data source
        if (p == null)
          p = config.dataSources.get(null);
        if (p == null)  
          throw new DataImportHandlerException(SEVERE,
                  "No dataSource :" + name + " available for entity :"
                          + key.name);
        String type = p.getProperty(TYPE);
        DataSource dataSrc = null;
        if (type == null) {
          dataSrc = new JdbcDataSource();
        } else {
          try {
            dataSrc = (DataSource) DocBuilder.loadClass(type, getCore()).newInstance();
          } catch (Exception e) {
            wrapAndThrow(SEVERE, e, "Invalid type for data source: " + type);
          }
        }
        try {
          Properties copyProps = new Properties();
          copyProps.putAll(p);
          Map<String, Object> map = ctx.getRequestParameters();
          if (map.containsKey("rows")) {
            int rows = Integer.parseInt((String) map.get("rows"));
            if (map.containsKey("start")) {
              rows += Integer.parseInt((String) map.get("start"));
            }
            copyProps.setProperty("maxRows", String.valueOf(rows));
          }
          dataSrc.init(ctx, copyProps);
        } catch (Exception e) {
          wrapAndThrow(SEVERE, e, "Failed to initialize DataSource: " + key.dataSource);
        }
        return dataSrc;
      }


  • 相关阅读:
    (转)分布式加载网站的静态文件
    (转)一步一步Asp.Net MVC系列_权限管理设计起始篇
    (转)SQL Server复制入门(一)复制简介
    (转)【配置属性】—Entity Framework实例详解
    (转)动态Entity Framework查询:Dynamic Query 介绍
    (转)用扩展方法优化多条件查询
    (转)一步一步Asp.Net MVC系列_权限管理之权限控制
    (转 )Entity Framework Code First使用者的福音 EF Power Tool使用记之二(问题探究)
    (转)【工欲善其事必先利其器】—Entity Framework实例详解
    (转)C#/winform 腾讯QQ注册
  • 原文地址:https://www.cnblogs.com/chenying99/p/2677202.html
Copyright © 2011-2022 走看看