본문 바로가기

스프링 부트 (Spring boot) 외부 설정방법

오늘은 스프링 부트 외부 설정방법에 대해서 알아보도록 하겠습니다.

우선 프로젝트를 생성해야합니다.

 

2018/08/09 - [IT/Spring Boot] - 스프링 부트 ( Spring boot ) 프로젝트 생성하기 부터 실행하기

 

스프링 부트 ( Spring boot ) 프로젝트 생성하기 부터 실행하기

첫 Spring boot 프로젝트 생성하기 부터 실행하기 Spring boot 카테고리가 생성되었습니다!!! 그런 의미에서 몇 단계로 나누워 스프링 부트를 사용하면서 알게된 정보들과 사용법들을 남기고자 카테��

kingname.tistory.com

 

프로젝트를 구성한다음 위와같은 클래스를 만들어 줍니다.

이후에 코드를 아래와 같이 작성합니다.

 

main.java

@SpringBootApplication
public class SpringbootoutconfigApplication {

    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(SpringbootoutconfigApplication.class);
        //app.addListeners(new SampleListener());
        app.setWebApplicationType(WebApplicationType.NONE);
        app.run(args);
        //SpringApplication.run(SpringbootoutconfigApplication.class, args);

    }

}

 

SampleArg.java

@Component
public class SampleArg {

    public SampleArg(ApplicationArguments arg) {
        System.out.println("foo " + arg.containsOption("foo"));
        // -- 로 오는  arg
        System.out.println("bar " + arg.containsOption("bar"));
    }

}

 

SampleRunner.java

@Component
public class SampleRunner implements ApplicationRunner {

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("foo " + args.containsOption("foo"));
        // -- 로 오는  arg
        System.out.println("bar " + args.containsOption("bar"));
    }
}

 

 

아래의 코드는 어플리케이션이 시작할때 아래의 함수를 실행한 후 실행되게 됩니다.

public class SampleListener implements ApplicationListener<ApplicationStartedEvent> {

    @Override
    public void onApplicationEvent(ApplicationStartedEvent applicationStartedEvent) {
        System.out.println("=======================");
        System.out.println("Applcation is starting");
        System.out.println("=======================");
    }
}

 

이후에 Arg 를 설정하게 되면 foo 와 bar 라는 값을 포함하고 있으면 true를 리턴하게 됩니다.

이 외부 설정하는 방법외에도 Properties 를 이용하여 외부설정하는 방법이 있습니다.

 

 

 

 

 

Properties 외부설정

다시 프로젝트를 생성하여 위와같은 클래스를 생성하고 프로퍼티 또한 생성하여줍니다.

main.java는 그냥 스프링부트를 실행하는 함수입니다.

 

SampleRunner.java

@Component
public class SampleRunner implements ApplicationRunner {

    private Logger logger = LoggerFactory.getLogger(SampleRunner.class);

    @Autowired
    private String hello;

    @Autowired
    KingnameProperties kingnameProperties;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        logger.debug("===================");
        logger.debug(hello);
        logger.debug(kingnameProperties.getName());
        logger.debug(kingnameProperties.getFullName());
        logger.debug("===================");
    }
}

이후 KingnameProperties클래스에 아래와 같은 코드를 작성하여

@Component
@Data
@ConfigurationProperties("kingname")
public class KingnameProperties {

    private String name;

    private int age;

    private String fullName;

    @DurationUnit(ChronoUnit.SECONDS)
    private Duration sessionTimeout = Duration.ofSeconds(30);
}

 

@Data는 롬복을 설치하게 되면 가능합니다. 설치를 안하셨다면 그냥 getter 와 setter를 생성해 줍니다.

2018/09/27 - [IT/Environment] - [Lombok/롬복] lombok 사용법 설치하기 및 적용하기 및 예제

 

[Lombok/롬복] lombok 사용법 설치하기 및 적용하기 및 예제

[Lombok/롬복] lombok 설치하기 및 적용하기 오늘 소개해 드릴 것은 바로 Lombok (롬복)입니다. Java 기반에서 작성하는 VO, DTO, Entity 관련 작업을 쉽게 도와주는 도구입니다. Getter, Setter, ToString 등.....

kingname.tistory.com

이후 BaseConfiguration과 TestConfiguration을 살펴보면 어떤 방법으로 프로퍼티를 생성해야하는지 감이 잡힐것입니다.

BaseConfiguration.java

@Profile("prod")
@Configuration
public class BaseConfiguration {

    @Bean
    public String hello() {
        return "Hello";
    }
}

TestConfiuration.java

@Profile("test")
@Configuration
public class TestConfiguration {

    @Bean
    public String hello() {
        return "Hello Test";
    }
}

 

이번에는 프로퍼티 값을 알아볼까요?

 

application.properties

kingname.name = geun
kingname.age = ${random.int(0,100)}
kingname.fullName = ${kingname.name} lim
kingname.session-timeout=25s
spring.profiles.active=prod
spring.output.ansi.enabled=always
logging.path=logs
logging.level.com.kingname.springbootoutconfig=debug

 

application-prod.properties

kingname.name=kingname
spring.profiles.include=proddb

 

application-test.properties

kingname.name=test name

 

프로퍼티와 클래스를 번갈아 보면 어떤식으로 클래스와 외부 프로퍼티를 연결해서 사용하는지 아실 수 있을 겁니다.

지금까지 스프링 부트 외부 설정방법에 대해서 알아보았습니다.

엉망진창

개인 블로그 입니다. 코딩, 맛집, 정부정책, 서비스, ~방법 등 다양한 정보를 소개합니다