gpt4 book ai didi

spring-data-jpa - 如何在不使用 Tomcat JDBC 的情况下为基于 Hikari 的项目设置 AWS X-Ray SQL Instrumentation?

转载 作者:行者123 更新时间:2023-12-04 12:10:31 28 4
gpt4 key购买 nike

AWS Documentation for AWS X-Ray目前没有为不使用 Tomcat JDBC 的 Java 项目提供任何解决方案。

为了使用 spring-boot-data-jpa 检测数据库查询,您还需要包含 Tomcat JDBC 作为依赖项,并设置一个 Tomcat DataSource 对象以及您的 Hikari 对象,并通过以下任一方式将 XRay 拦截器包含为 JDBC 拦截器:

  • 使用以下命令将其添加到您的配置中:
  • dataSource.setJdbcInterceptors("com.amazonaws.xray.sql.postgres.TracingInterceptor;");
  • 作为属性(property):
  • spring.datasource.jdbc-interceptors=com.amazonaws.xray.sql.postgres.TracingInterceptor
    Gradle :
    dependencies {
    ...
    implementation 'org.springframework.boot:spring-boot-starter'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

    implementation "com.amazonaws:aws-java-sdk-core"
    implementation "com.amazonaws:aws-xray-recorder-sdk-core" // Required for core xray features
    implementation "com.amazonaws:aws-xray-recorder-sdk-spring" // Required for spring annotations
    implementation "com.amazonaws:aws-xray-recorder-sdk-sql-postgres" // required for db callouts

    implementation 'org.apache.tomcat:tomcat-jdbc:9.0.31'
    ...
    }

    数据库配置( Spring ):
        @Bean(name = "dataSource")
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource() {
    final org.apache.tomcat.jdbc.pool.DataSource dataSource = new org.apache.tomcat.jdbc.pool.DataSource();
    dataSource.setUsername(getUsername());
    dataSource.setPassword(getPassword());
    dataSource.setUrl(POSTGRES_URL_PREFIX
    + getHost()
    + ":" + getPort()
    + "/" + getName()
    + "?stringtype=unspecified");
    dataSource.setDriverClassName(getDriver());
    dataSource.setJdbcInterceptors("com.amazonaws.xray.sql.postgres.TracingInterceptor;");

    final HikariDataSource hikariDataSource = new HikariDataSource();
    hikariDataSource.setDataSource(dataSource);

    return hikariDataSource;
    }

    我觉得这很笨拙,如果可能的话,我宁愿不必将 Tomcat JDBC 作为附加依赖项。

    不使用Tomcat就没有办法解决这个问题吗?

    其他注意事项:
  • Spring Boot 2.1.7
  • Gradle 6.0.1
  • 适用于 Java 的 AWS 开发工具包 2.4.0
  • 最佳答案

    原来someone else had this question . AWS 开发人员已在 feature branch 中致力于此于 2019 年 11 月合并,用于 SDK 版本 2.3.0 .

    我还没有找到关于这个新功能的任何文档,所以在深入研究 PR 代码之后,我设法发现它比以前的实现更简单。

    只需将以下依赖项而不是特定于 postgres 的依赖项添加到您的 build.gradle文件(或类似文件):

        implementation "com.amazonaws:aws-java-sdk-core:2.4.0"
    implementation "com.amazonaws:aws-xray-recorder-sdk-core:2.4.0"
    implementation "com.amazonaws:aws-xray-recorder-sdk-sql:2.4.0"

    然后简单地创建一个 TracingDataSource对象在您的数据源配置中,并将您的原始 javax.sql.DataSource 传递给它目的。这应该在任何 @Configuration 中完成用于创建 DataSource 的带注释的类 bean 角,扁 bean 。
        @Bean(name = "dataSource")
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource() {
    final DataSource dataSource = DataSourceBuilder
    .create()
    .username(getUsername())
    .password(getPassword())
    .url(POSTGRES_URL_PREFIX
    + getHost()
    + ":" + getPort()
    + "/" + getName()
    + "?stringtype=unspecified")
    .driverClassName(getDriver())
    .build();

    final TracingDataSource tracingDataSource = new TracingDataSource(dataSource);
    return tracingDataSource;
    }

    这里的所有都是它的。我真的希望这对某人有所帮助,因为我花了很多时间试图让它在没有 Tomcat 的情况下工作,而且 AWS 文档在这里也无济于事。

    关于spring-data-jpa - 如何在不使用 Tomcat JDBC 的情况下为基于 Hikari 的项目设置 AWS X-Ray SQL Instrumentation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60672795/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com