基于Spring4+SpringMVC4+Mybatis3+Hibernate4+Junit4框架构建高性能企业级的部标GPS监控平台

2023-11-08

基于Spring4+SpringMVC4+Mybatis3+Hibernate4+Junit4框架构建高性能企业级的部标GPS监控平台


  开发企业级的部标GPS监控平台,投入的开发力量很大,开发周期也很长,选择主流的开发语言以及成熟的开源技术框架来构建基础平台,是最恰当不过的事情,在设计之初就避免掉了技术选型的风险,避免以后在开发过程中,不断的填坑走弯路,以至于整个团队被坑埋掉。做GPS平台这么多年,以前就了解到一些开发团队过于关注某一种语言的优势,比如过于选用GOErlangpython,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插件进行实时视频监控和录像回放、视频文件下载。

如需购买,可以联系2379423771@qq.com, 本人可以去客户所在地,提供两天以内的免费培训和技术支持服务(差旅住宿费用由客户承担)。

 

旧版的基于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协议的几十种终端指令的上传下达,百度地图车辆位置监控,地图操作等功能需要频发的对服务器发送基于ajaxrequest,返回json数据,基本上是重度使用ajax请求和Json传输。

2.Web服务器需要应对网页客户端重度的request请求,性能要求较高,在mvc框架开发的时候,一定要避免内存泄漏,因为在频繁的request请求调用之下,小小的内存泄漏,会一点一点积累,直至耗掉tomcat的内存。

3.安全性上,框架至少要能够防御CSRFXSSSQL注入攻击

 

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)采用mybatislog4j,可以很方便的打印SQL日志,方便调试跟踪。

 

5)采用阿里巴巴的开源连接池引擎,配置对spring service层的AOP监控,druid内置了后台监控页面,可以直接监控连接池的耗费情况,以及SQL的性能耗时监控,非常方便。

808服务器连接池监控

基于Maven构建多模块项目工程,打造干净的依赖库

  我们在开发GPS监控平台的时候,一般都是基于业务功能和职责,将业务分为多个模块,各个模块之间相互独立,每个模块可以独立运行或者作为独立的公共类库被其他模块所依赖如DaoService

  实际上一个部标GPS监控平台,里面包含了多个业务功能模块,如部标808GPS服务器,web网页客户端,809转发服务器,移动API,位置服务,计算服务等等。

  由于多个模块,都需要依赖这些开发框架,而开源框架又有各自的依赖的jar包,他们的版本搭配非常关键,例如springmvc4用的jackson框架是2.1, springmvc3用的jackjson框架是1.x版本,你如果搭配错了,项目运行不起来了。再比如springmybatis, hibernate之间的无缝结合,虽然是互相搭配,但你如果用的版本不一致,也会造成项目出错。未来我们想升级某个框架,比如从spring4升级到spring5,也是不是单纯的只升级spring4, 而是要考虑hibernate, mybatis等框架的联动升级。

  所以采用Maven来提供工程的中央仓库,所有的子模块共享一个POM文件,避免各个子模块各自重复依赖一大堆jar包。Maven的多模块其实就是按照层级的管理构建,项目包含一个pom.xml文件和若干个模块,每个模块有一个单独的pom.xml文件,通过pom的依赖和继承关系来构建项目层次。一旦建好以后,就可以终身享用,工作量会大大降低,jar包版本不一致的造成的项目风险会大大降低。

  而整个项目工程的拷贝复制就更加简单,里面不再有大量的jar包,开发人员只需从配置库上更新最新的代码后,配置库中不再有大量的开源框架jar包,而是从Maven中央仓库中自动更新。建立工程的时候,直接选择导入Maven工程,一键将所有的模块导入到新的workspace当中,非常方便。

 购买GPS平台或GPS监控系统源码,联系我2379423771@qq.com

以下是在Myeclipse开发环境下的Maven工程截图

Maven的POM.xml文件配置:

以下是IntelliJ IDEA开发环境下的工程截图

jt808协议服务器开发环境

使用IDEA的Maven插件,结合源码工程的POM文件中的现成的编译脚本,开发人员不用在做额外的工作,直接点击install,就可以一键打包部署,非常方便。

Maven打包jt808项目可执行jar包

工程目录和包命名规范

我现在根据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服务器层

