머리말
이 기사는 봄에 @propertysource 주석 사용과 PropertySource 주석을 통해 지정된 구성 파일을로드하는 방법에 대해 설명하는 데 중점을 둡니다. 또한 PropertySource 주석과 @ConfigurationProperties 주석을 사용합니다. 아래에서 많이 말하지 않고 편집자와 함께 배우고 공부합시다.
1.1. 속성 소스 주석은 지정된 속성 파일을로드합니다
Spring Framework는 지정된 속성 파일을로드 할 목적으로 PropertySource 주석을 제공합니다. 다음 으로이 주석을 사용하는 방법을 살펴 보겠습니다. 먼저 구성 클래스를 정의하고 다음과 같이 클래스에 속성 소스 주석을 추가합니다.
@component@propertySource (value = { "classPath : config/jdbc-bainuo-dev.properties"}, ingoreSourcenotfound = false, encoding = "utf-8", name = "jdbc-bainuo-dev.properties",) 공공 class datasourceconfig1 {private string url; public String geturl () {return url; } public void seturl (String URL) {this.url = url; } @override public String toString () {return "customerDatasourceConfig {" + "url = '" + url +'/'' + '}'; }} 위 코드의 목적은 클래스 경로의 구성 파일에 jdbc-bainuo-dev.properties 로드하는 것입니다. 인코딩이 사용되는 경우 속성 파일을 읽는 데 사용되는 인코딩을 지정하는 경우 일반적으로 UTF-8을 사용합니다. MEGORESOURCENOTFOUND는 지정된 구성 파일이 존재하지 않을 때 오류가보고되는지 여부를 의미하며 기본값은 False인지를 의미합니다. 예를 들어, 위에 지정된 로딩 속성 파일은 jdbc-bainuo-dev.properties 입니다. 파일이 존재하지 않으면 프로그램은 무시하는 경우 오류가 발생하지 않습니다. MEGORESOURCENOTFOUND가 False 인 경우 프로그램은 직접 오류를보고합니다. 실제 프로젝트 개발에서는 무시하는 사람을 False로 설정하는 것이 가장 좋습니다. 이 매개 변수의 기본값은 False입니다.
값 값은 속성 파일을로드 할 속성을 설정하고 여러 속성을 한 번에로드 할 수 있습니다. 우리가 설정 한 이름의 값은 jdbc-bainuo-dev.properties 입니다. 이 값은 SpringBoot 환경에서 고유해야합니다. 설정하지 않으면 값은 " class path resource [config/jdbc-bainuo-dev.properties] "입니다.
많은 사람들이 왜 " class path resource [config/jdbc-bainuo-dev.properties] "인지 궁금 할 것입니다. 여기에는 리소스 파일에 대한 스프링의 캡슐화 클래스 리소스가 포함됩니다. 위에서 구성한 값은 " classpath:config/jdbc-bainuo-dev.properties "입니다. 그래서 Spring은 classPath로 시작한다는 것을 발견했습니다. 파일로 시작하면 FileSystemResource입니다.
위에서 설명한 리소스 클래스를 이해 한 후. 이름 값이 @PropertySource에 설정되지 않은 경우 이름 값의 생성 규칙은 다음과 같습니다. 값 값을 기반으로 최종 캡슐화 된 리소스 서브 클래스를 찾은 다음 특정 리소스 서브 클래스 인스턴스 개체에서 getDescription 메소드를 호출하십시오. getDescription 메소드의 반환 값은 최종 이름 값입니다.
예를 들어, ClassPathResource 클래스의 getDescription 메소드는 다음과 같이 구현됩니다.
public String getDescription () {StringBuilder Builder = New StringBuilder ( "클래스 경로 리소스 ["); 문자열 pathtouse = 경로; if (this.clazz! = null &&! pathtouse.startSwith ( "/")) {builder.append (classUtils.classPackAgeAsresourcepath (this.clazz)); Builder.Append ( '/'); } if (pathTouse.startSwith ( "/")) {pathTouse = pathTouse.SubString (1); } builder.append (pathtouse); builder.append ( ']'); return builder.tostring ();} 위의 이름 처리 로직은 일시적으로 감동 할 수 있으며 소스 코드는 향후 설명을 위해 자세히 추적됩니다.
1.2. 속성 소스 주석은 지정된 속성 파일 테스트를로드합니다
위에서, 우리는 "classpath:config/jdbc-bainuo-dev.properties" 파일을로드하기 위해 PropertySource 주석을 설정했습니다. 이 파일의 디렉토리 구조는 아래 그림에 나와 있습니다.
JDBC-Bainuo-Dev.properties 파일의 내용은 다음과 같습니다.
Spring.datasource.shareniu.url = Shareniu
Application.Properties 파일의 내용은 다음과 같습니다.
spring.profiles.active = dev
위 구성 파일에서 spring.profiles.active 속성을 구성한 현재 환경은 DEV입니다. spring.datasource.shareniu.url 은 일반적인 재산이며 그 자체로는 특별한 의미가 없습니다.
SpringBoot의 시작 클래스를 다음과 같이 작성하겠습니다.
@SpringBootApplicationPublic Class DemoApplication {public static void main (String [] args) {springApplication springApplication = new springApplication (demoApplication.class); configurablePrictionContext configurableApplicationContext = springApplication.Run (args); CustomerDatasourceConfig1 CustomerDatasourceConfig = configurableApplicationContext .getBean (CustomerDatasourCeconFig1.class); System.out.print (CustomerDatasourceConfig);}} 위의 코드를 실행하면 프로그램의 출력은 다음과 같습니다.
CustomerDatasourceConfig {url = 'null'} 이상하게도 URL이 비어있는 이유는 무엇입니까? PropertySource 주석이 이미 jdbc-bainuo-dev.properties 파일을 현재 환경에로드하지 않았습니까? jdbc-bainuo-dev.properties 의 spring.datasource.shareniu.url 속성을 얻은 다음 PropertySource 주석이 jdbc-bainuo-dev.properties 파일을 현재 환경에로드했는지 확인할 수 있는지 확인하려고 노력할 수도 있습니다.
위의 시작 클래스의 코드를 다음과 같이 수정하십시오.
@SpringBootApplicationPublic Class DemoApplication {public static void main (String [] args) {springApplication springApplication = new springApplication (demoApplication.class); configurablePrictionContext configurableApplicationContext = springApplication.Run (args); CustomerDatasourceConfig1 CustomerDatasourceConfig = configurableApplicationContext.getBean (CustomerDatasourCeConfig1.class); 문자열 속성 = configurableApplicationContext.getEnvironment (). getProperty ( "spring.datasource.shareniu.url"); System.out.println (속성); System.out.print (CustomerDatasourceConfig);}} 위의 코드를 실행하면 프로그램의 출력은 다음과 같습니다.
Shareniu
위의 코드에서 PropertySource가 실제로 효과적임을 알 수 있습니다. 그렇다면 spring.datasource.shareniu.url 속성 값을 고객 datasourceconfig1 클래스의 URL 속성에 자동으로 주입합니까?
1.3. 속성 소스 주석은 지정된 파일을 읽고 구성 클래스에 속성을 주입합니다.
Spring은 @Value 주석을 제공하여 구성 파일의 속성 값을 읽고 해당 속성으로 설정합니다. 여기서 우리는 @Value 주석을 사용하는 방법을 배웁니다. 위의 텍스트의 두 클래스에 대해서도 자세한 설명의 예제와 마찬가지입니다. 먼저 CustomerDatasourceConfig1 클래스를 수정해야합니다. 수정 부분은 다음과 같습니다.
@component@propertySource (name = "jdbc-bainuo-dev.properties", value = { "classPath : config/jdbc-bainuo-dev.properties"}, gnoreSourcenotfound = false = "utf-8") public class 고객 datasourceconfig1 { @Value ( "$ {spring.datasource.shareniu.url}") 개인 문자열 URL;} 위의 클래스에서 @Value 주석이 URL 필드에 추가되고 Spel 표현식은 ${spring.datasource.shareniu.url} 로 지정됩니다. Springboot Boot 클래스를 다시 실행하면 콘솔의 출력이 Shareniu입니다. 속성 값의 주입은 실제로 @Value를 통해 수행 될 수 있음을 나타냅니다. 그러나 @Value 주석 메소드를 사용하는 데있어 덜 친근한 측면 중 하나는 구성을 위해 프로젝트에 많은 속성이있을 때 클래스 필드에 @Value 주석을 하나씩 추가해야하지만 실제로 어려운 @configurationProperties 주석을 통해이 문제를 해결할 수 있다는 것입니다.
1.4. configurationProperties 주석 사용
@ConfigurationProperties는 클래스 수준 주석이며 특정 사용법은 다음과 같습니다.
@component @configurationProperties (prefix = "spring.datasource.shareniu") @propertysource (name = "jdbc-bainuo-dev.properties", value = { "classpath : config/jdbc-bainuo-dev.properties", publicercenotfouns = interforcenotfouns = "incodeUrcenot" CustomerDatasourceConfig1 {private String URL; } 위의 코드에서 ConfigurationProperties 주석이 CustomerDatasourceConfig1 클래스에 추가되고 속성의 접두사는 spring.datasource.shareniu 입니다. 이러한 방식으로 SpringBoot가 프로세스 할 때 현재 클래스의 모든 필드를 스캔하고 속성을 검색하고 조립합니다. 예를 들어, prefix = "spring.datasource.shareniu" 구성하면 CustomerDatasourceConfig1 클래스에 URL 필드가 있으면 URL 필드가 일치하는 속성은 접두사+ field = spring.datasource.shareniu.url 입니다.
그것은 질문 일뿐 아니라? 지정된 필드가 속성을 찾지 못하면 어떻게됩니까? 다음과 같이 구성 할 수 있습니다.
@ConfigurationProperties (prefix = "spring.datasource.shareniu", ingoreUnkNownFields = true, ingoreInvalidFields = true)
무시 무시한 필드 : 알 수없는 필드를 무시하십시오.
INGOREINVALIDFIELDS : 확인하지 못한 필드를 무시할지 여부. 이것을 어떻게 이해합니까? 예를 들어, 구성 파일에서 문자열 유형의 변수를 구성하고 클래스의 필드가 int 유형 인 경우 오류를 확실히보고합니다. 이 경우 속성 값을 true로 구성 해야하는 속성 값을 견딜 수 있습니다. 이 매개 변수 값은 기본값으로 거짓으로 표시됩니다.
이 기사는 여기에서 설명 할 것입니다. 다음 기사에서는 @propertysource 주석이 다른 환경에서 구성 파일을 읽는 것을 실현할 수있는 방법을 설명합니다. 다른 환경의 파일은 동적으로 읽기로 전환됩니다. PropertySource는 기본적으로 지원되지 않으므로이 주석에 해당하는 소스 코드를 확장해야합니다.
요약
위는이 기사의 전체 내용입니다. 이 기사의 내용에 모든 사람의 연구 나 작업에 대한 특정 참조 가치가 있기를 바랍니다. 궁금한 점이 있으면 의사 소통을 위해 메시지를 남길 수 있습니다. Wulin.com을 지원 해주셔서 감사합니다.