XXL-JOB 명령 행 을 사용 하여 python 을 시작 할 때 로그 가 너무 많아 서 막 히 는 해결 방법

2444 단어 spring
1.Runtime.getRuntime().exec()의 차단 문제
이 문 제 는 XXL-JOB 의 문제 라 고 할 수 없 으 며 자바 의 Runtime.getRuntime().exec()로 인 한 버퍼 크기 가 제한 되 어 있 습 니 다.버퍼 에서 출력 을 제때에 가 져 가지 못 하면 버퍼 가 가득 찬 후에 프로그램 이 막 힐 수 있 습 니 다.
1.어떻게 해결 하나
가장 간단 한 방법 은 정상 적 인 출력 과 이상 출력 을 두 개의 서로 다른 라인 으로 조작 하 는 것 이다

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();
                }
            }

        }
    }
}

2.만약 에 1 에 적 힌 대로 Buffered Reader 의 read 방식 으로 신속하게 처리 할 수 있 습 니 다.
 br = new BufferedReader(isr);
 int one = null;
 if((one=br.read()) != -1){
 System.out.println((char) one);
 }

br.read()는 각각 모든 문 자 를 꺼 내기 때문에 one 을 연결 한 후 n 으로 나 누 어야 합 니 다.파일 의 모든 내용 을 한꺼번에 읽 는 방식 과 비슷 합 니 다.스스로 처리 한 후에 줄 데 이 터 를 받 아야 합 니 다.
제 가 여기 서 첫 번 째 방식 을 사용 하 는 것 은 문제 가 없습니다.두 번 째 방식 은 스스로 탐색 해 야 합 니 다.만약 에 두 번 째 방식 으로 해결 하 는 친구 가 있다 면 하나,둘 을 지적 할 수 있 습 니 다.
\#2.Spring Boot 가 명령 행 을 통 해 들 어 오 는 인자\#\##방식 1:
java -jar xxx.jar aaa bbb cccc
aaa,bbb,ccc 등 3 개의 인 자 를 전 달 했 습 니 다.
main 방법의 매개 변 수 를 통 해 가 져 오기
방식 2:
java -jar xxx.jar --test.test=aaa --domain=bbb
springboot 의 쓰기 입 니 다.@Value("${test.test}")\@Value("${domain}")를 통 해 가 져 올 수 있 습 니 다.
달팽이

좋은 웹페이지 즐겨찾기