Трассировка SQL-запросов с помощью X-Ray и Spring Boot 2

Текущий перехватчик трассировки X-Ray SQL использует Tomcat JDBC Pool, но Spring Boot 2 использует HikariCP в качестве пула по умолчанию. Можно ли вместо этого настроить трассировку jdbc в HikariCP?

Здесь (https://forums.aws.amazon.com/thread.jspa?threadID=254847) предлагается использовать оба источника данных:

DataSource dataSource = new org.apache.tomcat.jdbc.pool.DataSource();
HikariDataSource hikariDataSource = new HikariDataSource();
... // data source configuration
dataSource.setJdbcInterceptors("com.amazonaws.xray.sql.postgres.TracingInterceptor;");
hikariDataSource.setDataSource(dataSource);

Но если у меня есть библиотека HikariCP в пути к классам, Spring настроит ее как источник данных.

Я пробовал с DatasourceBuilder, а также принудительно использовал тип с помощью параметра spring.datasource.type

Намек?


person demetrio812    schedule 18.09.2019    source источник


Ответы (3)


При загрузке Spring вы можете по-прежнему использовать Tomcat через HikariCP в качестве пула соединений:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
    <exclusions>
        <exclusion>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
        </exclusion>
    </exclusions>
</dependency>    
<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-jdbc</artifactId>
</dependency>
person user7294900    schedule 18.09.2019
comment
Я знаю, но есть причина, по которой теперь они используют HikariCP по умолчанию, и я не хочу, чтобы меня заставляли использовать пул tomcat jdbc из-за X-Ray - person demetrio812; 18.09.2019
comment
@ demetrio812 В HikariCP есть связанная открытая проблема github.com/brettwooldridge/HikariCP/issues/579 - person user7294900; 18.09.2019
comment
Спасибо за ссылку, они говорят, что, вероятно, хорошо иметь краткую запись с классом рабочего примера в wiki / faq для людей, которые хотят перейти с bonecp (перехватчик соединения) или tomcat jdbc-pool (перехватчики), чтобы это могло быть возможно? - person demetrio812; 18.09.2019
comment
Как вы думаете, есть ли способ смешать 2 пула, как это было предложено в сообщении на форуме aws? - person demetrio812; 18.09.2019

В настоящее время мы изучаем решение, которое будет работать как с Tomcat JDBC, так и с HikariCP. Нам известно, что в настоящее время невозможно обойтись без Tomcat JDBC в качестве зависимости. Пожалуйста, не переключайтесь.

person Chan Chiem Jeffery Saeteurn    schedule 27.09.2019
comment
Спасибо, не могли бы вы написать сюда, когда у вас будет обновление? - person demetrio812; 28.09.2019

Решено то же самое с использованием TracingDataSource, но по-прежнему используется HikariCP в качестве пула соединений.

Ссылка https://github.com/aws/aws-xray-sdk-java/issues/88#issuecomment-570328275

Код: (обратите внимание, я использую библиотеку JDBC AWS Secrets Manager aws-secretsmanager-jdbc для подключения к базе данных с использованием секретов, хранящихся в AWS Secrets Manager)

import com.amazonaws.xray.sql.TracingDataSource;

...
...
@Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource() {

        return TracingDataSource
                .decorate(DataSourceBuilder.create()
                        .driverClassName("com.amazonaws.secretsmanager.sql.AWSSecretsManagerPostgreSQLDriver")
                        .url("jdbc-secretsmanager:postgresql://" + System.getenv("PGHOST") + ":"
                                + System.getenv("PGPORT") + "/" + System.getenv("PGDATABASE"))
                        .username(System.getenv("SECRET_NAME")).build());

    }

Зависимость:

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-xray-recorder-sdk-sql</artifactId>
</dependency>
person arunjacob    schedule 02.06.2021