2012-02-18 4 views
2

하나의 스레드에서 루프 (근본적으로 24/7)를 실행하고 다른 스레드에서 병렬 처리를 수행하는 대규모 분석 작업을 수행하는 Java 프로그램이 있습니다. 나는 현재 상수를 사용하여 작업을 보내기 위해 다른 활성 스레드의 수를 구성 중입니다. 낮에는이 값을 좀 더 작은 값 (예 : 4)으로 설정하여 내 컴퓨터 리소스 중 일부를 대화 형으로 사용할 수 있도록 남겨 두었습니다. 밤새 (또는 다른 시간에 내 컴퓨터를 무인 상태로 두는 경우) 프로그램에서 더 많은 수의 스레드 (예 : 8)를 사용하고 싶습니다. 현재 프로그램을 중단하고, 상수를 변경하고, 다시 빌드하고, 프로그램을 다시 시작합니다 (모든 8 개의 스레드를 다시 시작해야합니다). 이것은 정기적으로하기에는 지루해지고 있습니다.실행중인 프로세스 외부에서 Java 변수의 값 변경

Java의 외부에서 단일 명령/스크립트를 입력하여 프로그램 동작을 변경하여 실행 상태를 유지하면서 입력에 따라 유휴 스레드 수가 달라지는 간단한 시스템을 설정하고 싶습니다. 나는 SO를 찾아서 해답을 찾았으며 이것이 환경 변수로는 가능하지 않다는 것을 알고 있습니다. 두 가지 가능성을 생각해 볼 수 있습니다 : 텍스트 파일에 값을 설정하고 루프의 각 사이클에서 값을 읽습니다. 내 프로그램이 상호 작용하는 MySQL DB에 값을 저장하십시오.

이러한 솔루션이 저에게는 효과적 일 수 있지만, 실행중인 프로세스 외부에서 Java "구성 변수"를 액세스 할 수있는 다른 표준적인 방법이 있는지 알고 싶습니다.

관련성이있는 경우 Eclipse 내에서 프로세스를 실행하고 있습니다.

편집 : 그냥 다른 가능성을 생각 : USR1과 USR2 신호 ...

답변

1

당신은 JMX를 찾고 :

http://docs.oracle.com/javase/tutorial/jmx/index.html
http://java.sun.com/developer/technicalArticles/J2SE/jmx.html (예제 코드)

당신이 돈이 ' 모든 것을 끝내기를 원한다면 시작시 구성에 대해 읽는 .properties 파일을 사용할 수 있습니다. 스레드가 변경 사항을 파일에서 모니터링하도록하고, 변경 한 경우 (편집 했으므로) 스레드를 다시 읽은 다음 이에 따라 프로그램 동작을 변경하십시오. (Java 7에는 파일 모니터링 기능이 내장되어 있습니다. 이전 버전에서는 코드를 직접 작성해야하지만 웹에서 예제를 찾을 수 있습니다.)

+0

예, 파일 모니터링/읽기는 제가 이미 기울어 진 해결책이지만 덜 쓸데없는 것을 바라고있었습니다. JMX는 실제로 개인적인 편의를 위해 깔끔하게 보이지만 과장 될 것입니다. –

+0

Spring 프레임 워크는 @ManagedResource와 같은 주석을 통해 JMX를 구현하는 것을 상당히 간단하게 만듭니다. – GreyBeardedGeek

1

특정 포트에서 항상 연결을 기다리고 있던 추가 스레드를 추가 할 수 있습니다. 그 포트상의 프로그램에 메세지를 보내는 간단한 프로그램 (아마 localhost로부터). 이 메시지를 받으면 프로그램은 원하는 설정을 변경할 수 있습니다.

+0

그건 ... JMX가 제공하는 것 등입니다. –

+0

흥미로운 아이디어. 주 스레드는 이미 포트 8800에서 웹 서버 프로세스를 실행하고 있으므로 이러한 요청을 해석 할 수 있습니다. –

+1

"왜 우리 자산 중 하나라고하지 않았습니까?" - 신부 공주 : –

관련 문제