总结:独立开发 jar 包组件——功能主要是支持查询数据库的所有表数据

前言:开发完一个项目,必定总结,这次就将总结记录在博客,第一次开发组件 jar 包,包含前端,后台,中间遇到好多问题,这里一一描述。转载请注明出处: https://www.cnblogs.com/yuxiaole/p/9775016.html

github地址:yuleGH github

配置步骤详见 github。喜欢就star。如果需要 jar 包可留言。

一、背景

  这两周由于开发过程中发现每个项目都会做一件事,那就是开发一些页面,用于查询某些单表的数据,不是面向用户的,只是便于我们排查线上问题,这样就不需要去提线上日志。

  于是,便有了这个系统。这个系统的目标肯定是需要支持配置化、扩展性、独立性等。并且其他项目只需引入这个 jar 包,然后配置一下,就可以使用前端页面,类似阿里巴巴的 com.alibaba.druid 的 jar 包。

二、确定技术方向

  使用 IDEA 开发。

  实现:maven + servlet(3.x以上) + spring + mybatis + oracle

  前端实现:vue + element ui + require.js 的 CDN 方式

三、实现的功能

  1、代码 down 下来,可以打包为 jar 包供其他项目使用。 

  2、通过配置 json 文件实现指定表查,指定字段不查。 

  3、支持多数据源,与业务隔离。

  4、页面支持导出功能。

  5、页面支持查询条件动态组装(没有 sql 注入)。

  6、现支持 oracle 数据库。

  7、现支持 oracle 大字段类型的查询:Long、Blob、Clob

四、必须要实现的技术点

  1、IDEA 如何打 jar 包?

    参考另一篇博客: IDEA 构建为了打 jar 包的工程,包含 maven 打 jar 包的过程

   2、其他项目如何能够访问 jar 包里面的主页 index.html?

    这里是参考阿里巴巴 druid 的做法,使用一个 servlet 来处理。

    在 servlet 中可以直接返回这个页面,也可以重定向到这个页面。

  3、主页 index.html 中又如何访问 js、css、字体文件?

    这里要么采用那个 servlet,在 servlet 中获取文件流给 response。

    要么就是采用 servlet 3.x 以上的特性来直接访问 jar 包的静态文件。

    参考另一篇博客: html 如何访问 jar 包里面的静态资源(js、css、字体等)

  4、主页 index.html 中如何使用 ajax 访问后台获取数据?

    这里采用的是,还是使用那个 servlet,只是 url 规定为 .json 结尾,然后在 servlet 中针对 .json 结尾的处理采用 json 方式来处理。

    参考另一篇博客:servlet 中处理 json 请求,并访问 service 类,返回处理结果

  5、spring 如何配置多数据源?并且和业务系统的数据源要隔离,不能相互影响。

    参考另一篇博客:springmvc 配置多个数据源,并动态切换

   6、oracle 中如何查询当前用户可以看到的表名、表对应的所有字段?

    参考另一篇博客:oracle 中如何查询当前用户可以看到的表名、表对应的所有字段

  7、前端如何实现动态渲染表格?

    参考另一篇博客:vue + element ui 实现实现动态渲染表格

  8、servlet 在处理 ajax 请求时,接收到前端参数,如何传递给 service 层?

    参考另一篇博客:servlet 中处理 json 请求,并访问 service 类,返回处理结果

  9、excel 导出使用 poi,但是 poi 版本不向下兼容,版本之间是由差异的,版本不同,编译容易通不过,如何处理?

    我发现不同版本之间的差异主要在于:导出 excel 时对字体、样式等个性化设置的代码有差异。

    所以我这里索性就将导出 excel 时所有个性化设置去掉,保证不同版本的 poi 都能编译通过。

    因为这个组件主要用于线上排查问题用,不面向用户,所以导出 excle 的字体文本的个性化设置可以去掉,使用 poi 默认的设置就好。

五、过程中遇到的其他问题

  1、解决访问 jar 包里面的字体报错:OTS parsing error: incorrect file size in WOFF header

  2、解决:java 读取 resources 下面的 json 文件

  3、解决:jsp 页面不全,response 内容不完整

  4、解决:oracle+myBatis ResultMap 类型为 map 时返回结果中存在 timestamp 时使用 jackson 转 json 报错

  5、解决:oracle+myBatis ResultMap 类型为 map 时,表字段类型有 Long/Blob/Clob 时报错

 

转载请注明出处: https://www.cnblogs.com/yuxiaole/p/9775016.html

 

posted @ 2018-10-11 21:41  取个名字吧  阅读(1006)  评论(0编辑  收藏  举报