Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
AOP dengan Spring dan X-Ray SDK for Java
Topik ini menjelaskan cara menggunakan SDK X-Ray dan Kerangka Kerja Spring untuk menginstrumentasikan aplikasi Anda tanpa mengubah logika intinya. Ini berarti bahwa kini ada cara non-invasif untuk menginstrumentasikan aplikasi Anda agar berjalan dari jarak jauh dalam AWS.
Untuk mengaktifkan AOP di Spring
Mengonfigurasi Spring
Anda dapat menggunakan Maven atau Gradle untuk mengonfigurasi Spring menggunakan AOP untuk instrumen aplikasi Anda.
Jika Anda menggunakan Maven untuk membangun aplikasi Anda, tambahkan ketergantungan berikut di file pom.xml
Anda.
<dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-xray-recorder-sdk-spring</artifactId> <version>2.11.0</version> </dependency>
Untuk Gradle, tambahkan ketergantungan berikut di file build.gradle
Anda.
compile 'com.amazonaws:aws-xray-recorder-sdk-spring:2.11.0'
Mengkonfigurasi Spring
Selain dependensi Spring yang dijelaskan di bagian sebelumnya, jika Anda menggunakan Spring Boot, tambahkan dependensi berikut jika belum ada di classpath Anda.
Maven:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> <version>2.5.2</version> </dependency>
Gradle:
compile 'org.springframework.boot:spring-boot-starter-aop:2.5.2'
Menambahkan filter pelacakan ke aplikasi Anda
Tambahkan Filter
ke kelas WebConfig
Anda. Teruskan nama segmen ke konstruktor AWSXRayServletFilter
sebagai string. Untuk informasi selengkapnya tentang filter pelacakan dan menginstrumentasikan permintaan masuk, lihat Menelusuri permintaan yang masuk dengan X-Ray SDK for Java.
contoh src/main/java/myapp/WebConfig .java - spring
package myapp
;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Bean;
import javax.servlet.Filter;
import com.amazonaws.xray.javax.servlet.AWSXRayServletFilter;
@Configuration
public class WebConfig {
@Bean
public Filter TracingFilter() {
return new AWSXRayServletFilter("Scorekeep
");
}
}
Support
Spring 6 menggunakan Jakarta
Untuk kelas filter, gantijavax
denganjakarta
. Saat mengkonfigurasi strategi penamaan segmen, tambahkanjakarta
sebelum nama kelas strategi penamaan, seperti pada contoh berikut:
package myapp; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Bean; import jakarta.servlet.Filter; import com.amazonaws.xray.jakarta.servlet.AWSXRayServletFilter; import com.amazonaws.xray.strategy.jakarta.SegmentNamingStrategy; @Configuration public class WebConfig { @Bean public Filter TracingFilter() { return new AWSXRayServletFilter(SegmentNamingStrategy.dynamic("Scorekeep")); } }
Anotasi kode Anda atau menerapkan antarmuka
Kelas Anda harus dianotasikan dengan @XRayEnabled
, atau menerapkan antarmuka XRayTraced
. Langkah ini memberitahu sistem AOP untuk membungkus fungsi kelas yang terdampak untuk instrumentasi X-Ray.
Mengaktifkan X-Ray dalam aplikasi
Untuk mengaktifkan pelacakan X-Ray dalam aplikasi Anda, kode Anda harus memperpanjang kelas abstrak BaseAbstractXRayInterceptor
dengan menimpa metode berikut.
-
generateMetadata
—Fungsi ini mengizinkan kustomisasi metadata yang terlampir pada pelacakan fungsi saat ini. Secara default, nama kelas dari fungsi yang sedang berjalan dicatat dalam metadata. Anda dapat menambahkan lebih banyak data jika Anda memerlukan informasi tambahan. -
xrayEnabledClasses
—Fungsi ini kosong, dan harus tetap demikian. Berfungsi sebagai host untuk pointcut yang menginstruksikan penghalang tentang metode yang digunakan untuk membungkus. Tentukan pointcut dengan menentukan kelas yang dianotasikan dengan@XRayEnabled
untuk melacak. Pernyataan pointcut berikut memberitahu penghalang untuk membungkus semua pengendali bean yang teranotasi dengan anotasi@XRayEnabled
.@Pointcut(“@within(com.amazonaws.xray.spring.aop.XRayEnabled) && bean(*Controller)”)
Jika proyek Anda menggunakan Spring Data JPA, pertimbangkan untuk memperluas dariAbstractXRayInterceptor
alih-alihBaseAbstractXRayInterceptor
.
Contoh
Kode berikut memperluas kelas abstrak BaseAbstractXRayInterceptor
.
@Aspect @Component public class XRayInspector extends BaseAbstractXRayInterceptor { @Override protected Map<String, Map<String, Object>> generateMetadata(ProceedingJoinPoint proceedingJoinPoint, Subsegment subsegment) throws Exception { return super.generateMetadata(proceedingJoinPoint, subsegment); } @Override @Pointcut("@within(com.amazonaws.xray.spring.aop.XRayEnabled) && bean(*Controller)") public void xrayEnabledClasses() {} }
Kode berikut adalah kelas yang akan diinstrumentasi oleh X-Ray.
@Service @XRayEnabled public class MyServiceImpl implements MyService { private final MyEntityRepository myEntityRepository; @Autowired public MyServiceImpl(MyEntityRepository myEntityRepository) { this.myEntityRepository = myEntityRepository; } @Transactional(readOnly = true) public List<MyEntity> getMyEntities(){ try(Stream<MyEntity> entityStream = this.myEntityRepository.streamAll()){ return entityStream.sorted().collect(Collectors.toList()); } } }
Jika Anda telah mengonfigurasi aplikasi Anda dengan benar, Anda akan melihat tumpukan panggilan aplikasi yang lengkap, dari pengendali hingga panggilan layanan seperti yang ditunjukkan pada tangkapan layar konsol tersebut.