스프링 부트 (Spring boot) 외부 설정방법
오늘은 스프링 부트 외부 설정방법에 대해서 알아보도록 하겠습니다.
우선 프로젝트를 생성해야합니다.
2018/08/09 - [IT/Spring Boot] - 스프링 부트 ( Spring boot ) 프로젝트 생성하기 부터 실행하기
프로젝트를 구성한다음 위와같은 클래스를 만들어 줍니다.
이후에 코드를 아래와 같이 작성합니다.
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 사용법 설치하기 및 적용하기 및 예제
이후 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
프로퍼티와 클래스를 번갈아 보면 어떤식으로 클래스와 외부 프로퍼티를 연결해서 사용하는지 아실 수 있을 겁니다.
지금까지 스프링 부트 외부 설정방법에 대해서 알아보았습니다.