基于Spring4+SpringMVC4+Mybatis3+Hibernate4+Junit4框架构建高性能企业级的部标GPS监控平台
开发企业级的部标GPS监控平台,投入的开发力量很大,开发周期也很长,选择主流的开发语言以及成熟的开源技术框架来构建基础平台,是最恰当不过的事情,在设计之初就避免掉了技术选型的风险,避免以后在开发过程中,不断的填坑走弯路,以至于整个团队被坑埋掉。做GPS平台这么多年,以前就了解到一些开发团队过于关注某一种语言的优势,比如过于选用GO,Erlang,python,php等技术,最后团队熟悉这些技术的关键人员离职了,都没人接手,不能不说是个悲剧。所以说平台的技术架构选型要注重的是稳健,均衡而不是偏激,而SpringMVC4, Mybatis4, Hibernate4就是GPS监控平台软件开发的理想框架选择。
本版本是2015-2017年推出的最新稳定版本,是我工作的主流版本,相对于原来的2014年研发的旧版的struts版本,从性能和功能上有了较大的提升,融合了大量客户的需求意见,特点:
1)SpringMVC版本已经替代struts成为主流框架,在安全和性能上有很大的提升,struts开源框架有安全隐患,容易受到攻击,公网服务器可以被黑客攻破获得管理员权限,变成肉鸡或者比特币挖矿机。
2)采用Netty框架替代原有的Mina框架,在服务器的并发性能上有了大幅提升,普通服务器单进程可以支撑到3万台终端;部标808服务器所支持的部标协议,旧版只支持jt/t 808 2011版本的协议,新版本全面支持jt/t 808 2013版本的协议,如定时拍照等新特性,增加了808协议数据实时转发的特性。
3) 采用Redis缓存服务器,支持多台808服务器集群,参见文章:基于Redis构建10万+终端级的高性能部标808Gps网关服务器
4)可以接收第三方的转发的数据,由于很多GPS平台所获得的数据都是从第三方平台而来,并不能得到一手的GPS终端数据,809模块增加了809政府运管服务器,用来接收第三方转发而来的数据。
5)采用Mybatis替代旧版本中已经淘汰的Ibatis框架,通过Mybatis的查询分页插件,可以很方便的支撑各种数据库的分页查询,代码可以支持Mysql, Sqlserver, 和Oracle三种数据库,利用Mybatis的批量插入特性,大幅提升了GPS数据入库的性能;
6)地图部分做了较大的优化,统一地图接口,支持百度、高德和四维三种地图;
7)新版本是基于saas的多租户架构设计,充分支持多公司,多集团,多代理的组织架构模式,不同企业实体的数据、权限进行完全的隔离,可以单独为每个企业分配企业管理员,企业管理员在自己的企业实体内,可以单独分配角色权限,建立部门和车队;
8)Spring框架从旧版的2.5升级到Spring4, 从原来的全xml配置,利用Spring4的注解特性,大幅削减了系统的xml配置,系统部署和配置更加方便,维护更加容易;
9) SpringMVC4集成WebSocket,基于Websocket进行报警推送,大大提高报警推送的效率。
参见:基于Websocket+SpringMVC4推送部标Jt808终端报警
10) 使用阿里巴巴团队开源的Druid连接池,Druid是Java语言中最好的数据库连接池。能够提供强大的监控和扩展功能。
11) 对原有的代码做了大量的优化,性能做了较大的提升,代码进行了充分的重构,增加了大量的注释,设计文档进行了重写;
12) Android客户端跟随最新谷歌主流的Material Design设计思想,采用android studio和gradle3.0做开发工具,使用主流的框架retrofit 2.0网络库等框架开发,保证代码使用的是最新的主流技术,方便技术团队对接和消化。
13) 部标GPS平台可以单独付费升级为部标1077视频平台,支持符合部标视频Jt/t 1078协议标准的部标1076视频设备接入,在BS端通过HTML5 Video插件或者flash插件进行实时视频监控和录像回放、视频文件下载。
如需购买,可以联系[email protected], 本人可以去客户所在地,提供两天以内的免费培训和技术支持服务(差旅住宿费用由客户承担)。
旧版的基于struts2技术框架的平台源码仍然销售,但不再提供升级,参见基于Struts+Spring+Hibernate+Ibatis+Quartz+Mina框架构建部标监控平台
.NET平台,参见:基于Asp.NET MVC构建GPS部标平台
废话少说,我们现在构建基于BS网页Web模式的部标GPS监控平台,基于主流的J2EE三层模型,主要的技术选型如下:
1.基础容器框架 spring4
2.Web框架 Springmvc4
3.ORM实体与关系数据库映射框架 hibernate4
4.SQL查询框架 mybatis3
5.单元测试 junit4
6.日志 log4j
7.定时任务框架Quartz
系统运行环境:tomcat7+ 、JDK7+、MySql 5.7/ SQSERVER2005/Oracle9
GPS监控的web平台对技术的要求如下:
1.实时监控和部标808协议的几十种终端指令的上传下达,百度地图车辆位置监控,地图操作等功能需要频发的对服务器发送基于ajax的request,返回json数据,基本上是重度使用ajax请求和Json传输。
2.Web服务器需要应对网页客户端重度的request请求,性能要求较高,在mvc框架开发的时候,一定要避免内存泄漏,因为在频繁的request请求调用之下,小小的内存泄漏,会一点一点积累,直至耗掉tomcat的内存。
3.安全性上,框架至少要能够防御CSRF、XSS和SQL注入攻击
Web框架我们采用sprngMVC4, 主要的考虑如下:
1.全注解环境,采用springmvc4,替xml配置,避免掉了一大堆的xml配置,对应URL的映射和request参数的映射直接在方法中通过注解配置;
2.spring mvc是基于方法的设计,controller是单例模式,而sturts是基于类,每次发一次请求都会实例一个action,每个action都会被注入属性,而spring基于方法,粒度更细,性能上更高一筹;
3.SpringMVC框架的安全性上要高于struts,详见百度搜索。
数据库ORM的框架要求如下:
1.能够比较灵活的适应主流的数据库,如mysql, mssqlserver, oracle等,现在的开发团队和开发人员在开发的时候,几乎没有人关注这个问题,基本都是在一个数据库上吊死,而作为一个平台的开发,为应对不同的客户要求,团队的开发力量有限,不能一个数据库一个版本,这样开发和维护、升级、测试成本就急速的升高,所以我们追求的是一下几个原则:
1)不用存储过程和触发器;
很多开发团队都是重度的存储过程和触发器的使用者,连简单的查询分页都要用存储过程,一旦开发人员离职,这些存储过程和触发器都像天书一样,难以维护,一般我们的代码都是在SVN基于配置库进行版本管理,而存储过程和触发器却脱离这些之外,存储过程和触发器如果有bug出现问题,在生产环境上,很难进行跟踪,web容器的日志记录只能跟踪到java代码级别,剩下就需要DBA来配合了。
2)使用Hibernate4 框架,实体类和数据库的映射都在类和属性方法上完成;基于Hibernate的配置就可以轻松切换到其他数据库。
3)采用采用Mybatis的物理分页插件,通过拦截器的方式,在开发人员编写的SQL上进行拦截,并自动包装上各个数据库的物理分页代码,可以支持多个主流数据库的物理分页查询方法。
4)采用mybatis和log4j,可以很方便的打印SQL日志,方便调试跟踪。
5)采用阿里巴巴的开源连接池引擎,配置对spring service层的AOP监控,druid内置了后台监控页面,可以直接监控连接池的耗费情况,以及SQL的性能耗时监控,非常方便。
基于Maven构建多模块项目工程,打造干净的依赖库
我们在开发GPS监控平台的时候,一般都是基于业务功能和职责,将业务分为多个模块,各个模块之间相互独立,每个模块可以独立运行或者作为独立的公共类库被其他模块所依赖如Dao、Service等。
实际上一个部标GPS监控平台,里面包含了多个业务功能模块,如部标808GPS服务器,web网页客户端,809转发服务器,移动API,位置服务,计算服务等等。
由于多个模块,都需要依赖这些开发框架,而开源框架又有各自的依赖的jar包,他们的版本搭配非常关键,例如springmvc4用的jackson框架是2.1, springmvc3用的jackjson框架是1.x版本,你如果搭配错了,项目运行不起来了。再比如spring和mybatis, hibernate之间的无缝结合,虽然是互相搭配,但你如果用的版本不一致,也会造成项目出错。未来我们想升级某个框架,比如从spring4升级到spring5,也是不是单纯的只升级spring4, 而是要考虑hibernate, mybatis等框架的联动升级。
所以采用Maven来提供工程的中央仓库,所有的子模块共享一个POM文件,避免各个子模块各自重复依赖一大堆jar包。Maven的多模块其实就是按照层级的管理构建,项目包含一个pom.xml文件和若干个模块,每个模块有一个单独的pom.xml文件,通过pom的依赖和继承关系来构建项目层次。一旦建好以后,就可以终身享用,工作量会大大降低,jar包版本不一致的造成的项目风险会大大降低。
而整个项目工程的拷贝复制就更加简单,里面不再有大量的jar包,开发人员只需从配置库上更新最新的代码后,配置库中不再有大量的开源框架jar包,而是从Maven中央仓库中自动更新。建立工程的时候,直接选择导入Maven工程,一键将所有的模块导入到新的workspace当中,非常方便。
购买GPS平台或GPS监控系统源码,联系我[email protected]
以下是在Myeclipse开发环境下的Maven工程截图
Maven的POM.xml文件配置:
以下是IntelliJ IDEA开发环境下的工程截图
使用IDEA的Maven插件,结合源码工程的POM文件中的现成的编译脚本,开发人员不用在做额外的工作,直接点击install,就可以一键打包部署,非常方便。
工程目录和包命名规范
我现在根据Spring的注释,包的命名,当然这首先建立在你对三层架构的熟悉上。
com.ltmonitor.jt808.app 808服务器应用程序
com.ltmonitor.jt809.app 808服务器应用程序
com.ltmonitor.web.vo 用于web页面传递的对象
com.ltmonitor.service.vo 用于服务传递的对象
com.ltmonitor.controller MVC中的控制,Spring的注释@controller
com.ltmonitor.controller.map 地图表现层
com.ltmonitor.controller.terminalcommand 终端指令
com.ltmonitor.entity 实体类
com.ltmonitor.entity.jt808 专用于808gps服务器的实体类
com.ltmonitor.entity.jt809 专用于809服务器的实体类
com.ltmonitor.dao Dao层
com.ltmonitor.servce service层
com.ltmonitor.server gps服务器层
。。。
。。。。。
。。。。
完备的开发手册可以帮助开发者理解整个开发平台
数据字典:
主界面
支持百度高德地图聚合
支持海量车辆在地图上的位置显示和移动,通过颜色区分车辆的在线状态和停车行驶状态
支持车辆GPS状态和地图图标自定义: