일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- kafka interactive query
- schema registry
- play framework
- Slick
- Elk
- Logstash
- scala
- gradle
- kafka streams
- Spring
- 한빛미디어
- spring-kafka
- Elasticsearch
- aws
- avo
- confluent
- Kafka
- spring-batch
- enablekafkastreams
- kafkastream
- scala 2.10
- 카프카
- 플레이 프레임워크
- reactive
- kafkastreams
- RabbitMQ
- spring-cloud-stream
- springboot
- statestore
- coursera
- Today
- Total
b
Spring5 에서 프로그래밍 적으로 빈 등록하기. 본문
Spring 4.X 에서 Conditional.... 시리즈의 어노테이션이 추가 되면서 다양한 환경에서 Bean을 등록 할 수 있게 되었다. 현재 작업중인 Event Driven MSA (이름 참 길다...) 의 한 프로젝트에서는 상용과, 개발서버의 Bean이 달라야 하는 니즈가 있다.
@Configuration
@EnableConfigurationProperties(SolProperties.class)
public class SolAutoConfiguration {
private SolProperties solProperties;
@Autowired
public SolAutoConfiguration(SolProperties solProperties) {
this.solProperties = solProperties;
}
private RestTemplate solMailClientOperation() {
}
@Bean
@ConditionalOnMissingBean(MailClient.class)
public MailClient solMailClient() {
}
@Bean
@ConditionalOnProperty(name = "mail.type", havingValue = "fake")
public MailClient fakeMailClient() {
return new FakeMailClient();
}
}
뭐 대충 이런식으로 작성한다면 원하는대로 동작 가능하지만, Spring 5 에서는 좀 더 특별한 방법으로 할 수 있다. 이 내용은 이전 내용인 링크 의 연장 선이다.
@SpringBootApplication
public class EventApplication {
private static final String OA = "mail.type";
private static final String OS = "sms.type";
public static void main(String[] args) {
ApplicationArguments aa = new DefaultApplicationArguments(args);
new SpringApplicationBuilder()
.sources(EventApplication.class)
.initializers(
(ApplicationContextInitializer<GenericApplicationContext>)
context -> {
if (aa.containsOption(OA)
&& aa.getOptionValues(OA).contains("fake")) {
context.registerBean(MailClient.class, FakeMailClient::new);
}
if (aa.containsOption(OS)
&& aa.getOptionValues(OS).contains("fake")) {
context.registerBean(SmsClient.class, FakeSmsClient::new);
}
}).run(args);
}
}
대충 뭐 이런식으로 작성할 수 있다.
실제로 실행 할 때는 java -jar app.jar --sms.type=fake --mail.type=fake 이렇게 된다.