。。。

。。。。。

。。。。

完备的开发手册可以帮助开发者理解整个开发平台

部标监控平台开发手册

 

数据字典:

部标监控平台数据字典

 

主界面

 

部标808监控平台主界面

 

支持百度高德地图聚合

百度高德地图聚合

支持海量车辆在地图上的位置显示和移动,通过颜色区分车辆的在线状态和停车行驶状态

海量车辆GPS位置地图显示

 

海量车辆位置在百度地图上显示

支持车辆GPS状态和地图图标自定义:

车辆地图图标定义


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于Spring4+SpringMVC4+Mybatis3+Hibernate4+Junit4框架构建高性能企业级的部标GPS监控平台 的相关文章

  • 计算小距离用什么公式

    Hy 我需要计算 2 个 GPS 点之间的距离 我读了这个问题计算地理邻近度的公式 https stackoverflow com questions 2096385 formulas to calculate geo proximity但
  • 谷歌地图可以根据小时分钟秒绘制点吗

    我正在尝试绘制以时分秒秒格式提供给我的 GPS 数据 GLatLng 会采用这种形式吗 还是我需要先转换它 很难在互联网上找到与此相关的任何内容 如果可以采用这种格式 我们将不胜感激 据我所知它不接受这种格式 但转换它真的很容易 只需计算一
  • 需要 Android 活动等待获取 GPS 位置

    对不起我的英语不好 我正在尝试从 GPS 获取单个位置以添加全局变量纬度 经度 GPS 打开 但在从 GPS 检索数据之前活动仍在继续 换句话说 我的需求 仅当找到位置并且填充了经度和纬度变量时 方法 getCurrentLocation
  • Android上的“覆盖”尺寸可以与谷歌地图一起缩放吗?

    我已经能够使用 MapActivity 和 ItemizedOverlay 通过 Eclipse 在 Android 上的谷歌地图上绘制叠加层 但是当地图放大和缩小时 叠加层的大小不会改变 我希望叠加层 固定 在地图上 并随地图一起放大和缩
  • Android LocationManager.getLastKnownLocation() 返回 null

    因此 我尝试在应用程序中对 GPS 坐标进行一次采样 我不想创建 LocationListener 对象来不断获取 GPS 更新 我想等到收到坐标 然后继续执行另一项任务 这是一个代码片段 LocationManager lm Locati
  • 通过js获取WebView中的位置

    我正在尝试创建 WebView 它将通过 js 获取 GPS 本地化 但是当我单击应该显示本地化的按钮时 在android 4 1 1 模拟器 中 错误代码2 无法启动地理定位服务 在 android 4 1 2 phone 中什么也没有发
  • 如何在android中离线获取纬度和经度?

    我想在 WiFi 和 Gps 关闭时获取当前位置 纬度和经度 可以从移动 SIM 网络获取纬度和经度 我在谷歌上搜索了更多 但没有得到满意的答案 从我昨天的经验来看question https stackoverflow com q 220
  • 动态更改 GPS LocationListener 的 minTime

    我正在编写的应用程序使用 GPS 位置管理器服务 requestLocationUpdates 但我希望能够更改整个程序中的最小时间和最小距离参数 我在创建时初始化位置侦听器 但我不知道如何更改这些参数 甚至不知道是否可以这样做 这样做的主
  • 我如何从 JMapViewer 世界地图中获取鼠标单击位置

    我正在使用地图浏览器 http wiki openstreetmap org wiki JMapViewerjar 在 JPanel 上显示世界地图 在地图上我添加MapMarkerDot s这是 GPS 点 问题是当我单击MapMarke
  • 如何从广播接收器中取消注册侦听器并停止服务

    在我的应用程序中 我有一个广播接收器 当接收到短信中的关键字时 它会启动一项跟踪手机 GPS 位置的服务 我这样做使用 context startService new Intent context TrackGPS class 我还需要能
  • GMSPolyline 非常大的内存峰值

    在允许用户在各种不同类型的地图上显示我们称之为轨迹的复杂位置点列表的 GPS 应用程序中 每个轨迹可以包含 2k 到 10k 个位置点 当轨迹在非 Google 地图类型上呈现时 它们会被大量剪切 修剪和路径简化 这是为了降低内存使用量并提
  • 使用 GPS 获取 Android 手机的位置

    我还有一个关于基本 Android 编程的问题 如何访问 GPS 来获取运行应用程序的手机的当前位置 检索信息需要多长时间 在这种情况下 GPS 可能被禁用 如何再次启用 禁用它 必须在 andorid 清单中授予哪些权限 问候并感谢您的回
  • Android 应用无法获取位置权限

    我的清单中有以下内容
  • 如何将 GPS 数据从 Android 发送到网站?

    我是 Android 和 Web 服务开发新手 目前我正在开发Android程序 该程序将发送经度和纬度信息到asp net网站 以显示位置更改网站地图 问题是 如何将此数据发送到网站 最佳实践 对合适框架的任何建议 从Android应用程
  • Android:计算两个位置之间距离的最佳方法

    我在这个主题上做了一些研究 但有很多观点并没有给出一个清晰的图像 我的问题是这样的 我正在为 Android 开发一个基于 GPS 的应用程序 在其中我想实时了解 Android LocationManager 指定的当前位置与其他位置之间
  • PWA 可以访问联系人、GPS 或使用手机摄像头吗?

    PWA 可以访问联系人 GPS 或使用手机摄像头吗 这在任何系统 ios android 中都可能吗 是否有任何开发计划来实现这些功能 PWA 无法克服一些限制 you cannot访问电话上的联系人列表 另一方面 你can拍照并使用 GP
  • 在尝试使用 GPS 之前如何检查 GPS 是否已启用

    我有以下代码 但效果不好 因为有时 GPS 需要很长时间 我该如何执行以下操作 检查GPS是否启用 如果启用了 GPS 请使用 GPS 否则请使用网络提供商 如果 GPS 时间超过 30 秒 请使用网络 我可以使用时间或 Thread sl
  • 是否可以自定义区域形状?核心位置

    例如 至少我想要一个正方形 矩形 道路的形状作为我的区域 不它不是 根据文档 目前唯一的区域类是 CLCircularRegion 显然是圆形 和 CLBeaconRegion 基于与 iBeacon 的接近度 未来苹果可能会添加对自定义形
  • Android 上下文不在活动中?还有其他无活动编程吗?

    我会非常努力地将其变成一个综合问题 我正在编写一个方法来获取一个包含 Android 设备城市名称的字符串 该名称由LocationManager and getLastKnownLocation 等等 然后我意识到我需要在另一个活动中再次
  • 检查用户设备的 GPS 是否开启

    我正在使用 jQuery Mobile 和 PHP 开发一个应用程序 我没有使用 Phonegap 或其他框架 我需要找到用户的geolocation 如果用户设备的 GPS 关闭 那么我无法获取位置 现在我需要查找用户设备的 GPS 是否

