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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32447321/article/details/81433700

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

开门见山关键点:

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

exec()函数有很多重构方法,主要包含如下
public Process exec(String command)-----在单独的进程中执行指定的字符串命令。
 
 public Process exec(String [] cmdArray)---在单独的进程中执行指定命令和变量
 
 public Process exec(String command, String [] envp)----在指定环境的独立进程中执行指定命令和变量
 
 public Process exec(String [] cmdArray, String [] envp)----在指定环境的独立进程中执行指定的命令和变量
 
 public Process exec(String command,String[] envp,File dir)----在有指定环境和工作目录的独立进程中执行指定的字符串命令
 
 public Process exec(String[] cmdarray,String[] envp,File dir)----在指定环境和工作目录的独立进程中执行指定的命令和变量
package com.generatorThrift;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;

/**
 * 
 * @title alex of RPC SERVER CONFIG
 * @project thrift-generator平台
 * @note java bean generator thrift of java bean config
 * @author alex
 * @date 2018年8月5日
 */
public class TestThriftexe {

	public static void main(String[] args) {

		Runtime rt = Runtime.getRuntime();// java的API,获得一个对象

//			rt.exec("notepad.exe");// 与在cmd中输入一个notepad的效果一样的
//			try {
//				rt.exec("cmd /c cd d:\\java\\tools\\thrift\\thrift-0.9.3\\evshare  thrift -r --gen java	.\\IServiceEvreadyOrder.thrift");
//			} catch (IOException e) {
//				e.printStackTrace();
//			}
			
		convert("IServiceEvreadyOrder.thrift","D:\\java\\tools\\thrift\\thrift-0.9.3\\evshare");
	}
	public static void convert(String filePath,String fileName){
		
		try {
			File dir = new File(filePath);//此处是指定路径	
			String[] cmd = new String[] { "cmd", "/c",  "thrift -r --gen java "+fileName};// cmd[2]是要执行的dos命令
			System.out.println(cmd[2]);
			Process process = Runtime.getRuntime().exec(cmd,null,dir);
				
			// 记录dos命令的返回信息  下面我没用到,因为thrift 指定了生产目录gen-java,待研究更优化
	           	 StringBuffer resStr = new StringBuffer();  
	           	 // 获取返回信息的流  
	           	InputStream in = process.getInputStream();  
	            	Reader reader = new InputStreamReader(in);  
	            	BufferedReader bReader = new BufferedReader(reader);  
	           	for (String res = ""; (res = bReader.readLine()) != null;) {  
	               		resStr.append(res + "\n");  
	                }  
	           	System.out.println(resStr.toString());
	            	bReader.close();  
	           	reader.close();  
	            	process.getOutputStream().close();  // 不要忘记了一定要关
	            
		    } catch (IOException e) {
				// TODO Auto-generated catch block
			e.printStackTrace();
		    }
		}

}

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

cmd /c dir 是执行完dir命令后关闭命令窗口。

cmd /k dir 是执行完dir命令后不关闭命令窗口。

cmd /c start dir 会打开一个新窗口后执行dir指令,原窗口会关闭。

cmd /k start dir 会打开一个新窗口后执行dir指令,原窗口不会关闭。

可以用cmd /?查看帮助信息。

猜你喜欢

转载自blog.csdn.net/qq_32447321/article/details/81433700