Progr1mmer 6 gadi atpakaļ
vecāks
revīzija
3035c63fd1

+ 2 - 2
commons/utils/src/main/java/com/yihu/utils/lang/SpringContext.java

@ -1,4 +1,4 @@
package com.yihu.utils.lang;
package com.yihu.utils.context;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
@ -15,7 +15,7 @@ import org.springframework.util.ClassUtils;
 * @created 12-05-2015 17:47:55
 */
@Component
public class SpringContext implements ApplicationContextAware {
public class SpringApplicationContext implements ApplicationContextAware {
    private static ApplicationContext springContext = null;
    /**

+ 37 - 0
elasticsearch-jest-starter/pom.xml

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>jkzl-starter</artifactId>
        <groupId>com.yihu</groupId>
        <version>2.0.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>elasticsearch-jest-starter</artifactId>
    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
        <dependency>
            <groupId>org.nlpcn</groupId>
            <artifactId>elasticsearch-sql</artifactId>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
        </dependency>
        <dependency>
            <groupId>io.searchbox</groupId>
            <artifactId>jest</artifactId>
        </dependency>
    </dependencies>
</project>

+ 150 - 0
elasticsearch-jest-starter/src/main/java/com/yihu/elasticsearch/jest/ElasticFactory.java

@ -0,0 +1,150 @@
package com.yihu.elasticsearch.jest;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.ElasticSearchDruidDataSourceFactory;
import com.yihu.elasticsearch.jest.properties.ElasticSearchPorperties;
import io.searchbox.client.JestClient;
import io.searchbox.client.JestClientFactory;
import io.searchbox.client.config.HttpClientConfig;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;
import javax.annotation.PostConstruct;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Arrays;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
/**
 * Created by chenweida on 2017/6/5.
 */
@Configuration
public class ElasticFactory {
    private static JestClientFactory factory = null;
    @Autowired
    private ElasticSearchPorperties elasticSearchPorperties;
//-----------------------------------jestClient----------------------------------------
    /**
     * @param "http://localhost:9200"
     * @return
     */
    public JestClient getJestClient() {
        if (factory == null) {
            //初始化链接
            init();
        }
        return factory.getObject();
    }
    /**
     * 初始化链接
     * 9200
     */
    @PostConstruct
    public void initAll() {
        try {
            init();
            initTranClient();
        } catch (UnknownHostException e) {
        }
    }
    public synchronized void init() {
        String[] hostArray = elasticSearchPorperties.getClusterNodesJest().split(",");
        // Construct a new Jest client according to configuration via factory
        factory = new JestClientFactory();
        HttpClientConfig httpClientConfig = new HttpClientConfig
                .Builder(Arrays.asList(hostArray))//http://59.61.92.90:9065,http://59.61.92.90:9067
                .multiThreaded(elasticSearchPorperties.getJestMultiThreaded())
                .maxTotalConnection(elasticSearchPorperties.getJestMaxTotalConnection())// 最大链接
                .maxConnectionIdleTime(elasticSearchPorperties.getJestMaxConnectionIdleTime(), TimeUnit.SECONDS)//链接等待时间
                .connTimeout(elasticSearchPorperties.getJestConnTimeout())
                .discoveryEnabled(elasticSearchPorperties.getJestDiscoveryEnabled())
                .readTimeout(elasticSearchPorperties.getJestReadTimeout())//60秒
                .build();
        factory.setHttpClientConfig(httpClientConfig);//得到链接
    }
    //-----------------------------------TransportClient----------------------------------------
    private TransportClient transportClient;
    public Client getTransportClient() {
        try {
            initTranClient();
            return transportClient;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 9300
     *
     * @throws UnknownHostException
     */
    private synchronized void initTranClient() throws UnknownHostException {
        if (transportClient == null) {
            String[] hosts = elasticSearchPorperties.getClusterNodes().split(",");
            Settings settings = Settings.settingsBuilder()
                    .put("client.transport.sniff", elasticSearchPorperties.getJestDiscoveryEnabled())//开启嗅探功能
                    .put("cluster.name", StringUtils.isEmpty(elasticSearchPorperties.getClusterName()) ? "jkzl" : elasticSearchPorperties.getClusterName())//默认集群名字是jkzl
                    .build();
            transportClient = TransportClient.builder().settings(settings).build();
            for (String oneHost : hosts) {
                String[] hostAndport = oneHost.split(":");
                transportClient.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(hostAndport[0]), Integer.valueOf(hostAndport[1])));
            }
        }
    }
    /**
     * es连接池
     *
     * @return
     * @throws Exception
     */
    @Bean
    public DruidDataSource esDruidDataSource() {
        DruidDataSource druidDataSource = null;
        try {
            Properties properties = new Properties();
            properties.put("url", "jdbc:elasticsearch://" + elasticSearchPorperties.getClusterNodes().split(",")[0] + "/wlyy_quota_test");
            druidDataSource = (DruidDataSource) ElasticSearchDruidDataSourceFactory.createDataSource(properties);
            druidDataSource.setInitialSize(1);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return druidDataSource;
    }
    @Bean
    public ElasticsearchUtil elasticsearchUtil() {
        ElasticsearchUtil elasticsearchUtil = new ElasticsearchUtil();
        elasticsearchUtil.setElasticFactory(getTransportClient());
        return elasticsearchUtil;
    }
    @Bean
    public ElastricSearchHelper elastricSearchHelper() {
        ElastricSearchHelper elastricSearchHelper = new ElastricSearchHelper();
        elastricSearchHelper.setElasticsearchUtil(elasticsearchUtil());
        return elastricSearchHelper;
    }
}

+ 182 - 0
elasticsearch-jest-starter/src/main/java/com/yihu/elasticsearch/jest/ElasticsearchUtil.java

@ -0,0 +1,182 @@
package com.yihu.elasticsearch.jest;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.expr.SQLQueryExpr;
import com.alibaba.druid.sql.parser.SQLExprParser;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
import org.nlpcn.es4sql.domain.Select;
import org.nlpcn.es4sql.jdbc.ObjectResult;
import org.nlpcn.es4sql.jdbc.ObjectResultsExtractor;
import org.nlpcn.es4sql.parse.ElasticSqlExprParser;
import org.nlpcn.es4sql.parse.SqlParser;
import org.nlpcn.es4sql.query.AggregationQueryAction;
import org.nlpcn.es4sql.query.DefaultQueryAction;
import org.nlpcn.es4sql.query.SqlElasticSearchRequestBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * Created by chenweida on 2017/7/17.
 * SELECT town,townName,sum(result1) result1 FROM wlyy_quota_test
 * where quotaCode='1'
 * group by town,townName , date_histogram(field='quotaDate','interval'='week')
 */
public class ElasticsearchUtil {
    private Logger logger = LoggerFactory.getLogger(ElasticsearchUtil.class);
    private Client elasticFactory;
    /**
     * 执行sql查询es
     *
     * @param sql
     * @return
     */
    public List<Map<String, Object>> excuteDataModel(String sql) {
        List<Map<String, Object>> returnModels = new ArrayList<>();
        try {
            SQLExprParser parser = new ElasticSqlExprParser(sql);
            SQLExpr expr = parser.expr();
            SQLQueryExpr queryExpr = (SQLQueryExpr) expr;
//            if (parser.getLexer().token() != Token.EOF) {
//                throw new ParserException("illegal sql expr : " + sql);
//            }
            Select select = null;
            select = new SqlParser().parseSelect(queryExpr);
            //通过抽象语法树,封装成自定义的Select,包含了select、from、where group、limit等
            AggregationQueryAction action = null;
            DefaultQueryAction queryAction = null;
            SqlElasticSearchRequestBuilder requestBuilder = null;
            if (select.isAgg) {
                //包含计算的的排序分组的
                action = new AggregationQueryAction(elasticFactory, select);
                requestBuilder = action.explain();
            } else {
                //封装成自己的Select对象
                Client client = elasticFactory;
                queryAction = new DefaultQueryAction(client, select);
                requestBuilder = queryAction.explain();
            }
            SearchResponse response = (SearchResponse) requestBuilder.get();
            Object queryResult = null;
            if (sql.toUpperCase().indexOf("GROUP") != -1 || sql.toUpperCase().indexOf("SUM") != -1|| sql.toUpperCase().indexOf("COUNT(") != -1) {
                queryResult = response.getAggregations();
            } else {
                queryResult = response.getHits();
            }
            ObjectResult temp = new ObjectResultsExtractor(true, true, true).extractResults(queryResult, true);
            List<String> heads = temp.getHeaders();
            temp.getLines().stream().forEach(one -> {
                try {
                    Map<String, Object> oneMap = new HashMap<String, Object>();
                    for (int i = 0; i < one.size(); i++) {
                        String key = null;
                        Object value = one.get(i);
//                        if(value instanceof Double){
//                            Double valueTemp =Double.valueOf((Double)value);
//                            DecimalFormat df = new DecimalFormat("######0");
//                            value=df.format(valueTemp);
//                        }
                        key = heads.get(i);
                        oneMap.put(key, value);
                    }
                    returnModels.add(oneMap);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
        return returnModels;
    }
    /**
     * 只执行count语句
     * @param sql
     * @return
     */
    public Integer count(String sql) {
        List<Map<String, Object>> returnModels = new ArrayList<>();
        try {
            SQLExprParser parser = new ElasticSqlExprParser(sql);
            SQLExpr expr = parser.expr();
            SQLQueryExpr queryExpr = (SQLQueryExpr) expr;
//            if (parser.getLexer().token() != Token.EOF) {
//                throw new ParserException("illegal sql expr : " + sql);
//            }
            Select select = null;
            select = new SqlParser().parseSelect(queryExpr);
            //通过抽象语法树,封装成自定义的Select,包含了select、from、where group、limit等
            AggregationQueryAction action = null;
            DefaultQueryAction queryAction = null;
            SqlElasticSearchRequestBuilder requestBuilder = null;
            if (select.isAgg) {
                //包含计算的的排序分组的
                action = new AggregationQueryAction(elasticFactory, select);
                requestBuilder = action.explain();
            } else {
                //封装成自己的Select对象
                Client client = elasticFactory;
                queryAction = new DefaultQueryAction(client, select);
                requestBuilder = queryAction.explain();
            }
            SearchResponse response = (SearchResponse) requestBuilder.get();
            Object queryResult = null;
            if (sql.toUpperCase().indexOf("GROUP") != -1 || sql.toUpperCase().indexOf("SUM") != -1|| sql.toUpperCase().indexOf("COUNT(") != -1) {
                queryResult = response.getAggregations();
            } else {
                queryResult = response.getHits();
            }
            ObjectResult temp = new ObjectResultsExtractor(true, true, true).extractResults(queryResult, true);
            List<String> heads = temp.getHeaders();
            for(int j=0;j<temp.getLines().size();j++){
              List<Object>  one= temp.getLines().get(j);
                try {
                    Map<String, Object> oneMap = new HashMap<String, Object>();
                    for (int i = 0; i < one.size(); i++) {
                        String key = null;
                        Object value = one.get(i);
                        if(value instanceof Double){
                            Double valueTemp =Double.valueOf((Double)value);
                            DecimalFormat df = new DecimalFormat("######0");
                            value=df.format(valueTemp);
                            return Integer.parseInt(df.format(valueTemp));
                        }
                        key = heads.get(i);
                        oneMap.put(key, value);
                    }
                    returnModels.add(oneMap);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0;
    }
    public Client getElasticFactory() {
        return elasticFactory;
    }
    public void setElasticFactory(Client elasticFactory) {
        this.elasticFactory = elasticFactory;
    }
    public static void main(String[] args) {
        Double a =Double.valueOf(("3.3863237E7"));
        DecimalFormat df = new DecimalFormat("######0");
        System.out.println(Integer.parseInt(df.format(a)));
    }
}

+ 399 - 0
elasticsearch-jest-starter/src/main/java/com/yihu/elasticsearch/jest/ElastricSearchHelper.java

@ -0,0 +1,399 @@
package com.yihu.elasticsearch.jest;
import com.alibaba.fastjson.JSONObject;
import com.yihu.elasticsearch.jest.model.ESIDEntity;
import io.searchbox.client.JestClient;
import io.searchbox.client.JestResult;
import io.searchbox.core.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
 * Created by chenweida on 2017/6/2.
 */
public class ElastricSearchHelper {
    private ElasticsearchUtil elasticsearchUtil;
    private Logger logger = LoggerFactory.getLogger(ElastricSearchHelper.class);
    @Autowired
    private ElasticFactory elasticFactory;
    /**
     * 新增
     *
     * @param index
     * @param type
     * @param sms
     * @return
     */
    public Boolean save(String index, String type, List<Object> sms) {
        JestClient jestClient = null;
        try {
            //得到链接elasticFactory.getJestClient();
            jestClient = elasticFactory.getJestClient();
            int success = 0;
            int error = 0;
            Bulk.Builder bulk = new Bulk.Builder().defaultIndex(index).defaultType(type);
            for (Object obj : sms) {
                try {
                    Index indexObj = new Index.Builder(obj).build();
                    success++;
                    bulk.addAction(indexObj);
                } catch (Exception e) {
                    logger.error(e.getMessage());
                    error++;
                }
            }
            BulkResult br = jestClient.execute(bulk.build());
            logger.debug("save flag:" + br.isSucceeded());
            logger.debug("save success:" + success);
            logger.debug("save error:" + error);
            return br.isSucceeded();
        } catch (Exception e) {
            logger.error(" save error :" + e.getMessage());
        } finally {
            if (jestClient != null) {
                jestClient.shutdownClient();
            }
        }
        return null;
    }
    public Boolean save(String index, String type, String source) {
        JestClient jestClient = null;
        BulkResult br = null;
        try {
            //得到链接elasticFactory.getJestClient();
            jestClient = elasticFactory.getJestClient();
            int success = 0;
            int error = 0;
            Bulk.Builder bulk = new Bulk.Builder().defaultIndex(index).defaultType(type);
            try {
                Index indexObj = new Index.Builder(source).build();
                success++;
                bulk.addAction(indexObj);
            } catch (Exception e) {
                logger.error(e.getMessage());
                error++;
            }
            br = jestClient.execute(bulk.build());
            logger.debug("save flag:" + br.isSucceeded());
            logger.debug("save success:" + success);
            logger.debug("save error:" + error);
            return br.isSucceeded();
        } catch (Exception e) {
            logger.error(" save error :" + e.getMessage());
        } finally {
            if (jestClient != null) {
                jestClient.shutdownClient();
            }
        }
        return br.isSucceeded();
    }
    /**
     * 自定义ID
     *
     * @param index
     * @param type
     * @param source
     * @param idFieldString
     * @return
     */
    public Boolean saveWithCustomId(String index, String type, String source, String idFieldString) {
        JestClient jestClient = null;
        BulkResult br = null;
        try {
            //得到链接elasticFactory.getJestClient();
            jestClient = elasticFactory.getJestClient();
            int success = 0;
            int error = 0;
            Bulk.Builder bulk = new Bulk.Builder().defaultIndex(index).defaultType(type);
            try {
                JSONObject jsonObject = (JSONObject) (JSONObject.parse(source));
                Index indexObj = new Index.Builder(source).id(jsonObject.getString(idFieldString)).
                        build();
                success++;
                bulk.addAction(indexObj);
            } catch (Exception e) {
                logger.error(e.getMessage());
                error++;
            }
            br = jestClient.execute(bulk.build());
            logger.debug("save flag:" + br.isSucceeded());
            logger.debug("save success:" + success);
            logger.debug("save error:" + error);
            return br.isSucceeded();
        } catch (Exception e) {
            logger.error(" save error :" + e.getMessage());
        } finally {
            if (jestClient != null) {
                jestClient.shutdownClient();
            }
        }
        return br.isSucceeded();
    }
    /**
     * 自定义ID
     *
     * @param index
     * @param type
     * @param sources
     * @param idFieldString
     * @return
     */
    public Boolean saveBulkWithCustomId(String index, String type, List<String> sources, String idFieldString) {
        JestClient jestClient = null;
        BulkResult br = null;
        try {
            //得到链接elasticFactory.getJestClient();
            jestClient = elasticFactory.getJestClient();
            int success = 0;
            int error = 0;
            Bulk.Builder bulk = new Bulk.Builder().defaultIndex(index).defaultType(type);
            try {
                for (String source : sources) {
                    JSONObject jsonObject = (JSONObject) (JSONObject.parse(source));
                    Index indexObj = new Index.Builder(source).id(jsonObject.getString(idFieldString)).
                            build();
                    success++;
                    bulk.addAction(indexObj);
                }
            } catch (Exception e) {
                logger.error(e.getMessage());
                error++;
            }
            br = jestClient.execute(bulk.build());
            logger.debug("save flag:" + br.isSucceeded());
            logger.debug("save success:" + success);
            logger.debug("save error:" + error);
            return br.isSucceeded();
        } catch (Exception e) {
            logger.error(" save error :" + e.getMessage());
        } finally {
            if (jestClient != null) {
                jestClient.shutdownClient();
            }
        }
        return br.isSucceeded();
    }
    /**
     * 更新
     *
     * @param index
     * @param type
     * @param sms
     * @return
     */
    public Boolean update(String index, String type, List<Object> sms) {
        JestClient jestClient = null;
        BulkResult br = null;
        try {
            //得到链接
            jestClient = elasticFactory.getJestClient();
            int success = 0;
            int error = 0;
            boolean isSuccessed = true;
            Bulk.Builder bulk = new Bulk.Builder().defaultIndex(index).defaultType(type);
            for (Object obj : sms) {
                try {
                    JSONObject jo = new JSONObject();
                    jo.put("doc", obj);
                    Update indexObj = new Update.Builder(jo.toString()).index(index).type(type).id(((ESIDEntity) obj).getId()).build();
                    bulk.addAction(indexObj);
                    success++;
                } catch (Exception e) {
                    error++;
                    isSuccessed = false;
                }
            }
            br = jestClient.execute(bulk.build());
            logger.debug("update flag:" + br.isSucceeded());
            logger.debug("update success:" + success);
            logger.debug("update error:" + error);
            return isSuccessed;
        } catch (Exception e) {
            logger.error(" update error :" + e.getMessage());
        } finally {
            if (jestClient != null) {
                jestClient.shutdownClient();
            }
        }
        return br.isSucceeded();
    }
    /**
     * 更新
     * @param index
     * @param type
     * @param list
     * @return
     */
    public Boolean updateByMap(String index, String type, List<Map<String, Object>> list) {
        JestClient jestClient = null;
        BulkResult br = null;
        try {
            jestClient = this.elasticFactory.getJestClient();
            int success = 0;
            int error = 0;
            boolean isSuccessed = true;
            Bulk.Builder bulk = (new Bulk.Builder()).defaultIndex(index).defaultType(type);
            Iterator var10 = list.iterator();
            while(var10.hasNext()) {
                Map map = (Map)var10.next();
                try {
                    JSONObject jo = new JSONObject();
                    jo.put("doc", map);
                    Update indexObj = ((io.searchbox.core.Update.Builder)((io.searchbox.core.Update.Builder)((io.searchbox.core.Update.Builder)(new io.searchbox.core.Update.Builder(jo.toString())).index(index)).type(type)).id(String.valueOf(map.get("id")))).build();
                    bulk.addAction(indexObj);
                    ++success;
                } catch (Exception var18) {
                    ++error;
                    isSuccessed = false;
                }
            }
            br = jestClient.execute(bulk.build());
            this.logger.info("update flag:" + br.isSucceeded());
            this.logger.info("update success:" + success);
            this.logger.info("update error:" + error);
            Boolean var21 = Boolean.valueOf(isSuccessed);
            return var21;
        } catch (Exception var19) {
            this.logger.error(" update error :" + var19.getMessage());
        } finally {
            if (jestClient != null) {
                jestClient.shutdownClient();
            }
        }
        return Boolean.valueOf(br.isSucceeded());
    }
    /**
     * 更新
     *
     * @param index
     * @param type
     * @param _id
     * @param source
     * @return
     */
    public boolean update(String index, String type, String _id, JSONObject source) {
        JestClient jestClient = null;
        JestResult jestResult = null;
        try {
            jestClient = elasticFactory.getJestClient();
            JSONObject docSource = new JSONObject();
            docSource.put("doc", source);
            Update update = new Update.Builder(docSource).index(index).type(type).id(_id).build();
            jestResult = jestClient.execute(update);
            logger.debug("update info:" + jestResult.isSucceeded());
        } catch (Exception e) {
            logger.error("update fail:" + _id, e.getMessage());
            return false;
        } finally {
            if (jestClient != null) {
                jestClient.shutdownClient();
            }
        }
        return true;
    }
    /**
     * 删除
     */
    public boolean delete(String index, String type, List<Map<String, Object>> datas) {
        JestClient jestClient = null;
        BulkResult br = null;
        try {
            jestClient = elasticFactory.getJestClient();
            //根据id批量删除
            Bulk.Builder bulk = new Bulk.Builder().defaultIndex(index).defaultType(type);
            for (Map map : datas) {
                if (!map.containsKey("id") || !map.containsKey("_id")) {
                    continue;
                }
                Delete indexObj = null;
                if (null != map.get("_id")) {
                    indexObj = new Delete.Builder(map.get("_id").toString()).build();
                } else if (null != map.get("id")) {
                    indexObj = new Delete.Builder(map.get("id").toString()).build();
                }
                bulk.addAction(indexObj);
            }
            br = jestClient.execute(bulk.build());
            logger.debug("delete data count:" + datas.size());
            logger.debug("delete flag:" + br.isSucceeded());
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (jestClient != null) {
                jestClient.shutdownClient();
            }
        }
        return br.isSucceeded();
    }
    public SearchResult search(String index, String type, String queryStr) {
        JestClient jestClient = null;
        SearchResult result = null;
        try {
            jestClient = this.elasticFactory.getJestClient();
            Search search = ((new io.searchbox.core.Search.Builder(queryStr)).addIndex(index)).addType(type).build();
            result = (SearchResult)jestClient.execute(search);
            this.logger.info("search data count:" + result.getTotal());
        } catch (Exception var10) {
            var10.printStackTrace();
        } finally {
            if(jestClient != null) {
                jestClient.shutdownClient();
            }
        }
        return result;
    }
    /**
     * 执行sql
     *
     * @param sql
     * @return
     */
    public List<Map<String, Object>> excuceSQL(String sql) {
        return elasticsearchUtil.excuteDataModel(sql);
    }
    /**
     * 执行sql
     *
     * @param sql
     * @return
     */
    public Integer excuceCountSQL(String sql) {
        return elasticsearchUtil.count(sql);
    }
    public ElasticsearchUtil getElasticsearchUtil() {
        return elasticsearchUtil;
    }
    public void setElasticsearchUtil(ElasticsearchUtil elasticsearchUtil) {
        this.elasticsearchUtil = elasticsearchUtil;
    }
}

+ 21 - 0
elasticsearch-jest-starter/src/main/java/com/yihu/elasticsearch/jest/model/ESIDEntity.java

@ -0,0 +1,21 @@
package com.yihu.elasticsearch.jest.model;
import io.searchbox.annotations.JestId;
/**
 * es保存model的公共父类
 * Created by chenweida on 2017/11/3.
 */
public class ESIDEntity {
    @JestId
    private String id;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
}

+ 109 - 0
elasticsearch-jest-starter/src/main/java/com/yihu/elasticsearch/jest/properties/ElasticSearchPorperties.java

@ -0,0 +1,109 @@
package com.yihu.elasticsearch.jest.properties;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
 * Created by chenweida on 2018/5/3 0003.
 */
@Component
public class ElasticSearchPorperties {
    @Value("${spring.data.elasticsearch.cluster-name:jkzl}")
    private String clusterName;//http://172.19.103.68:9200  #多个逗号分割
    @Value("${spring.data.elasticsearch.cluster-nodes:http://172.19.103.68:9300}")
    private String clusterNodes;//http://172.19.103.68:9200  #多个逗号分割
    @Value("${spring.data.elasticsearch.cluster-nodes-jest:http://172.19.103.68:9200}")
    private String clusterNodesJest;//http://172.19.103.68:9200  #多个逗号分割
    @Value("${spring.data.elasticsearch.jest.discovery-enabled:true}")
    private Boolean jestDiscoveryEnabled; //#开启嗅探
    @Value("${spring.data.elasticsearch.jest.conn-timeout:60}")
    private Integer jestConnTimeout;//连接时间单位是秒
    @Value("${spring.data.elasticsearch.jest.read-timeout:60}")
    private Integer jestReadTimeout;//读取时间单位是秒
    @Value("${spring.data.elasticsearch.jest.multith-readed:true}")
    private Boolean jestMultiThreaded;//开启多线程
    @Value("${spring.data.elasticsearch.jest.max-total-connection:30}")
    private Integer jestMaxTotalConnection;//最大连接
    @Value("${spring.data.elasticsearch.jest.max-connection-idle-time:60}")
    private Integer jestMaxConnectionIdleTime;//最大等待时间
    public String getClusterNodesJest() {
        return clusterNodesJest;
    }
    public void setClusterNodesJest(String clusterNodesJest) {
        this.clusterNodesJest = clusterNodesJest;
    }
    public Boolean getJestDiscoveryEnabled() {
        return jestDiscoveryEnabled;
    }
    public void setJestDiscoveryEnabled(Boolean jestDiscoveryEnabled) {
        this.jestDiscoveryEnabled = jestDiscoveryEnabled;
    }
    public Integer getJestConnTimeout() {
        return jestConnTimeout;
    }
    public void setJestConnTimeout(Integer jestConnTimeout) {
        this.jestConnTimeout = jestConnTimeout;
    }
    public Integer getJestReadTimeout() {
        return jestReadTimeout;
    }
    public void setJestReadTimeout(Integer jestReadTimeout) {
        this.jestReadTimeout = jestReadTimeout;
    }
    public Boolean getJestMultiThreaded() {
        return jestMultiThreaded;
    }
    public void setJestMultiThreaded(Boolean jestMultiThreaded) {
        this.jestMultiThreaded = jestMultiThreaded;
    }
    public Integer getJestMaxTotalConnection() {
        return jestMaxTotalConnection;
    }
    public void setJestMaxTotalConnection(Integer jestMaxTotalConnection) {
        this.jestMaxTotalConnection = jestMaxTotalConnection;
    }
    public Integer getJestMaxConnectionIdleTime() {
        return jestMaxConnectionIdleTime;
    }
    public void setJestMaxConnectionIdleTime(Integer jestMaxConnectionIdleTime) {
        this.jestMaxConnectionIdleTime = jestMaxConnectionIdleTime;
    }
    public String getClusterNodes() {
        return clusterNodes;
    }
    public void setClusterNodes(String clusterNodes) {
        this.clusterNodes = clusterNodes;
    }
    public String getClusterName() {
        return clusterName;
    }
    public void setClusterName(String clusterName) {
        this.clusterName = clusterName;
    }
}

+ 1 - 1
fastdfs-starter/pom.xml

@ -9,7 +9,7 @@
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>fastdfs-start</artifactId>
    <artifactId>fastdfs-starter</artifactId>
    <packaging>jar</packaging>
    <dependencies>

+ 8 - 0
fastdfs-starter/src/main/java/com/yihu/fastdfs/FastDFSUtil.java

@ -11,6 +11,7 @@ import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.NoSuchAlgorithmException;
@ -41,6 +42,13 @@ public class FastDFSUtil {
    @Autowired
    private FastDFSConfig fastDFSConfig;
    public ObjectNode upload(byte[] fileBuffer, String fileExtension, String description) throws Exception {
        NameValuePair[] fileMetaData = new NameValuePair[1];
        fileMetaData[0] = new NameValuePair("description", description == null ? "" : description);
        InputStream inputStream = new ByteArrayInputStream(fileBuffer);
        return upload(inputStream, fileExtension, fileMetaData);
    }
    public ObjectNode upload(InputStream in, String fileExtension, String description) throws IOException, MyException, NoSuchAlgorithmException{
        NameValuePair[] fileMetaData = new NameValuePair[1];
        fileMetaData[0] = new NameValuePair("description", description == null ? "" : description);

+ 47 - 4
mysql-starter/src/main/java/com/yihu/mysql/query/BaseJpaService.java

@ -1,8 +1,9 @@
package com.yihu.mysql.query;
import com.yihu.utils.lang.SpringContext;
import com.yihu.utils.context.SpringApplicationContext;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.beans.BeanUtils;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.PagingAndSortingRepository;
@ -106,7 +107,7 @@ public class BaseJpaService<T, R> {
                .getResultList();
    }
    public List search(String filters,String sorts) throws ParseException {
    public List search(String filters, String sorts) throws ParseException {
        URLQueryParser queryParser = createQueryParser("", filters, sorts);
        CriteriaQuery query = queryParser.makeCriteriaQuery();
@ -115,6 +116,14 @@ public class BaseJpaService<T, R> {
                .getResultList();
    }
    public List search(String fields, String filters, String sorts) throws ParseException {
        URLQueryParser queryParser = createQueryParser(fields, filters, sorts);
        CriteriaQuery query = queryParser.makeCriteriaQuery();
        return entityManager
                .createQuery(query)
                .getResultList();
    }
    public long getCount(String filters) throws ParseException {
        URLQueryParser queryParser = createQueryParser(filters);
        CriteriaQuery query = queryParser.makeCriteriaCountQuery();
@ -159,11 +168,11 @@ public class BaseJpaService<T, R> {
    }
    public PagingAndSortingRepository getRepository() {
        return (PagingAndSortingRepository) SpringContext.getService(repoClass);
        return (PagingAndSortingRepository) SpringApplicationContext.getService(repoClass);
    }
    public JpaRepository getJpaRepository(){
        return (JpaRepository) SpringContext.getService(repoClass);
        return (JpaRepository) SpringApplicationContext.getService(repoClass);
    }
    public List<T> findByField(String field, Object value){
@ -220,6 +229,40 @@ public class BaseJpaService<T, R> {
        }
    }
    /**
     * 将实体集合转换为模型集合。
     * @param sources
     * @param targets
     * @param targetCls
     * @param <T>
     * @return
     */
    public <T> List<T> convertToModels(Collection sources, List<T> targets, Class<T> targetCls){
        sources.forEach(one -> {
            T target = (T) BeanUtils.instantiate(targetCls);
            BeanUtils.copyProperties(one, target);
            targets.add(target);
        });
        return targets;
    }
    /**
     * 将实体转换为模型。
     *
     * @param source
     * @param targetCls
     * @param <T>
     * @return
     */
    public <T> T convertToModel(Object source, Class<T> targetCls) {
        if (source == null) {
            return null;
        }
        T target = BeanUtils.instantiate(targetCls);
        BeanUtils.copyProperties(source, target);
        return target;
    }
    public String getCode() {
        return UUID.randomUUID().toString().replaceAll("-", "");
    }

+ 34 - 2
pom.xml

@ -9,6 +9,7 @@
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
    </parent>
    <!-- Self -->
    <groupId>com.yihu</groupId>
    <artifactId>jkzl-starter</artifactId>
@ -21,6 +22,7 @@
        <module>swagger-starter</module>
        <module>mysql-starter</module>
        <module>commons/utils</module>
        <module>elasticsearch-jest-starter</module>
    </modules>
    <!-- 项目发布的这个服务器 -->
@ -42,6 +44,10 @@
        <version.hibernate>5.0.12.Final</version.hibernate>
        <version.hibernate-validator>6.0.10.Final</version.hibernate-validator>
        <version.hibernate-jpa-api>1.0.0.Final</version.hibernate-jpa-api>
        <version.elasticsearch-sql>2.4.1.0</version.elasticsearch-sql>
        <verion.fastjson>1.2.17</verion.fastjson>
        <version.druid>1.0.15</version.druid>
        <version.jna>3.0.9</version.jna>
    </properties>
    <dependencyManagement>
@ -94,14 +100,40 @@
                <version>${version.hibernate-jpa-api}</version>
            </dependency>
            <!-- Apache -->
            <!-- Elasticsearch library -->
            <dependency>
                <groupId>org.nlpcn</groupId>
                <artifactId>elasticsearch-sql</artifactId>
                <version>${version.elasticsearch-sql}</version>
            </dependency>
            <!-- Alibaba library -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>${verion.fastjson}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${version.druid}</version>
            </dependency>
            <!-- jna library -->
            <dependency>
                <groupId>com.sun.jna</groupId>
                <artifactId>jna</artifactId>
                <version>${version.jna}</version>
            </dependency>
            <!-- Apache library -->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-dbcp2</artifactId>
                <version>${version.commons-dbcp2}</version>
            </dependency>
            <!--Jackson library -->
            <!-- Jackson library -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>

+ 4 - 2
swagger-starter/src/main/java/com/yihu/swagger/SwaggerConfig.java

@ -3,6 +3,8 @@ package com.yihu.swagger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
@ -27,8 +29,8 @@ public class SwaggerConfig {
                .forCodeGeneration(true)
                .pathMapping("/")
                .select()
                .paths(or(regex("/api.*"),
                        regex("/oauth/.*")))
                .apis(RequestHandlerSelectors.basePackage("com.yihu"))
                .paths(PathSelectors.any())
                .build()
                .apiInfo(publicApiInfo());
    }