通过tomcat配置上下文,通过jdbc链接数据源

102 篇文章 0 订阅
36 篇文章 0 订阅

tomcat中的配置

<Service name="ssd"> 
     <Connector port="8080" maxHttpHeaderSize="8906"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true"
               URIEncoding="utf-8" useBodyEncodingForURI="true" />
    <Engine name="ssd" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase" />
      <Host name="localhost" appBase="">
       <Context path="" docBase="c:\Microsoft\WorkPorject\WebProject\opinion\WebRoot"
                 debug="5" reloadable="true" crossContext="true">
            <Resource name="jdbc/union2" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" 
                       username="root" password="root" driverClassName="com.mysql.jdbc.Driver"
                       url="jdbc:mysql://xxx.xxx.xxx:xxxx/data_center?autoReconnect=true&amp;characterEncoding=utf-8"/>
        </Context>
      </Host>
    </Engine>
</Service>

JDBC回忆


    /**
     * 取得基础信息数据库链接
     * 连接的数据库有public_zjgov
     * @return
     */
    public static Connection getUnion2(){
        try{
            Connection con = null;
            Context initCtx = new InitialContext();
            Context envCtx = (Context)initCtx.lookup("java:comp/env");
            DataSource connectionPool = (DataSource)envCtx.lookup("jdbc/union2");
            con = connectionPool.getConnection();
            return con;
        }catch(Exception ex){
            ex.printStackTrace();   
            return null;
        }
    }

jdbc查询

/**
     * 从文章同一库查询文章列表
     * @param sql
     * @param values
     * @return
     */
    public List<Map<String, Object>> queryForUnion2Map(String sql, Object[] values) {
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            conn = DBConnection.getUnion2();

            pstmt = conn.prepareStatement(sql);

            ParameterMetaData pmd = pstmt.getParameterMetaData();   //获取SQL语句的结构
            int pmdCount = pmd.getParameterCount();     //获取SQL语句中?占位符的个数

            //对SQL语句中的占位符进行赋值
            if(null != values) {
                for(int i = 0; i < pmdCount && i < values.length; ++i) {
                    pstmt.setObject(i+1, values[i]);
                }
            }

            rs = pstmt.executeQuery();

            ResultSetMetaData rsmd = rs.getMetaData();      //获取查询结果的数据结构

            int rsmdCount = rsmd.getColumnCount();

            String[] columnName = new String[rsmdCount];
            Map<String, String> columnType = new HashMap<String, String>();

            for(int i = 0; i < rsmdCount; ++i) {
                columnName[i] = rsmd.getColumnLabel(i+1);       //获取列的名字
                columnType.put(rsmd.getColumnLabel(i+1), rsmd.getColumnClassName(i+1)); //获取列的JAVA数据类型名
            }

            Map<String, Object> map = null;
            while(rs.next()) {
                map = new LinkedHashMap<String, Object>();

                for(int i = 0; i < rsmdCount; ++i) {
                    map.put(columnName[i], tools.readRow(rs, columnType.get(columnName[i]), columnName[i]));
                }

                list.add(map);
                map = null;
            }
        } catch(Exception e) {
            e.printStackTrace();
        } finally {
            MySQLDBUtils.getInstance().free(rs, pstmt, conn);
        }

        return list;
    }

传递拼接sql

@Override
    public List<Map<String, Object>> getMonitorKeywordsList(String ids) {

        StringBuffer sql = new StringBuffer();
        sql.append("SELECT ai.artKeyword,ai.id FROM "+CommonPublic.ARTICLE_INFO +" ai WHERE 1=1 and ai.id in ("+ids+")");
        List<Object> values = new ArrayList<Object>();
        QueryResultMap query = new QueryResultMap();
        List<Map<String, Object>> list = query.queryForMap(sql.toString(), values);
        return list;
    }

根据文章id查询关键字并排序统计截取

