- JPA Query counter with dynamic proxy
- Implemented to count the number of queries occurring in JPA
- QueryCounter Post
1. Specify the path to the Entity in the EntityManager.
/config/QueryCounterConfig.java@ConfigurationpublicclassQueryCountConfig {
...
@BeanpublicLocalContainerEntityManagerFactoryBeanentityManagerFactory() {
LocalContainerEntityManagerFactoryBeanem = newLocalContainerEntityManagerFactoryBean();
em.setDataSource(queryCountDataSource());
em.setPackagesToScan(
// Specify the path to the entity"com.example.querycounter.domain",
...
);
...
returnem;
}
...
}2. Inject a Counter bean and start query count
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
publicclassQueryCounterTest {
@AutowiredprivateCountercounter;
@TestvoidtestQueryCount() {
counter.startQueryCount();
// Business logic that wants to count the number of queriesassertThat(counter.getQueryCount()).isEqualTo("Expected number of queries");
counter.printQueryCount();
}
}@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
publicclassQueryCounterTest {
@AutowiredprivateCountercounter;
@AutowiredprivateUserServiceuserService;
@AutowiredprivateUserRepositoryuserRepository;
@AutowiredprivatePostRepositorypostRepository;
@BeforeEachvoidsetUp() {
for (inti = 1; i <= 10; i++) {
Useruser = userRepository.save(newUser(i + "번 user"));
Postpost = Post.builder()
.writer(user)
.contents(i + "번 post")
.build();
postRepository.save(post);
}
}
@TestvoidN_Plus_1_Problem() {
counter.startQueryCount();
List<String> userPostContentsList = userService.getAllPostContents();
assertThat(userPostContentsList).hasSize(10);
assertThat(counter.getQueryCount()).isEqualTo(11);
counter.printQueryCount();
}
}