java bean generator thrift of java bean config 自动配置一

àì夳堔傛蜴生んèń 2022-05-17 02:49 191阅读 0赞

昨天PM说要把微服务优化一个量级,因为用的是apache thrift 做RPC; 那首当其冲的就要把thrift 的gen-java 这个client手动生成操作痛点要解决 ;目前转换效果很差,BUT,这不重要,本文介绍的是使用java代码 在指定目录下执行DOS命令。这是一期,后期版本update定要做成类似generatorMybatisConfig.xml 的eclipse插件

开门见山关键点:

Runtime.getRuntime().exec(command) 这句代码是执行系统命令的关键。

  1. exec()函数有很多重构方法,主要包含如下
  2. public Process exec(String command)-----在单独的进程中执行指定的字符串命令。
  3. public Process exec(String [] cmdArray)---在单独的进程中执行指定命令和变量
  4. public Process exec(String command, String [] envp)----在指定环境的独立进程中执行指定命令和变量
  5. public Process exec(String [] cmdArray, String [] envp)----在指定环境的独立进程中执行指定的命令和变量
  6. public Process exec(String command,String[] envp,File dir)----在有指定环境和工作目录的独立进程中执行指定的字符串命令
  7. public Process exec(String[] cmdarray,String[] envp,File dir)----在指定环境和工作目录的独立进程中执行指定的命令和变量
  8. package com.generatorThrift;
  9. import java.io.BufferedReader;
  10. import java.io.File;
  11. import java.io.IOException;
  12. import java.io.InputStream;
  13. import java.io.InputStreamReader;
  14. import java.io.Reader;
  15. /**
  16. *
  17. * @title alex of RPC SERVER CONFIG
  18. * @project thrift-generator平台
  19. * @note java bean generator thrift of java bean config
  20. * @author alex
  21. * @date 2018年8月5日
  22. */
  23. public class TestThriftexe {
  24. public static void main(String[] args) {
  25. Runtime rt = Runtime.getRuntime();// java的API,获得一个对象
  26. // rt.exec("notepad.exe");// 与在cmd中输入一个notepad的效果一样的
  27. // try {
  28. // rt.exec("cmd /c cd d:\\java\\tools\\thrift\\thrift-0.9.3\\evshare thrift -r --gen java .\\IServiceEvreadyOrder.thrift");
  29. // } catch (IOException e) {
  30. // e.printStackTrace();
  31. // }
  32. convert("IServiceEvreadyOrder.thrift","D:\\java\\tools\\thrift\\thrift-0.9.3\\evshare");
  33. }
  34. public static void convert(String filePath,String fileName){
  35. try {
  36. File dir = new File(filePath);//此处是指定路径
  37. String[] cmd = new String[] { "cmd", "/c", "thrift -r --gen java "+fileName};// cmd[2]是要执行的dos命令
  38. System.out.println(cmd[2]);
  39. Process process = Runtime.getRuntime().exec(cmd,null,dir);
  40. // 记录dos命令的返回信息 下面我没用到,因为thrift 指定了生产目录gen-java,待研究更优化
  41. StringBuffer resStr = new StringBuffer();
  42. // 获取返回信息的流
  43. InputStream in = process.getInputStream();
  44. Reader reader = new InputStreamReader(in);
  45. BufferedReader bReader = new BufferedReader(reader);
  46. for (String res = ""; (res = bReader.readLine()) != null;) {
  47. resStr.append(res + "\n");
  48. }
  49. System.out.println(resStr.toString());
  50. bReader.close();
  51. reader.close();
  52. process.getOutputStream().close(); // 不要忘记了一定要关
  53. } catch (IOException e) {
  54. // TODO Auto-generated catch block
  55. e.printStackTrace();
  56. }
  57. }
  58. }

70

ps:特别鸣谢:小小小鸟blog

  1. cmd /c dir 是执行完dir命令后关闭命令窗口。
  2. cmd /k dir 是执行完dir命令后不关闭命令窗口。
  3. cmd /c start dir 会打开一个新窗口后执行dir指令,原窗口会关闭。
  4. cmd /k start dir 会打开一个新窗口后执行dir指令,原窗口不会关闭。
  5. 可以用cmd /?查看帮助信息。

发表评论

表情:
评论列表 (有 0 条评论,191人围观)

还没有评论,来说两句吧...

相关阅读

    相关 自动装配bean

    1.通过autowire中的byName实现自动装配 自动与set方法set后面的名字相同的bean的id匹配 注意:id必须上下文唯一,且和自己对象中set方法后边