Skip to content

Commit a24bd0a

Browse files
author
Rajeswari
committed
Updated datasource post processor
1 parent 5fb48e5 commit a24bd0a

File tree

1 file changed

+23
-6
lines changed
  • instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc

1 file changed

+23
-6
lines changed

instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/DataSourcePostProcessor.java

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
1-
/*
2-
* Copyright The OpenTelemetry Authors
3-
* SPDX-License-Identifier: Apache-2.0
4-
*/
5-
61
package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.jdbc;
72

83
import com.google.errorprone.annotations.CanIgnoreReturnValue;
94
import io.opentelemetry.api.OpenTelemetry;
105
import io.opentelemetry.instrumentation.jdbc.datasource.JdbcTelemetry;
116
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.InstrumentationConfigUtil;
127
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
8+
9+
import javax.annotation.Nonnull;
10+
import javax.annotation.Nullable;
1311
import javax.sql.DataSource;
12+
13+
import org.aopalliance.intercept.MethodInterceptor;
14+
import org.aopalliance.intercept.MethodInvocation;
15+
import org.springframework.aop.framework.ProxyFactory;
1416
import org.springframework.aop.scope.ScopedProxyUtils;
17+
import org.springframework.aop.support.AopUtils;
1518
import org.springframework.beans.factory.ObjectProvider;
1619
import org.springframework.beans.factory.config.BeanPostProcessor;
1720
import org.springframework.core.Ordered;
@@ -50,7 +53,7 @@ public Object postProcessAfterInitialization(Object bean, String beanName) {
5053
&& !isRoutingDatasource(bean)
5154
&& !ScopedProxyUtils.isScopedTarget(beanName)) {
5255
DataSource dataSource = (DataSource) bean;
53-
return JdbcTelemetry.builder(openTelemetryProvider.getObject())
56+
DataSource wrapped = JdbcTelemetry.builder(openTelemetryProvider.getObject())
5457
.setStatementSanitizationEnabled(
5558
InstrumentationConfigUtil.isStatementSanitizationEnabled(
5659
configPropertiesProvider.getObject(),
@@ -66,6 +69,20 @@ public Object postProcessAfterInitialization(Object bean, String beanName) {
6669
.getBoolean("otel.instrumentation.jdbc.experimental.transaction.enabled", false))
6770
.build()
6871
.wrap(dataSource);
72+
73+
ProxyFactory proxyFactory = new ProxyFactory(DataSource.class);
74+
proxyFactory.setTarget(bean);
75+
proxyFactory.addAdvice(
76+
new MethodInterceptor() {
77+
@Nullable
78+
@Override
79+
public Object invoke(@Nonnull MethodInvocation invocation) throws Throwable {
80+
return AopUtils.invokeJoinpointUsingReflection(
81+
wrapped, invocation.getMethod(), invocation.getArguments());
82+
}
83+
});
84+
85+
return proxyFactory.getProxy();
6986
}
7087
return bean;
7188
}

0 commit comments

Comments
 (0)