Reactive Spring Data Elasticsearch with SpringBoot3

leocodms·2023년 2월 22일
0

Spring/SpringBoot

목록 보기
4/5
@Configuration
class ElasticsearchConfig(
    private val prop: ElasticsearchProperty,
) : ReactiveElasticsearchConfiguration() {

    override fun clientConfiguration(): ClientConfiguration {
        val credentialsProvider = BasicCredentialsProvider().apply {
            setCredentials(AuthScope.ANY, UsernamePasswordCredentials(prop.username, prop.password))
        }

        return ClientConfiguration.builder()
            .connectedTo(*prop.hostnames.toTypedArray())
            .withClientConfigurer(
                ElasticsearchClients.ElasticsearchHttpClientConfigurationCallback { httpAsyncClientBuilder ->
                    httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider)
                }
            )
            .build()
    }

    override fun reactiveElasticsearchOperations(
        elasticsearchConverter: ElasticsearchConverter,
        reactiveElasticsearchClient: ReactiveElasticsearchClient
    ): ReactiveElasticsearchOperations =
        super.reactiveElasticsearchOperations(
            elasticsearchCustomConverter(),
            ElasticsearchClients.createReactive(clientConfiguration())
        )

    fun elasticsearchCustomConverter(): ElasticsearchConverter =
        MappingElasticsearchConverter(SimpleElasticsearchMappingContext())
            .apply {
                val customConverters = listOf(
                    // ADD CUSTOM CONVERTER HERE!!
                    StringToLocalDateTimeConverter(),
                    CodeEnumReadingConverterFactory(),
                )
                this.setConversions(ElasticsearchCustomConversions(customConverters))
                this.afterPropertiesSet()
            }
}

ReactiveElasticsearchClient 환경 설정
SpringBoot3, JDK17 변경 사항 및 각 모듈 설명

profile
Backend Developer

0개의 댓글