随机推荐

  • 拓展:EPSILON = 1e-8

    EPSILON 是一个希腊字母 叫做艾普西隆 它代表一个常量 通常用于表示一个很小的浮点数值 其值为 1e 8 在计算机中 由于浮点数的精度限制 当两个浮点数非常接近时 它们可能由于舍入误差而不相等 为了解决这种问题 常常会使用一个很小的数
  • 图论 笔记

    关于存图 如果是有权值的边 可以用pair define pii pair
  • springboot集成es 使用x-pack

    引入架包
  • 软件测试工程师笔试题及答案(二)

    测试人员考试试卷二 考试时间90分钟 满分100分 一 判断题 每题2分 正确的 错误的 1 好的测试员不懈追求完美 2 测试程序仅仅按预期方式运行就行了 3 不存在质量很高但可靠性很差的产品 4 软件测试员可以对产品说明书进行白盒测试 5
  • 代码随想录算法训练营19期第36天

    435 无重叠区间 代码随想录 初步思路 重叠区间 贪心 总结 按照右边界排序 从左向右记录非交叉区间的个数 最后用区间总数减去非交叉区间的个数就是需要移除的区间个数 如果按照左边界排序直接求 重叠的区间 使用变量count为记录重叠区间数
  • 单一职责原则

    单一职责原则 就一个类而言 应该只有一个引起它变化的原因 如果一个类承担的职责过多就等于把这些职责耦合在一起 至少会造成以下两方面的问题 我们要去修改该类中的一个职责可能会影响到该类的其它职责 这种耦合会导致脆弱的设计 当变化发生时 设计会
  • 一个月能做什么?成长&感悟分享

    一个月做了什么 八月做了些什么 单词打卡 第一件事情就是单词打卡 英语很差的我 一样继续打卡 今天是第736天 当你还在纠结扇贝和不背 可可英语哪一个好的时候 别人已经同时使用了 当你还在咨询学编程 敲代码需不需要英语的时候 别人已经开始同
  • springboot整合log4j打印日志

    1 排除springboot自带log依赖
  • Hamcrest 测试匹配框架

    为什么要用Hamcrest匹配器框架 Hamcrest是一款软件测试框架 可以通过现有的匹配器类检查代码中的条件 也可以通过自定义的匹配器实现 要在JUnit中使用Hamcrest匹配器 可以用它的assertThat语句 并且可添加一个或
  • pycharm打开chrome自动退出解决方法

    先查谷歌版本和驱动版本 from selenium import webdriver driver webdriver Chrome str1 driver capabilities browserVersion 查看chrome版本 st
  • ARP欺骗

    目录 一 ARP协议 二 ARP欺骗的原理 三 实验环境 四 实验步骤 一 ARP协议 每一个主机都有一个ARP高速缓存 此缓存中记录了最近一段时间内其它IP地址与其MAC地址的对应关系 如果本机想与某台主机通信 则首先在ARP高速缓存中查
  • ns2无线局域网隐藏节点仿真实验

    ns2无线局域网隐藏节点仿真实验 实验内容 实验原理 实验过程 相关模块安装 仿真模块 问题总结 问题一 问题二 问题三 实验内容 无线网络与移动技术第二次实验 用ns2完成无线局域网隐藏节点仿真实验 实验原理 隐藏节点指在接收节点的覆盖范
  • python中 random.randint 和 random.randrange 的区别

    python中 random randint 和 random randrange 的区别 在python中 通过导入random库 就能使用randint 和 randrange 这两个方法来产生随机整数 那这两个方法的区别在于什么地方呢
  • babel转译: es6转es5

    1 ECMAScipt和JavaScript的关系 96年javascript之父netscape 交给国际标准组织ECMA管理 ECMAScipt是javascript的一种规范 javascript是ECMAJavascript的一种实
  • 标定工具箱 OpenCalib: 自动驾驶多传感器的一个开源标定工具箱

    2022年5月30日上传arXiv的论文 OpenCalib A Multi sensor Calibration Toolbox for Autonomous Driving 作者来自商汤科技和上海AI实验室 准确的传感器标定是实现智能车
  • SpringBoot数据库密码动态配置

    一般的开发 我们都习惯把数据库密码配置在属性文件中 这样配置方便好用 但是缺点也是很明显的 这样配置的密码是静态的 明文的 一般都安全要求比较严格的公司 这些密码都会被统一管理 定期修改 我们需要动态获取密码 下面是结合SpringBoot
  • 功能升级,数据同步更便捷!场景化数据同步助您提效60%!

    在企业数仓建设初期 为了保障数字化转型的落地效果 需要提供充足的数据资源 除了基础的数据抽取 转换和加载等过程 数据的同步也是重要环节之一 数据同步常用于数仓ODS ADS层的建设 通过不同数据源的同步 保障数据的及时性和准确性 从而满足不
  • LeetCode 171. Excel 表列序号

    题目链接 https leetcode cn problems excel sheet column number 思路如下 类似于 26 26 26 进制转十进制 按权展开求和 C 代码如下 class Solution public i
  • mysql到底哪里错了#1054 - Unknown column '' in 'field list'

    和 是不同的两个符号 是字段名的的定界符 就是键盘上1左边那个符号 而 是单引号 是用在字符串上的的 所以后面的应该是 values 王柳 now 工人 注1 如果你的id是自增长 那就不能出现在语句中 应该是insert into tes
  • 基于Spring4+SpringMVC4+Mybatis3+Hibernate4+Junit4框架构建高性能企业级的部标GPS监控平台

    基于Spring4 SpringMVC4 Mybatis3 Hibernate4 Junit4框架构建高性能企业级的部标GPS监控平台 开发企业级的部标GPS监控平台 投入的开发力量很大 开发周期也很长 选择主流的开发语言以及成熟的开源技术