SpringBoot- 구성 파일 사용에 대한 자세한 설명 (Profile 다중 환경 구성)

Spring Boot  에서는 많은 자동 구성이 사용되지만 개발자의 경우 실제 프로젝트에서는 필연적으로 자체적으로 수동 구성이 필요합니다. 이러한 사용자 정의 구성을 전달하는 파일은 resources 디렉토리의 application.properties 파일입니다. 사용 application.yaml 대신 파일 application.properties의 ) 파일을.

하나, 구성 파일의 우선 순위

Spring Boot 프로젝트의 application.properties 구성 파일은 다음 4 개 위치에 나타날 수 있습니다.

  1. 프로젝트 루트 디렉토리 아래의 config 폴더 있습니다.
  2.  프로젝트 루트 디렉토리 아래.
  3. classpath 아래의 config 폴더 에서 .
  4.  클래스 경로 아래.

이 네 위치의 로딩 우선 순위는  1> 2> 3> 4 입니다. 이 4 개 위치에 application.properties 파일이 있는 경우 아래 그림과 같이 로드 우선 순위가 1 에서 4로 감소합니다. Spring Boot 는이 우선 순위에 따라 구성 정보를 조회하고이를 Spring Environment에  로드합니다 .

 둘째, 외부 구성 파일 참조

기본적으로 Spring Bootapplication.properties 를 찾아서로드합니다. 개발자가 구성 파일 이름으로 application.properties 를 사용하지 않으려 는 경우 직접 정의 할 수도 있습니다. 패키징이 시작될 때 파일의 경로 또는 이름을 지정하십시오.

1. 프로젝트가 패키징 된 후 명령 줄 매개 변수를 사용하여 프로젝트를 시작할 때 파일 이름을 지정할 수 있습니다.

java -jar xxx.jar --spring.config.name=filename

2. 프로젝트가 패키징 된 후 명령 줄 매개 변수 형식을 사용하여 프로젝트를 시작할 때 외부 구성 파일의 위치를 ​​지정할 수 있습니다.

java -jar xxx.jar --spring.config.location=classpath:/app.properties 

3. 물론 외부 구성이있는 폴더를 지정할 수도 있으며이 폴더 아래의 구성 파일은 시작시 검색 및 사용됩니다.

java -jar xxx.jar --spring.config.location=classpath:/config/

4. 동시에 여러 경로를 구성 할 수도 있습니다. 예를 들어 다음 예제에서는 먼저 외부 구성 파일을로드하고 외부 구성 파일이없는 경우 패키지의 기본 구성 파일이 사용됩니다.

java -jar xxx.jar --spring.config.location=classpath:/,classpath:/config/

셋째, 명령 줄 매개 변수를 사용하여 속성을 지정합니다. 

구성 파일에 속성 매개 변수를 구성하는 것 외에도, 당신은 또한 클러스터 환경에서, 예를 들어, 두 번째의 구성 파일 경로를 지정하여 시작 매개 변수를 지정할 수 있습니다, 포트는 다음과 같이 지정되어 8080 구성 파일에 , 당신이 경우 다른 8081 포트 서비스 를 시작 하려면 --server.port를 통해 시작 포트 지정할 수 있습니다 . 다른 매개 변수와 동일

java -jar xxx.jar --server.port=8081

경우 같은 이름의 매개 변수가 이미 존재 application.properties의 파일, 그것은 우선합니다 의 구성 application.properties을

네, 사용자 지정 구성 속성

프로젝트에서 종종 토큰 만료 시간, 예약 된 작업 타이밍 및 기타 정보와 같은 특정 사용자 지정 구성 속성이 발생합니다. application.properties 에서 자체 속성 구성 할 수 있습니다.

1. application.properties  에서 다음과 유사한 간단한 상수 구성을 추가 할 수  있습니다.

book.name=红楼梦
book.author=曹雪芹
book.price=299.9

2. 구성 속성은 상호 참조로도 사용할 수 있습니다.

book.name=红楼梦
book.author=曹雪芹
book.price=299.9

# book.info 属性引用了以上三个属性
book.info=${book.name}-${book.author}-${book.price}

3. 구성 속성 데이터를 클래스 속성에 삽입합니다.

(1)  데이터 필요한 곳에 @Value 어노테이션으로 속성 주입 할 수 있으며, 아래와 같이 BookController를 생성 하고 bookInfo  속성에 book.info주입 합니다.

@RestController
public class BookController {
    @Value("${book.info}")
    private String bookInfo;

    @GetMapping("/book")
    public String boolInfo(){

        return bookInfo;
    }
}

(2) 프로젝트를 다시 시작하고 http : // localhost : 8081 / book을 방문하십시오.

4. 속성 데이터를 Bean에 삽입하십시오.

프로젝트 개발시 여러 클래스에서 사용할 구성이 하나 이상있을 수 있습니다. 사용되는 각 클래스에 동일한 속성이 추가되거나 프로젝트의 클래스에 각 속성이 흩어져있는 경우 유지 관리가 상대적으로 번거 롭습니다. 구성 클래스를 별도로 정의하고 모든 사용자 정의 속성을이 구성 클래스에 삽입하면 사용 된 다른 속성이이 클래스를 직접 참조 할 수 있습니다.

