背景:服务请求一体化项目升级到V4的服务请求类型时,所有配置库数据迁移到各省的业务库中,虽然数据出现大量冗余,但是这是唯一能解决V4 大量服务请求类型不在同一张表中的骚操作了,防止查询服务请求类型时GG。但是唯一考虑不足的就是对于全网需求的码表数据脚本新增出现脚本编写困难,大量重复没有意义的工作,占据了开发人员的大把时间,同时,对DBA来说这也是个噩梦,但是没有办法,规定不改就是这样。

针对以上问题,为了释放开发劳动力的大把时间(懒) 小民构思出了以下的工具。

根据开发人员提供的脚本模板自动生成其他30+省的数据库脚本。

本工具的实现思路:

各省端脚本除了 省份编码不同外,还有就是抬头不同,抬头包含 数据库ip 数据库名称,联系人,电话,操作条数。我们可以将31个省的数据库IP 用户名 配置在数据库中,其他数据由用户在上传文件时提供。 后台首先查询抬头模板,替换掉用户提供的数据,再解析SQL模板,查询各省配置数据,遍历动态生成不同省的脚本文件。

数据库表涉及:

  1. -- 抬头模板表
    CREATE TABLE `t_head_templat` (
  2. `uid` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'PRK',
  3. `template_code` varchar(32) DEFAULT NULL COMMENT '模板类型ID',
  4. `template_rmk` varchar(32) DEFAULT NULL COMMENT '模板类型名称',
  5. `template_value` varchar(2000) DEFAULT NULL COMMENT '模板内容',
  6. `crtime` datetime DEFAULT NULL COMMENT '创建时间',
  7. PRIMARY KEY (`uid`)
  8. ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
  1. -- 省份数据库IP
  2. CREATE TABLE `t_provcode_ip` (
  3. `uid` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'PRK',
  4. `provcode` varchar(32) DEFAULT NULL COMMENT '省份编码',
  5. `provname` varchar(32) DEFAULT NULL COMMENT '省份名称',
  6. `ip` varchar(32) DEFAULT NULL COMMENT 'ip',
  7. `port` varchar(10) DEFAULT NULL COMMENT '端口',
  8. `sql_name` varchar(20) DEFAULT NULL COMMENT '数据库名',
  9. `user_name` varchar(20) DEFAULT NULL COMMENT '数据库用户名',
  10. `crtime` datetime DEFAULT NULL COMMENT '创建时间',
  11. PRIMARY KEY (`uid`)
  12. ) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8

1.文件上传

  文件格式校验

  必填参数校验

2.解析sql文件,存放于list中

3.查询省份IP及抬头模板

4.遍历省份数据库信息 组装抬头,将数据依次写入指定路径

5.所有省份数据进行压缩

6.提供下载数据页面

7.提供清楚指定用户数据接口

代码不提供了,没有多少技术含量,这里说下需要注意的细节:

1.使用IO的时候一定记得flush()

2.使用表单上传文件的时候带参数的操作 贴一部分吧

  1. function submitFile() {
  2.  
  3. var fileObj = document.getElementById("customFile").files[0]; // js 获取文件对象
  4. var FileController = "uploadSql"; // 接收上传文件的后台地址
  5.  
  6. var userId = $('#userId').val();
  7. var tel = $('#tel').val();
  8. var totalId = $('#totalId').val();
  9. var fileNameId = $('#fileNameId').val();
  10.  
  11. // FormData 对象
  12. var form = new FormData();
  13.  
  14. form.append("file", fileObj); // 文件对象
  15. form.append("userName", userId); // user
  16. form.append("phone", tel); // phone
  17. form.append("total", totalId); // 总数
  18. form.append("fileName", fileNameId); // 文件名称
  19.  
  20. //参数校验
  21. if(userId.trim() === "" || tel.trim() === "" || totalId.trim() === "" || fileNameId.trim() === ""){
  22. layer.msg("以上参数均为必填参数,请正确输入", {icon: 6, time: 2000});
  23. return;
  24. }
  25. if(fileObj){
  26. if(fileObj.name.substring(fileObj.name.length-4) != ".txt"){
  27. layer.msg("文件模板必须为txt类型", {icon: 6, time: 2000});
  28. return;
  29. }
  30. }else{
  31. layer.msg("请选择上传文件", {icon: 6, time: 2000});
  32. return;
  33. }
  34. $.ajax({
  35. type: "POST",
  36. url: "uploadSql",
  37. data: form,
  38. processData: false,
  39. contentType: false,
  40. cache: false,//上传文件无需缓存
  41. success: function (data) {
  42. window.location.href = "downLoadSqlFiles";
  43. }
  44. });
  45. }

3.写文件的路径,也是最坑的地方。这里一定要使用绝对路径,不能使用相对路径。

  我的打的war包部署在Linux服务器上,开始是已相对路径写的,本地测试没有一点问题,但是上了环境后就出现了大问题

  1.数据写的地方不对,数据写到Tomcat bin目录下了,一开始没有想到这个问题,一直百度都没有答案,后来 find / -name 翟育涛.zip 发现了数据存错位置了

  2.解决方法,使用绝对路径,首先是绝对路径的获取,然后拼接文件要放的数据。

  

  1. String path = null;
  2. try {
  3. path = ResourceUtils.getURL("classpath:").getPath()+"/static/sql/"+ MapUtils.getString(map,"userName");
  4. } catch (FileNotFoundException e) {
  5. e.printStackTrace();
  6. }

Over 欢迎使用

操作手册:

重复脚本自动生成工具操作手册

--by 宅小涛

1.首先您应该准备您的脚本模板 以Insert脚本为例,需要注意以下几点:

1.文件应该是txt文件。

2.每条语句都应该是正确无误的可执行语句。

3.每条插入语句不要换行,按照中移规范编写。

4.脚本应以云南编写 即 provcode 应该为 00030016

5.脚本不要添加抬头。

正确脚本 eg:

2.根据页面要求,您必须输入以下内容:

1.联系人、电话:根据中移数据脚本规范要,脚本内部抬头的注释里面需要添加联系人和电话;

2.操作数量:抬头中填写的操作的数据量,如果已知请填写具体数字,该字段同样是必填,可以填写未知

3.文件名称:生成的脚本的名称,因为生成的脚本是31个省+2个二线机构+重客的脚本,因此名称需要加以区分

例如需要生成的脚本的命名如下:

则这里需要填写的文件名称为:

洛阳-服务请求-生产-@@-ngwf-20190314-2-2-insert-sql

注意:1.文件名称不要加后缀;2.@@必须存在,脚本会被覆盖。3.不要添加脚本顶的注释,注释会自动生成。

项目地址 : http://zhaixt.info/screenShot/generatorIndex

自动生成业务库码表insert脚本的更多相关文章

  1. mybatis多表查询,自动生成id

    主要是在配置文件中,配置好所要包含的字段. 类关系:account----role,1对1 account包含role类 java类: public class Account{ private In ...

  2. SQL Server镜像自动生成脚本

    SQL Server镜像自动生成脚本 镜像的搭建非常繁琐,花了一点时间写了这个脚本,方便大家搭建镜像 执行完这个镜像脚本之后,最好在每台机器都绑定一下hosts文件,不然的话,镜像可能会不work 1 ...

  3. airtest+poco多脚本、多设备批处理运行测试用例自动生成测试报告

    一:主要内容 框架功能及测试报告效果 airtest安装.环境搭建 框架搭建.框架运行说明 airtest自动化脚本编写注意事项 二:框架功能及测试报告效果 1. 框架功能: 该框架笔者用来作为公司的 ...

  4. oracle数据库高级应用之《自动生成指定表的insert,update,delete语句》

    /* * 多条记录连接成一条 * tableName 表名 * type 类型:可以是insert/update/select之一 */ create or replace function my_c ...

  5. 将表数据生成Insert脚本

    set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgo-- =============================================-- Author ...

  6. [QualityCenter]设置工作流脚本-新建缺陷时字段自动生成

    需求:新建缺陷时,自动生成缺陷状态.检查者和检查日期的值. 在脚本编辑器找到Defects_Bug_New函数,然后填写以下代码: Sub Defects_Bug_New    On Error Re ...

  7. Unity3D研究院之Machine动画脚本自动生成AnimatorController(七十一)

    以前的项目一直不敢用Machine动画,因为当时立项的时候Machine动画还不成熟,最近项目做得差不多了我能有点时间学习,我就想在研究学习学习Machine.用Machine动画的时候需要创建一个A ...

  8. Unity3D研究院之Machine动画脚本自动生成AnimatorController

    原地址: http://www.xuanyusong.com/archives/2811 以前的项目一直不敢用Machine动画,因为当时立项的时候Machine动画还不成熟,最近项目做得差不多了我能 ...

  9. 懒人小工具:自动生成Model,Insert,Select,Delete以及导出Excel的方法

    在开发的过程中,我们为了节约时间,往往会将大量重复机械的代码封装,考虑代码的复用性,这样我们可以节约很多时间来做别的事情.最近跳槽到一节webform开发的公司,主要是开发自己公司用的ERP.开始因为 ...

随机推荐

  1. Oracle DBA 必须掌握的 查询脚本:

    Oracle  DBA 必须掌握的 查询脚本: 0:启动与关闭 orcle 数据库的启动与关闭 1:连接数据库 2:数据库开启状态的实现步骤:       2-1:启动数据库           2- ...

  2. java http post/get 服务端和客户端实现json传输

    注:本文来源于<java http post/get 服务端和客户端实现json传输> 最近需要写http post接口所以学习下. 总的还是不难直接上源码! PostHttpClient ...

  3. web---资源的下载及中文乱码问题

    1.html网页,超链接交由Servlet处理 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  4. selenium的八大定位元素的方式

    #八大定位方式 from selenium import webdriver def BrowserOpen(): driver = webdriver.Chrome(); driver.maximi ...

  5. Spring Bean装配

    1. Bean注入三种方式: A. 包扫描 + 组件标注注解(@Controller/@Service/@Repository/@Component),适用场景:自己写的类: B. @Bean或xml ...

  6. windows10环境下的RabbitMQ安装步骤(图文)

    https://blog.csdn.net/weixin_39735923/article/details/79288578 记录下本人在win10环境下安装RabbitMQ的步骤,以作备忘. 第一步 ...

  7. WordPress 文章点赞

    Installation 上传 wp-zan目录 到 /wp-content/plugins/ 目录 在后台插件菜单激活该插件 添加 <?php wp_zan();?> 到需要的位置 De ...

  8. spring boot+mybatis+quartz项目的搭建完整版

    1. 利用spring boot提供的工具(http://start.spring.io/)自动生成一个标准的spring boot项目架构 2. 因为这里我们是搭建spring boot+mybat ...

  9. java集合遍历的几种方式总结及比较

    集合类的通用遍历方式, 用迭代器迭代: Iterator it = list.iterator(); while(it.hasNext()) { Object obj = it.next(); }   ...

  10. 一起学爬虫——如何爬取通过ajax加载数据的网站

    目前很多网站都使用ajax技术动态加载数据,和常规的网站不一样,数据时动态加载的,如果我们使用常规的方法爬取网页,得到的只是一堆html代码,没有任何的数据. 请看下面的代码: url = 'http ...