[Spring] InfluxDB 커스텀으로 다른 DB 사용하기

Multiple DB on Spring

스프링에서 멀티로 데이터베이스를 사용하기 위해서는 따로 Datasource를 설정해야 한다.
InfluxDB도 마찬가지라 멀티 데이터소스를 설정하여 사용하도록 한다.

Based influxDB configuration

InfluxDB를 스프링에서 사용하기 위해서 앞에서 소개했던 spring-data-influxdb(스프링부트에서 InfluxDB 사용하기)의 클래스를 먼저 알아야한다.

1
2
3
@Validated
@ConfigurationProperties("spring.influxdb")
public class InfluxDBProperties
1
2
3
@Configuration
@EnableConfigurationProperties(InfluxDBProperties.class)
public class InfluxDBConfiguration

InfluxDBConfiguration 클래스는 InfluxDB를 사용하기 위해 application.yml에 작성해 둔 influxdb 설정으로 다양한 Bean들을 등록한다. 이때 사용하게 되는 클래스가 InfluxDBProperties인데 이 클래스는 기본적으로 yml파일의 spring.influxdb를 prefix로 둔 설정정보를 읽도록 돼있다.
즉 influxdb를 멀티로 설정하기 위해서는 해당 클래스의 prefix와 이를 사용하여 Bean을 등록하는 클래스를 수정하면 된다.

InfluxDBProperties

1
2
3
@ConfigurationProperties("spring.multi-influxdb")
public class InfluxDBPropertiesMulti extends InfluxDBProperties {
}

먼저 yaml파일의 prefix를 수정하고 이를 읽어 기본 정보를 설정하는 InfluxDBProperties 클래스를 재정의 한다.
방법은 쉬운데 InfluxDBProperties를 상속받아 자신이 원하는 이름의 클래스를 하나 더 만들어 등록하는 것이다. 본문 내용은 특별히 설정할 것이 없으므로 클래스만 정의하도록 한다.

InfluxDBConfiguration

InfluxDBProperties를 설정하였으니 이제 이를 사용하여 Bean을 등록하는 InfluxDBConfiguration을 정의하면 된다.

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
@Configuration
@EnableConfigurationProperties(InfluxDBPropertiesMulti.class)
public class InfluxDBConfigurationMulti {
@Bean(name = "connectionFactoryMulti")
public InfluxDBConnectionFactory connectionFactory(final InfluxDBPropertiesMulti properties) {
return new InfluxDBConnectionFactory(properties);
}

@Bean(name = "influxDBTemplateMulti")
public InfluxDBTemplate<Point> influxDBTemplate(@Qualifier("connectionFactoryMulti") final InfluxDBConnectionFactory connectionFactory) {
/*
* You can use your own 'PointCollectionConverter' implementation, e.g. in case
* you want to use your own custom measurement object.
*/
return new InfluxDBTemplate<>(connectionFactory, new PointConverter());
}

@Bean(name = "defaultTemplateMulti")
public DefaultInfluxDBTemplate defaultTemplate(@Qualifier("connectionFactoryMulti") final InfluxDBConnectionFactory connectionFactory) {
/*
* If you are just dealing with Point objects from 'influxdb-java' you could
* also use an instance of class DefaultInfluxDBTemplate.
*/
return new DefaultInfluxDBTemplate(connectionFactory);
}
}

처음에 소개했던 InfluxDBConfiguration과 거의 흡사하다. 다른점이라고는 @EnableConfigurationProperties에 위에서 작성한 InfluxDBProeprtiesMulti클래스를 설정하고 Bean으로 등록하는 이름을 원하는 이름으로 지정하며 이를 주입받는 클래스에 @Qualifier로 Bean을 지정해주면 된다.

사용법

사용법도 기존과 동일하다. yaml파일에 작성한 설정정보를 자동으로 읽어 지정한 이름으로 Bean을 등록하였으므로 InfluxDBTemplate에 주입받는 Bean의 이름만 @Qualifier로 지정해주면 끝이다.

1
2
3
4
5
6
7
8
@Service
public class InfluxDBServiceMulti {
private final InfluxDBTemplate<Point> influxDBTemplate;

public HdfsCoreServiceImpl(@Qualifier("influxDBTemplateMulti") InfluxDBTemplate<Point> influxDBTemplate) {
this.influxDBTemplate = influxDBTemplate;
}
}

댓글

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×