구성 범위는 프로필보다 낫습니다
생산 관행에서 구성 범위는 다른 환경에서 다른 구성을 해결하는 일반적인 방법입니다. 예를 들어, 프로덕션 서버의 구성 파일을 사용하여 패키지의 파일을 덮어 쓰거나 중앙 집중식 구성 서비스를 사용하여 기본 비즈니스 구성을 덮어 씁니다.
프로파일 메커니즘 (예 : Maven의 프로필 및 Spring Boot의 프로필 별 속성)과 비교하여 다른 환경마다 다른 구성 파일을 사용하며 오버레이 방법이 더 유리합니다. 프로그래머는 개발 중에 생산 환경 데이터베이스의 주소, 계정 및 기타 정보에 대해 신경 쓰지 않아도됩니다. 한 번에 건축하여 다른 환경에서 실행할 수 있습니다. 프로파일 메커니즘은 프로덕션 환경의 구성을 프로젝트 리소스 파일에 작성해야하며 다양한 환경에 다른 구성 매개 변수 또는 작업 매개 변수를 사용해야합니다.
Spring은 유연한 구성 확장 기능을 제공하며 사용자 정의 속성 소스를 IT에 통합하는 여러 가지 방법을 제공하므로 구성 범위가 쉽습니다.
이 기사는 Spring Boot 1.4.8/Spring 4.3.12를 기반으로 작성되었습니다.
@PropertySource 주석을 사용하여 사용자 정의 구성 파일 및 구성 재정의 구현
@configurationProperties@configurationpublic class demoproperties {// getter/setters가있는 속성}} @PropertySource (value = { "test.properties", "file : /etc/test.properties",}, ingoreSourcenotfound = true) @ConfigurationPublic 클래스 DemoAutoConfiguration {@autowired private demoproperties demoproperties; @PostConstruct public void init () {system.out.println (demoproperties); }}Spring은 PropertySource 주석을 사용하여 사용자 정의 구성 파일을 소개하는 것을 지원합니다. 여기서 "test.properties"는 Spring이 ClassPath에서 파일을로드하게합니다. "파일 : /etc/test.properties"는 Spring이 /etc/test.properties 파일을 파일 시스템에서로드하게합니다.
동시에, "file : /etc/test.properties"가 "test.properties"이후에 위치하므로 파일 시스템 구성 파일이 클래스 경로에서 구성을 덮어 쓸 수있게되므로.
맞춤 속성 소스 공장
중앙 집중식 구성 서비스의 구성로드와 같이 속성 소스를보다 유연하게 사용자 정의하려면 PropertySourceFactory 인터페이스를 구현하고 PropertySource 주석의 공장 매개 변수를 구성 할 수 있습니다.
@configuration@propertySource (value = ""/*자리 표시 자*/, Factory = compositePropertySourceFactory.class) 공개 클래스 compositeConfigautoConfiguration {}값 필드는 구성 소스에 해당하는 리소스 파일을 지정하는 데 사용됩니다. 리소스 파일이 필요하지 않은 경우 값으로 구성 할 수 있습니다. 매개 변수 값은 공장 매개 변수의 CreatePropertySource 메소드로 전달됩니다.
ingoreSourcenotFound 필드가 True로 지정되면 공장에서 발생한 예외는 무시됩니다. 그렇지 않으면 시작이 실패하게됩니다. 때로는 시작 실패를 직접 노출시키는 것이 좋습니다.
PropertySourceFactory 인터페이스의 정의는 다음과 같습니다.
/*** 리소스 기반 {@link propertySource} 랩퍼를 만들기위한 전략 인터페이스. * * @Author Juergen Hoeller * @since 4.3 * @ @defaultPropertySourceFactory * /public interface sourceFactory { /** * 주어진 리소스를 래핑하는 {@link propertysource}를 만듭니다. * @param 이름의 이름 * @param 리소스 리소스 (잠재적으로 인코딩)를 포장 할 수있는 리소스 (잠재적으로 인코딩) 새 {@link propertysource} (@link propertysource} (never {@code null}) * @Throws IoException이 실패한 경우 */ propertySource <> createPropercececection (stresource throwsection);PropertySourceFactory의 로딩 시간은 Spring Beans 컨테이너의 로딩 시간보다 빠르기 때문에 Spring의 IOC에 의존 할 수 없습니다.
PropertySourceFactory는 구현 클래스가 PropertySource를 반환해야합니다. PropertySource는 스프링 속성 (또는 구성) 기능의 핵심 인터페이스이며 다음과 같은 많은 구현을 가지고 있습니다.
실제 구현 클래스는 이것보다 훨씬 열등합니다. 구체적인 목적으로 스프링 문서 또는 소스 코드를 읽을 수 있습니다.
MapPropertySource 및 CompositePropertySource는 속성 소스를 사용자 정의 할 때 일반적으로 사용됩니다.
MapPropertySource는 자체로드되는 속성 데이터를 래핑하는 데 사용될 수 있습니다. 건설 방법을 참조하십시오.
public mappropertysource (문자열 이름,지도 <문자열, 개체> 소스) {super (name, source);}후자는 오버라이드 순서를 결합하고 사용자 정의하여 여러 속성 소스를로드 할 수 있습니다. 예를 들어:
PropertySource <?> PackageInsidePropertySource = PackageInsidePropertySourceiterateloader.loadPropertySource (CompositePropertySource); compositepropertysource.addpropertysource (PackageInsidePropertySource); PropertySource <?> outerfilepropertysource = auterfilepropertysourceiterateloader.loadpropertysource (compositepropertysource); compositepropertysource.addfirstpropertysource (outerfilepropertysource);
AddFirstPropertySource 메소드는 들어오는 속성 소스를 최우선 순위로 설정할 수 있으며 (이 CompositePropertySource 내부) AddPropertySource 메소드는 반대이며 우선 순위는 나중에 낮습니다.
종속성 JAR 패키지에 동일한 이름으로 모든 구성 파일을로드하십시오.
ClassPath에서 직접 구성 파일을로드하려면 파일이 클래스 경로에 있어야합니다. 웹 프로젝트에서 파일이 종속성 JAR 패키지에 존재하는 경우, 즉 Web-Inf/Lib/xxx.jar에 있으면 ClassPath를 기반으로 직접로드 할 수 없습니다. 현재 Spring에서 제공 한 PathMatchingResourcepatternresolver를 사용하여 모든 JAR 패키지를 리소스 이름으로 스캔하여 목적을 달성 할 수 있습니다.
개인 목록 <자원> GetPackageInsiderEsourcesBypattern (String ResourceName)은 ioException {String ResourceCepathPattern = ResourcePatternResolver.classPath_All_URL_PREFIX + HBOOTCONFIGCONSTANTS.CONFIGS + RESORCENAME; ResourcePatternResolver ResourceCepatternResolver = New PathMatchingResourcepatternresolver (); return arrays.aslist (resourcepatternresolver.getResources (resourcepathpattern));} 그런 다음 ResourcePropertySource를 사용하여 Resource에서 PropertySource를 구축하여 스프링으로 전달할 수 있습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.