Настроить Cassandra с фреймворком micronaut от yaml

Я использую платформу micronaut и пытаюсь настроить доступ к данным cassandra из application.yml. Для стандартного тестового варианта использования я могу настроить драйвер datastax.

cassandra:
    default:
        clusterName: "Test Cluster"
        contactPoint: "192.168.99.100"
        port: 9042
        maxSchemaAgreementWaitSeconds: 20
        ssl: false

Однако я не могу найти способ предоставить конфигурацию для использования с методом .withCredentials

Я вижу, что реализация в https://github.com/micronaut-projects/micronaut-core/blob/dc8c423be1979817c9c8f53440f3b87e775523b2/configurations/cassandra/src/main/java/io/micronaut/configuration/.java

сделать следующее

 @ConfigurationBuilder(allowZeroArgs = true, prefixes = { "with", "add" })
    Cluster.Builder builder = Cluster.builder();

однако для метода withCredentials требуется 2 параметра https://docs.datastax.com/en/drivers/java/2.0/com/datastax/driver/core/Cluster.Builder.html#withCredentials-java.lang.String.-java.lang.String-

public Cluster.Builder withCredentials(String username,
                                       String password)

Каким будет yaml способ предоставить конфигурацию этому методу?


person Javier Abrego    schedule 12.01.2019    source источник
comment
Вероятно, нам следует улучшить CassandraConfiguration, чтобы сделать конструктор доступным для программной настройки. Пожалуйста, не стесняйтесь сообщать о проблеме, связанной с этим.   -  person Graeme Rocher    schedule 14.01.2019
comment
Спасибо, это работает как шарм, и ваша реализация прошла очень быстро!   -  person Javier Abrego    schedule 18.01.2019


Ответы (1)


С новой функцией, добавленной @ graeme-rocher в https://github.com/micronaut-projects/micronaut-core/issues/1106 Мне удалось это сделать следующим образом:

import com.datastax.driver.core.Cluster
import io.micronaut.context.ApplicationContext
import io.micronaut.context.event.BeanCreatedEvent
import io.micronaut.context.event.BeanCreatedEventListener
import org.slf4j.Logger
import org.slf4j.LoggerFactory

import javax.inject.Singleton

@Singleton
class ClusterBuilderListener implements BeanCreatedEventListener<Cluster.Builder> {
    private static final Logger LOG = LoggerFactory.getLogger(ClusterBuilderListener.class)

    @Override
    Cluster.Builder onCreated(BeanCreatedEvent<Cluster.Builder> event) {
        def builder = event.getBean()
        ApplicationContext applicationContext = (ApplicationContext) event.getSource()

        if(applicationContext.getEnvironment().getActiveNames().contains('pro') ){
            builder.withCredentials("username", "password")
        }
        return builder
    }
}
person Javier Abrego    schedule 18.01.2019