ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [07] Profile
    Spring/Spring boot 2020. 6. 3. 21:27
    반응형

    profile을 사용하면 적용된 profile에 따라 bean의 등록을 달리하거나 특정 logic을 실행할 수 있도록 하여 환경에 따라 application을 유연하게 실행할 수 있습니다. (profile에 대한 자세한 예)

     

    profile을 사용하는 간단한 예제를 살펴보도록 합시다. 먼저 서로다른 profile을 적용할 bean 설정 file을 두개 준비합니다. 각각의 bean 설정 file 내용은 다음과 같습니다.

    @Profile("base")	//	①
    @Configuration		//	②
    public class BaseConfiguration {
    
        @Bean			//	③	
        public String printConfiguration() {
            return "Base Configuration";
        }
    }
    

    ① @Profile annotaion 사용하여 현재 bean 설정 file이 base profile인 경우에만 bean으로 등록하도록 처리합니다.

    ② @Configuration annotation이 적용된 class는 bean 설정 file임을 뜻합니다.

    ③ printConfiguration() method를 bean으로 등록합니다.

     

    @Profile("test")	//	①
    @Configuration
    public class TestConfiguration {
    
        @Bean
        public String printConfiguration() {
            return "Test Configuration";
        }
    }

    ① test profile을 적용합니다.

     

     

    main class는 WebApplicationType만 NONE으로 지정하고 run() method를 통해 application을 실행하도록 합니다.

    @SpringBootApplication
    public class Application {
    
        public static void main(String[] args) {
    
            SpringApplication app = new SpringApplication(Application.class);
            app.setWebApplicationType(WebApplicationType.NONE);
            app.run(args);
        }
    }
    

     

     

    runner class에서 위의 bean을 주입 받아 반환되는 문자열을 출력해봅니다.

    @Component
    public class AppRunner implements ApplicationRunner {
    
        @Autowired
        private String printConfiguration;
    
        @Override
        public void run(ApplicationArguments args) throws Exception {
            System.out.println("=============================");
            System.out.println(printConfiguration);
            System.out.println("=============================");
        }
    }
    

     

     

    application을 실행해보면 특정 bean이 없어 application을 시작할 수 없다는 message를 보여줍니다. @Autowired로 주입하려는 bean에  profile이 적용된 상태이기 때문에 현재는 주입할 수 있는 bean이 없기 때문입니다.

     

     

    정상적인 application 실행을 위해서는 profile을 지정해줘야 합니다. profile은 여러가지 방법으로 지정할 수 있습니다.

     

    1. application.properties file에 spring.profiles.active key에 원하는 profile을 value로 지정하면 value에 해당하는 profile을 적용하여 application이  실행됩니다.

    spring.profiles.active=base
    #또는
    #spring.profiles.active=test

     

     

    2. Program arguments로 profile을 지정하면 지정된 profile을 기준으로 application이 실행됩니다.

    Intellij의 action 검색창을 열어(Command+Shift+A 또는 Shift 연속 2회) configurations로 검색해서 Run/Debug Configurations 창을 열어줍니다.

     

    Program Arguments에 --spring.profiles.active=base 라고 입력하고 apply한 뒤 application을 실행하면 profile base를 기존으로 application이 실행됩니다.

     

    Program Aruguments에 지정된 option이 application 안에 있는 application.properties file의 내용보다 우선순위가 앞서므로 application.properties의 내용을 무시하고 application이 실행됨에 주의합니다.

     

    실행 시점에서 Program Arguments를 지정한 것이 적용 되려면 packaging을 다시 해야 합니다. terminal에서 현재 project root directory로 이동하여 다음 명령어로 packaging을 진행합니다.

    mvn clean package

     

     

     

    3.Command line에서 Program Arguments를 직접 지정하여 application을 실행하면 해당 profile로 application이 실행됩니다. 2번과 마찬가지로 실행전에 다시 packaging을 진행해야 합니다.

     

     

     

     

     


    [Profile 전용 properties file의 사용]

     

    각 profile 전용으로 properties file을 만들어 두고 해당 profile이 적용될 때만 profile에 해당하는 properties file의 key에 접근할 수 있습니다. profile 전용의 properties file의 이름은 application-{profile_name}.properties 형태로 지정하면 spring boot에서 자동으로 인식하게 되어있습니다. base, test profile에 해당하는 properties file을 생성하여 profile에 따라 properties file이 선택되는지 확인해보도록 합시다.

     

    먼저 다음 그림과 같이 profile 전용 properties file을 생성해 주세요.

     

    application-base.properties file의 내용을 입력해주세요.

    p.name=base property file

     

    application-test.properties file의 내용을 입력해주세요.

    p.name=test property file

     

    property에 접근할 수 있는 bean의 class를 선언합니다.

    @Component
    @ConfigurationProperties("p")
    public class AccessProperties {
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        private String name;
    }
    

     

     

    runner class에서 지정된 profile에 해당하는 property file의 key를 잘 가져오는지 확인합니다.

    @Component
    public class AppRunner implements ApplicationRunner {
    
        @Autowired
        private AccessProperties accessProperties;
    
        @Override
        public void run(ApplicationArguments args) throws Exception {
            System.out.println("=============================");
            System.out.println(accessProperties.getName());
            System.out.println("=============================");
        }
    }

     

     

    application.properties file에 spring.profiles.active key를 base로 두고 application을 실행하면 다음과 같이 profile base에 해당하는 전용 properties file의 key에 해당하는 value를 가져와 출력합니다.

     

     

     

     

     


    [Property에서 다른 Property를 추가하는 방법]

     

    property 안에 다음의 key를 추가하여 다른 property를 불러올 수 있습니다.

    spring.profiles.include={property_name}

     

    'Spring > Spring boot' 카테고리의 다른 글

    [09] Test  (0) 2020.06.10
    [08] Spring boot logging  (0) 2020.06.05
    [06] 외부 설정 file (Property)  (0) 2020.06.01
    [05] Spring Application  (0) 2020.05.28
    [04] 독립으로 실행가능한 JAR file  (0) 2020.05.26

    댓글

Designed by Tistory.