XXL-JOB使用命令行的方式啓動python時,日誌過多致使阻塞的解決方式

1、Runtime.getRuntime().exec()的阻塞問題

這個問題也不能算是XXL-JOB的問題,而是Java的Runtime.getRuntime().exec()形成的,BufferedReader的緩衝區大小有限,當不能及時從緩衝區中把輸出取走,那麼緩衝區滿了以後就會致使程序阻塞;java

一、如何解決

最簡單的方式就是將正常輸出和異常輸出使用兩個不一樣的線程進行操做spring

Process process = Runtime.getRuntime().exec(command);
StreamOutter errorGobbler = new StreamOutter(process.getErrorStream(), "ERROR");
// any output?
StreamOutter outputGobbler = new StreamOutter(process.getInputStream(), "OUTPUT");

// kick them off
errorGobbler.start();
outputGobbler.start();
// command exit
process.waitFor();
public class StreamOutter extends Thread {
    InputStream is;
    String type;

    public StreamOutter(InputStream is, String type) {
        this.is = is;
        this.type = type;
    }

    public void run() {
        System.out.println("進入" + type + "處理線程");
        BufferedReader br = null;
        try {

            InputStreamReader isr = new InputStreamReader(is);
            br = new BufferedReader(isr);
            String line;
            System.out.println("開始處理" + type + "線程數據");
            while ((line = br.readLine()) != null) {
                XxlJobLogger.log(line);
            }
        } catch (IOException ioe) {
            ioe.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }
    }
}

二、若是按照1中寫了以後也能夠採用BufferedReader的read方式來快速處理

br = new BufferedReader(isr);
 int one = null;
 if((one=br.read()) != -1){
 System.out.println((char) one);
 }

br.read()是挨個取出全部字符,因此須要進行對one進行拼接後在使用\n進行拆分,有點相似於,一次性讀出文件的全部內容的方式,須要本身進行處理後獲得行數據springboot

我這裏使用第一種方式已經沒有問題了,至於第二種方式則須要自行探索了,若是有使用第二中方式解決的同窗,能夠指點一二;dom

2、Spring Boot經過命令行傳入的參數

方式一:

java -jar xxx.jar aaa bbb ccccthis

傳了3個參數,分別是aaa,bbb,ccc命令行

經過main方法的參數獲取線程

方式二:

java -jar xxx.jar --test.test=aaa --domain=bbbcode

是springboot的寫法,能夠經過@Value("${test.test}")@Value("${domain}") 獲取get

我的博客 蝸牛博客

相關文章
相關標籤/搜索