(1), 명명 된 Book  of Bean , 삽입 및 구성 데이터를 Bean  의 전면에 정의합니다  .

@ConfigurationProperties(prefix = "book")
@Component
public class Book {

    private String name;

    private String author;

    private Double price;

    private String info;

    // 省略 getter 和 setter 方法
}

기술:

(1) @ConfigurationProperties의 prefix 속성은로드 할 구성 파일의 접두사를 설명합니다.

(2) Spring Boot는 속성 바인딩에 느슨한 규칙을 사용합니다.

  • Bean의 속성 이름이 authorName이라고 가정하면 구성 파일의 속성은 my.author_name, my.author-name, my.authorName 또는 my.AUTHORNAME이 될 수 있습니다.

(2), BookController에 Book  삽입

@RestController
public class BookController {

    @Resource
    private Book book;

    @GetMapping("/book")
    public String boolInfo(){

        return book.getInfo();
    }
}

(3), 다시 액세스

 다섯 가지 다중 환경 구성

프로젝트가 출시되기 전에 개발자는 일반적으로 개발 환경, 테스트 환경 및 프로덕션 환경간에 자주 전환해야합니다. 이때 많은 구성을 자주 변경해야합니다 (예 : 데이터베이스, redis, mongodb, MQ 등). .). 잦은 수정은 엄청난 워크로드를 가져옵니다. 스프링 부트 에서 동의 한 다양한 환경에서 구성 파일 이름 규칙은

  • application- {profile} .properties , 프로필 자리 표시자는 현재 환경의 이름을 나타냅니다.

구체적인 구성 단계는 다음과 같습니다.

1. 구성 파일 만들기

 먼저 리소스  디렉토리 두 개의 구성 파일 ( application-dev.properties  및  application-prod.properties )을 만듭니다.이 파일 은  각각 개발 환경 및 프로덕션 환경의 구성을 나타냅니다.

#application-dev.properties
book.name=红楼梦
book.author=曹雪芹
book.price=299.9
# book.info 属性引用了以上三个属性
book.info=${book.name}-${book.author}-${book.price}



#application-prod.properties
book.name=MySQL从删库到跑路
book.author=佚名
book.price=299.9
# book.info 属性引用了以上三个属性
book.info=${book.name}-${book.author}-${book.price}

2. application.properties 에서 환경 구성

 (1) application.properties  에서 다음 구성 수행합니다. 이는  application-dev.properties 로드를 의미합니다.

spring.profiles.active=dev

(2) application.properties  에서 다음 구성 수행합니다. 이는  application-prod.properties 로드를 의미합니다.

spring.profiles.active=prod

(3) 구성을 수정하고 다시 시작하면 방문하여 다른 결과를 볼 수 있습니다.

3. 코드에서 구성

두 번째 단계에서 application.properties 에 추가 된 구성의 경우 코드에 구성을 추가하여 완료 할 수도 있습니다 . 시작 클래스의 기본 메서드에 다음 코드를 추가하여 두 번째 단계의 구성을 대체합니다.

@SpringBootApplication
public class Springdemo3Application {

    public static void main(String[] args) {
        SpringApplicationBuilder builder = 
                 new SpringApplicationBuilder(Springdemo3Application.class);
        builder.application().setAdditionalProfiles("dev");
        builder.run(args);
    }
}

4. 프로젝트 시작 시점 구성

프로젝트가 jar 패키지로 패키징되고 시작될 때 명령 줄에서 현재 환경을 동적으로 지정할 수도 있습니다.

java -jar xxx.jar --spring.profiles.active=dev

5. Maven을 통해 지정

위에서 언급 한 세 가지 구성은 모두 패키징하기 전에 구성을 수정하거나 시작시 시작 매개 변수를 지정해야합니다. 또한 Maven을 통해 구성을 지정하고 패키징 할 때 지정된 구성을 직접 입력 할 수도 있습니다.

(1) pom.xml 파일을 수정 하고 다음 구성을 추가합니다.


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
            </plugin>
        </plugins>

        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <excludes>
                    <exclude>application-dev.properties</exclude>
                    <exclude>application-prod.properties</exclude>
                </excludes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>false</filtering>
                <includes>
                    <include>application-${profiles.active}.properties</include>
                    <include>application.properties</include>
                </includes>
            </resource>
        </resources>

    </build>
    <profiles>
        <!--开发环境-->
        <profile>
            <id>dev</id>
            <properties>
                <profiles.active>dev</profiles.active>
                <maven.test.skip>true</maven.test.skip>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>

        <!--生产环境-->
        <profile>
            <id>prod</id>
            <properties>
                <profiles.active>prod</profiles.active>
                <maven.test.skip>true</maven.test.skip>
            </properties>
        </profile>
    </profiles>
</project>

(2) application.properties 파일을 수정 하고 다음 구성을 추가합니다.

[email protected]@

(3) maven을 패키징 할 때 프로필을 지정합니다 .

mvn clean package -P prod

  이런 식으로 패키지 파일에는 아래와 같이 지정된 프로필에 해당하는 파일 만 있습니다.

추천

출처blog.csdn.net/small_love/article/details/111679469