DataSourceTracingConfig.kt

package org.openapitools.configuration

import io.opentelemetry.api.OpenTelemetry
import io.opentelemetry.instrumentation.jdbc.datasource.JdbcTelemetry
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.beans.factory.config.BeanPostProcessor
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.context.annotation.Lazy
import javax.sql.DataSource

@Configuration(proxyBeanMethods = false)
class DataSourceTracingConfig {
	@Bean
	fun dataSourceTracingPostProcessor(
		@Lazy @Autowired openTelemetry: OpenTelemetry,
	): BeanPostProcessor =
		object : BeanPostProcessor {
			override fun postProcessAfterInitialization(
				bean: Any,
				beanName: String,
			): Any =
				if (beanName == "dataSource" && bean is DataSource) {
					JdbcTelemetry.create(openTelemetry).wrap(bean)
				} else {
					bean
				}
		}
}