2011-04-20 8 views
0

텍스트 파일에서 기본 속성을로드하는 여러 API를 실행하고 있습니다.
그러나 1 API가 속성 값을 변경하면 모든 API가 새 값을 읽을 수 있기를 바랍니다.
System.setProperty ("prop_name",)를 사용하여 시도했지만 다른 API를 변경하지 않았습니다.
원본 텍스트 파일을 수정하고 싶지 않습니다. 또한 새 속성 파일을 작성하고 모든 API를이 파일을로드하는 오버 헤드가 발생하지 않도록하고 싶습니다. 많은 API와 많은 속성이 있으며 모든 속성 변경에 대해이 작업을 수행하지 않으려합니다.
자바에서 지속되는 속성을 변경하는 방법

어떻게해야합니까?

+4

"API"라는 단어의 의미를 살펴볼 필요가 있다고 생각합니다. –

+0

라이브러리는 실제로 어떻게 속성을로드 하시겠습니까? 각 라이브러리는 파일에서 직접 읽습니까? 아니면 한 위치에서 읽은 파일이고 라이브러리는 Properties 객체를 받습니까? 파일 –

+0

. 원본 속성 파일을 변경하고 싶지 않습니다. 이것은 모든 프로그램이 기본값으로 시작해야하기 때문입니다. 런타임 중에 만 값이 변경되면 새 값을 사용해야합니다. – Andy

답변

1

Properties 객체를 공유하거나 System.getProperties()을 사용하려면 라이브러리를 변경해야합니다. 각 라이브러리 파일을 열어 직접 Properties.load(...) 않는 경우에, 당신의 선택은 제한됩니다

  • 이 속성들이 호출을 가로 챌로드로
  • 이 라이브러리의 바이트 코드를 수정하는 사용자 정의 클래스 로더를 사용하여 파일을 수정 Properties.load(...)
  • 은 (완전성이 목록에 포함 된 전용) JDK 소스의 Properties 클래스
+0

에서 직접 – Andy

0
  1. 당신의 공동 수정 uld는 디렉토리의 파일을 폴링하여 변경 사항을 찾고 해당 JVM에 적용 할 수있을 때 적용하는 각 JVM에 대한 사자 스레드를 생성합니다.

  2. 소켓 API를 사용하여 모든 응용 프로그램을 서버 응용 프로그램에 연결할 수 있습니다. 서버는 등록 정보를 관리 할 수 ​​있으며 클라이언트는 변경 사항을 주기적으로 폴링 할 수 있습니다.

기본적으로 프로세스 간 통신을 용이하게하는 것입니다. 따라서 파일, 파이프, 소켓, 웹 서비스 등을 수행하는 표준 방법 중 하나를 사용하면 응용 프로그램에서 속성을 동기화 할 수 있어야합니다. 좀 더 세분화 된 (와이프 및 리로드와 반대로 개별 변경을 전달하는 관점에서) 더 복잡한 솔루션이되고 싶습니다.

관련 문제