- 
                Notifications
    You must be signed in to change notification settings 
- Fork 41.6k
Closed as not planned
Closed as not planned
Copy link
Labels
status: supersededAn issue that has been superseded by anotherAn issue that has been superseded by another
Description
Would it be possible to make it easy to apply customizers to R2DBC observability?
For example, consider this fuctional interface:
@FunctionalInterface
public interface ProxyConnectionFactoryBuilderCustomizer {
    void customize(ConnectionFactory connectionFactory, ProxyConnectionFactory.Builder builder);
}The current listener org.springframework.boot.actuate.autoconfigure.r2dbc.R2dbcObservationAutoConfiguration could be re-written:
@Bean
ConnectionFactoryDecorator connectionFactoryDecorator(ObjectProvider<ProxyConnectionFactoryBuilderCustomizer> customizers) {
    return (connectionFactory) -> {
        var builder = ProxyConnectionFactory.builder(connectionFactory);
        customizers.forEach(customizer -> customizer.customize(connectionFactory, builder));
        return builder.build();
    };
}
@Bean
@ConditionalOnBean(ObservationRegistry.class)
ProxyConnectionFactoryBuilderCustomizer connectionObserver(R2dbcObservationProperties properties,
                                                           ObservationRegistry observationRegistry,
                                                           ObjectProvider<QueryObservationConvention> queryObservationConvention,
                                                           ObjectProvider<QueryParametersTagProvider> queryParametersTagProvider) {
    return (connectionFactory, builder) -> {
        HostAndPort hostAndPort = extractHostAndPort(connectionFactory);
        ObservationProxyExecutionListener listener = new ObservationProxyExecutionListener(observationRegistry,
                connectionFactory, hostAndPort.host(), hostAndPort.port());
        listener.setIncludeParameterValues(properties.isIncludeParameterValues());
        queryObservationConvention.ifAvailable(listener::setQueryObservationConvention);
        queryParametersTagProvider.ifAvailable(listener::setQueryParametersTagProvider);
        builder.listener(listener);
    };
}With this pattern, it is very easy for other applications to apply their own listeners and customizations to the ProxyConnectionFactory initalization.
Metadata
Metadata
Assignees
Labels
status: supersededAn issue that has been superseded by anotherAn issue that has been superseded by another