Документация AWS для AWS X-Ray в настоящее время не дает никаких решений для Java проектов, в которых не используется Tomcat JDB C.
Чтобы обрабатывать запросы к базе данных с помощью spring-boot-data-jpa
, вам также необходимо включить Tomcat JDB C в качестве зависимости, настроить объект источника данных Tomcat вместе с вашим Hikari и включить перехватчик XRay как JDB C перехватчик либо:
- Добавление его в вашу конфигурацию, используя:
dataSource.setJdbcInterceptors("com.amazonaws.xray.sql.postgres.TracingInterceptor;");
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'
...
}
Конфигурация базы данных (пружина):
@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 JDB C в качестве дополнительной зависимости, если это возможно.
Нет ли способа обойти это без использования Tomcat?
Другие примечания:
Пружинный пыльник 2.1.7
Gradle 6.0.1
AWS SDK для Java 2.4.0