public  Map<String,Integer> queryRelationKeywordsStat(int monitorType,int sortType,int peopleId,String startDate,String endDate,String peopleName){
        Page pg=new Page();
        Map<String,Integer> countMap = new HashMap<String,Integer>();

        for(int i=0;i<100;i++){
            pg.setCurrentPage(i);
            pg.setPageSize(100);
            Page moniList=monitorpersonService.monitorAtricle(monitorType, sortType, peopleId, startDate, endDate, pg);
            if(moniList.getTotalRow()==0||moniList.getTotalPage()<=i)break;
                List<MymMonitorBean> dataList = moniList.getData();
                String ids = "";
                for(int j=0;j<dataList.size();j++){
                    MymMonitorBean bean = dataList.get(j);
                    if(dataList.size()-1!=j){
                        ids+=bean.getId()+",";
                    } else {
                        ids+=bean.getId();
                    }
                } 
                List<Map<String, Object>> monitorKeywordsMap = monitorpersonService.getMonitorKeywordsList(ids);
                for(Map<String, Object> map : monitorKeywordsMap){
                    String keyword = map.get("artKeyword").toString();
                    // 分割关键词
                    String[] wordAry = keyword.split(",");
                    // 遍历关键词,并统计
                    for(String word : wordAry){
                        if(countMap.containsKey(word)){
                            int newCount = countMap.get(word)+1;
                            countMap.put(word, newCount);
                        } else {
                            if(word.equals(peopleName))continue;
                            countMap.put(word, 1);
                        }
                    }

                }
        }
        // 排序结果集,获取前二十个
        Map<String,Integer> endCountMap = sortMap(countMap,20);
        return endCountMap;
    }
    /**
     * 根据map排序,并倒叙取前几个
     * @param oldMap 需要排序的map
     * @param many   取的个数
     * @return
     */
    public static Map<String,Integer> sortMap(Map<String,Integer> oldMap,int many) {  
        ArrayList<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(oldMap.entrySet());  
        Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {  

            @Override  
            public int compare(Entry<java.lang.String, Integer> arg0,  
                    Entry<java.lang.String, Integer> arg1) {  
                return arg0.getValue() - arg1.getValue();  
            }  
        });  
        Map<String,Integer> newMap = new LinkedHashMap<String,Integer>();
        int count = list.size()>many?many:list.size();
        for (int i = count; i > 0; i--) {
            newMap.put(list.get(list.size()-i).getKey(), list.get(list.size()-i).getValue());  
        }  
        return newMap;
    } 

将统计值放入名为echarts.java类中进行处理

    /**
     * 封装力引导关系图的数据
     * @param keywordsStatMap
     * @return
     */
    public Map<String,Object> getRelationKeywords(Map<String, Integer> keywordsStatMap,String peopleName){
                Map<String, Object> resultMap = new HashMap<String, Object>();//定义存放饼图信息的map集合
                List<Map<String, Object>> nodeList = new ArrayList<Map<String, Object>>();
                List<Map<String, Object>> edgeList = new ArrayList<Map<String, Object>>();

                int total = 0;

                Map<String, Object> firstNodeMap = new HashMap<String, Object>();
                firstNodeMap.put("id", 0);
                firstNodeMap.put("name", peopleName);
                firstNodeMap.put("x", "-266.82776");
                firstNodeMap.put("y", "299.6904");

                int i = 1;
                for(Map.Entry<String, Integer> statEntry : keywordsStatMap.entrySet()){
                    String statKey = statEntry.getKey();
                    Integer statValue = statEntry.getValue();
                    total += statValue;
                    Map<String, Object> nodeMap = new HashMap<String, Object>();
                    nodeMap.put("id", i);
                    nodeMap.put("name", statKey);
                    nodeMap.put("x", coordinate("-266.82776", null,200,(i*15)));
                    nodeMap.put("y", coordinate(null, "299.6904",200,(i*15)));
                    nodeMap.put("num", statValue);
                    nodeList.add(nodeMap);
                    Map<String, Object> edgeMap = new HashMap<String, Object>();
                    if(i <= keywordsStatMap.size()){
                        edgeMap.put("id", i);
                        edgeMap.put("sourceID", 0);
                        edgeMap.put("targetID", i);
                        edgeList.add(edgeMap);
                    }
                    i++;
                }
                firstNodeMap.put("num", total);
                nodeList.add(firstNodeMap);
            resultMap.put("nodes", nodeList);
            resultMap.put("edges", edgeList);
        return resultMap;
    }

处理后的参数回传:

