자바 구성 프레임 워크
Java 라이브러리에서 하드 코딩 된 모든 값을 제거하는 과정에 있으며 런타임 구성을 처리하는 데 가장 적합한 프레임 워크 (0 또는 0에 가까운 구성)가 무엇인지 궁금합니다. XML 기반 구성 파일을 선호하지만 필수는 아닙니다.
프레임 워크에 대한 실제 경험이있는 경우에만 회신하십시오. 나는 예를 찾는 것이 아니라 경험 ...
하드 코딩 된 값이 단순한 키-값 쌍인 경우 java.util.Properties 를 확인해야합니다 . xml보다 훨씬 간단하고 사용하기 쉬우 며 구현하기가 매우 간단합니다.
Java로 작업 중이고 디스크에서 저장하거나 검색하는 데이터가 키 값 쌍 (귀하의 경우처럼 들림)으로 모델링 된 경우 더 나은 솔루션을 상상할 수 없습니다.
더 큰 프로젝트에서 작은 패키지의 간단한 구성에 속성 파일을 사용하고 전체 프로젝트에 대해 더 글로벌 구성으로 사용했으며 문제가 없었습니다.
물론 이것은 타사 라이브러리를 사용할 필요가 없다는 큰 이점이 있습니다.
Apache Commons Configuration 은 훌륭하게 작동합니다. 속성, XML, JNDI 등을 포함하여 백엔드에서 다양한 형식으로 구성을 저장할 수 있도록 지원합니다. 사용 및 확장이 쉽습니다. 최대한의 유연성 을 얻으려면 팩토리 를 사용하여 구성 을 가져오고 그 후에 구성 인터페이스를 사용하십시오 .
일반 속성 파일과 구별되는 Commons Configuration의 두 가지 기능은 일반 유형 (int, float, String 배열)으로의 자동 변환을 지원하고 속성 대체를 지원한다는 것입니다.
server.host=myHost
server.url=http://${server.host}/somePath
다음은 다양한 옵션입니다.
- java.util.Properties
- java.util.prefs.Preferences (Java 5부터)
- 공용 구성
- jConfig
- JFig
- Carbon의 구성 서비스
다양한 사용자의 피드백을 위해 JFig 및 JConfig 와 Commons Configuration의 비교 및 JFig 를 사용하여 애플리케이션 구성 을 읽고 싶을 수 있습니다 .
개인적으로 jConfig를 사용해 보았고 좋은 경험이었습니다.
우리는 이것을 사용하고 있습니다. 속성 파일만으로는 훨씬 쉽게 처리 할 수 있지만 더 복잡한 데이터 공용 구성을 나타내야하는 경우이 작업을 수행하고 속성 파일도 읽을 수 있습니다.
당신이 복잡한 일을하지 않는다면, 나는 적절한 파일을 고수 할 것입니다.
고급 (및 typesafe) 작업을 수행하려면 http://www.ibm.com/developerworks/java/library/j-configint/index.html을 살펴볼 수 있습니다 .
Intelligent Parameter Utilization Tool (InPUT, 페이지 )을 사용하면 거의 모든 (하드 코딩 된) 결정을 XML 기반 구성 파일에 매개 변수로 구체화 할 수 있습니다. 일반성 및 우려 사항 분리와 관련하여 기존 구성 도구에서 감지 된 결함에 대한 대응으로 2012 년 초에 시작되었습니다.
InPUT은 아마도 대부분의 사용 사례에서 요구하는 것보다 더 강력 할 것입니다. 왜냐하면 복잡한 디스크립터를 클래스 매핑에 정의하는 것과 같은 기능 을 사용하여 프로그래밍 언어에 독립적 인 실험 데이터 공식화 (입력-출력)를 허용 하거나 다음을 기반으로하는 무작위 구성 생성 및 검증 사전 정의 된 값 범위 (테스트 및 연구용, 예 : Monte Carlo 시뮬레이션). 하위 매개 변수, 매개 변수 값에 대한 상대적 제한 (숫자 매개 변수 a> 매개 변수 b) 등 으로 매개 변수를 정의 할 수 있습니다 .
아직 베타 버전이지만 안정적이므로 연구, 실험 구성 및 문서화, 교육 목적으로 사용합니다 . 다른 언어 (파이프의 C ++ 어댑터)에서 사용할 수있게되면 다른 연구자 / 실무자는 C ++에서 동일한 알고리즘의 구현을 실행하는 설명자를 재사용 할 수 있습니다 (코드 매핑 개념 사용). 이렇게하면 실험 결과를 검증하고 프로그램을보다 쉽게 마이그레이션 할 수 있습니다 . 문서는 아직 작동 중이지만 페이지에서 몇 가지 예제를 사용할 수 있습니다 . InPUT은 오픈 소스 소프트웨어입니다.
관심있는 사람들을 위해 개념 연구 논문 .
저는 대부분의 경우 응용 프로그램 별 구성 클래스로 래핑 된java.util.Properties
(또는 다른 언어 및 프레임 워크의 유사한 클래스) 를 사용하는 경향이 있지만 이에 대한 대안이나 변형에 매우 관심이 있습니다. 특히 그래픽 구성 대화 상자 또는 구성 데이터에 대한 여러보기가 관련되면 상황이 약간 까다로울 수 있습니다.
불행히도 저는 Java 용 특정 라이브러리에 대한 경험이 없지만 (제가 직접 작성한 라이브러리를 제외하고) 어떤 포인터라도 감사하겠습니다.
최신 정보
확인. 그것은 전적으로 사실이 아닙니다. 세 가지는 Spring Java Configuration Project 입니다.
내가 쓴 몇 주 전에 이것에 대해와 XML은 가장 널리 사용되는 표기법 중 하나라는 결론에 도달했습니다.
최고인가요? 나는 그렇게 생각하지 않는다. 나는 JSON을 정말로 좋아한다. 그러나 도구는 여전히 XML에 달려 있지 않기 때문에 우리는 기다려야한다고 생각한다.
YamlBeans 를 사용해 볼 수 있습니다 . 이렇게하면 구성 데이터를 보관할 클래스를 작성한 다음 YAML에서 자동으로 쓰고 읽을 수 있습니다.
YAML은 사람이 읽을 수있는 데이터 형식입니다. java.util.Properties보다 더 많은 표현력이 있습니다. 목록,지도, 앵커, 입력 된 데이터 등을 가질 수 있습니다.
다음 URL을보십시오 : http://issues.apache.org/jira/browse/CONFIGURATION-394
우리가 찾고있는 구성 프레임 워크는 Apache Commons Configuration의 최상위에 있으며 동시성 문제, JMX 문제 및 대부분의 저장소 (예 : .properties 파일, .xml 파일 또는 PreferencesAPI)를 지원해야합니다.
Weblogic 팀이 'Administration Console'에서 제공하는 것은 등록 된 리스너가 알림을받을 수 있도록 구성에 대한 트랜잭션 (원자) 업데이트를 가질 수 있다는 점입니다.
Apache 사람들은이 프로젝트가 Commons Configuration의 범위를 벗어났다고 주장합니다!
간단한 구성 프레임 워크를 첨부했습니다.보세요.
IoC의 대안으로 Spring의 ClassPathResource를 사용하는 것에 대한 간단한 코드를 게시했습니다 . ClassPathResource를 사용하면 클래스 경로의 어느 위치 에나 속성 파일을 배치 할 수 있습니다 (예 : 모두 한 곳에 또는 구성하는 코드에 대한 피어로. 제 예에서는 java.util.Properties를 사용하므로 일반 텍스트 "name = value"스타일을 사용할 수 있습니다. 또는 XML 형식입니다.
속성 파일은 매우 간단합니다. 더 많은 기능이 필요한 경우 일부 구성 파일을 Java 클래스로 형식화 할 수 있습니다. 이들은 다른 패키지 / 모듈에 배치 할 수 있으며 BeanShell과 같은 라이브러리를 사용하여 런타임에 미리 컴파일하거나로드 할 수 있습니다.
참고 : 가장 간단한 경우 (미리 컴파일 됨)에는 추가 라이브러리가 필요하지 않습니다.
java.util.Properties 사용 제안과 관련하여-jdk 1.5부터 시작하여 Preferences API (java.util.prefs)가 Properties API를 사용하는 것보다 선호되는 대안으로 보입니다.
이유 : 확장 성 증가, 백엔드 중립성 등.
런타임에 구성을 쉽게 처리 할 수 있도록하는 사명을 가진 새로 발표 된 tools4j-config 를 살펴볼 수 있습니다.
참고URL : https://stackoverflow.com/questions/25765/java-configuration-framework
'Program Tip' 카테고리의 다른 글
CMake의 함수 대 매크로 (0) | 2020.10.19 |
---|---|
Windows 10의 Virtualbox에서 작동하지 않는 브리지 네트워킹 (0) | 2020.10.19 |
Subversion의 특정 코드 줄에 대한 변경 내역 (0) | 2020.10.19 |
Subversion에서 트렁크를 분기에 병합 (0) | 2020.10.19 |
4x4 행렬 반전 (0) | 2020.10.19 |