@RequestMapping("getRelationChartsData")
    @ResponseBody
    public String getRelationData(String startDate,String endDate,int peopleId,String peopleName){
        int monitorType = NumberUtils.toInt(request.getParameter("monitorType"),0);//领导类型
        int sortType = NumberUtils.toInt(request.getParameter("sortType"),1); // 排序方式
        if(startDate == null || startDate.equals("")){
            startDate = this.getDate(defBegin);
        }
        if(endDate == null || endDate.equals("")){
            endDate = this.getDate(defEnd);
        }
        //查询关系词
        Map<String, Integer> keywordsStatMap =queryRelationKeywordsStat( monitorType, sortType, peopleId, startDate, endDate,peopleName);
        Map<String, Object> resultMap = new HashMap<String, Object>();
        //封装查询的数据
        if(null!=keywordsStatMap&&!keywordsStatMap.isEmpty()){
            Echarts echarts = new Echarts();
            resultMap =echarts.getRelationKeywords(keywordsStatMap, peopleName);
        }   
        return JsonMapper.toJson(resultMap);
    }

关系图前端js调用

    function getSimpleRelationCharts(){
        $("#relationCharts").html(imgLoading);
        var peopleId = $("#monitorList").find(".active").attr("monitor_id");
        var peopleName = $("#monitorList").find(".active").attr("monitor_name");
        $("#peopleId").val(peopleId);
        $("#peopleName").val(peopleName);
        var startDate = $("#startDate").val();
        var endDate = $("#endDate").val();
        var param = {
            startDate : startDate,
            endDate : endDate,
            peopleId : peopleId,
            peopleName:peopleName,
            rnd : Math.random()
        };
        $.ajax({
           type:"post",
           url:"/opinion/monitorperson/getRelationChartsData",
           dataType:"json",
           async:false,
           data:param,
           success:function(data){
                //console.log(data);
                if(data){
                    forceRelationChart("relationCharts", data);
                }
           }
        });
    }
<script type="text/javascript" src="/opinion/plugins/echarts3.0/echarts.min.js"></script>
<script type="text/javascript">
    function forceRelationChart(id,data){
            var myChart = echarts.init(document.getElementById(id));

            var nodes = [];
            var edges = [];
            if(data){
                nodes = data["nodes"];
                edges = data["edges"];
            }

            $.each(nodes, function(n, node){
                //console.log(node.id+","+node.num);
                node.id = ""+node.id+"";
                node.value = node.num;
                node.symbolSize = node.num*10;
                node.symbolSize = 40;
                node.category = 0;
                node.draggable = true;
                node.label = {
                    normal: {
                        //show: node.symbolSize > 30
                        show: true
                    }
                };
                node.itemStyle = {
                    normal: {
                        color: 'rgb(' +[
                            106 | 0,
                            176 | 0,
                            184 | 0
                        ].join(',') + ')'
                    }
                };
                if(node.id == 0){
                    node.symbolSize = 60;
                    node.itemStyle = {
                        normal: {
                            color: 'rgb(' +[
                                236 | 0,
                                81 | 0,
                                72 | 0
                            ].join(',') + ')'
                        }
                    };
                }
            });

            $.each(edges, function(n, edge){
                console.log(edge.sourceID+","+edge.targetID);
                edge.id = ""+edge.id+"";
                edge.source = ""+edge.sourceID+"";
                edge.target = ""+edge.targetID+"";
                edge.lineStyle = {
                    normal: {
                        color: 'rgb(' +[
                            106 | 0,
                            176 | 0,
                            184 | 0
                        ].join(',') + ')'
                    }
                };
            });

                var categories = [];
                categories = [
                    {name: ''}
                ];

                console.log(nodes);
                console.log(edges);

                option = {
                    title: {
                        text: '关系图',
                        //subtext: 'Default layout',
                        top: 'bottom',
                        left: 'right'
                    },
                    tooltip: {},
                    legend: [{
                        // selectedMode: 'single',
                        data: categories.map(function (a) {
                            return a.name;
                        })
                    }],
                    animationDuration: 1500,
                    animationEasingUpdate: 'quinticInOut',
                    series : [
                        {
                            name: '关系',
                            type: 'graph',
                            //layout: 'none',
                            layout: 'force',
                            data: nodes,
                            links: edges,
                            categories: categories,
                            roam: true,
                            label: {
                                normal: {
                                    position: 'right',
                                    formatter: '{b}'
                                }
                            },
                            lineStyle: {
                                normal: {
                                    color: 'source',
                                    //curveness: 0.3
                                }
                            },
                            force: {
                                repulsion: 700
                            }
                        }
                    ]
                };

                myChart.setOption(option);
    }
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值