国、地域などのいくつかのBeanに読み取り専用キャッシュを実装する必要がありました。
それらが実際にキャッシュされているかどうかを確認するために、Springを使用した統合テストを作成しました。テストはそれほど適切ではありません、それは私が得たかったものの単なる検証です。これをヒントとして使用し、独自に実装できます。
スプリングを使用した統合テストの記述方法に関する記事については、こちらをお読みください。
@Configurable(autowire = Autowire.BY_NAME)
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:applicationContext.xml" })
public class HibernateCachingTestIntg {
@Autowired
private ConfigurationDAO configurationDAO;
@Autowired
private CountryDAO countryDAO;
@Test
public void testGetCountries() {
for (int i = 0; i < 5; i++) {
StopWatch sw = new StopWatch("C");
sw.start();
countryDAO.listCountries();
sw.stop();
System.out.println(sw);
}
}
@Test
public void testGetRegionList() {
for (int i = 0; i < 5; i++) {
StopWatch sw = new StopWatch("R");
sw.start();
configurationDAO.getRegionList();
sw.stop();
System.out.println(sw);
}
}
}
そしてここに出力があります:-
StopWatch 'C': running time (millis) = 217; [] took 217 = 100%
StopWatch 'C': running time (millis) = 15; [] took 15 = 100%
StopWatch 'C': running time (millis) = 16; [] took 16 = 100%
StopWatch 'C': running time (millis) = 15; [] took 15 = 100%
StopWatch 'C': running time (millis) = 16; [] took 16 = 100%
StopWatch 'R': running time (millis) = 201; [] took 201 = 100%
StopWatch 'R': running time (millis) = 15; [] took 15 = 100%
StopWatch 'R': running time (millis) = 0; [] took 0 = 0%
StopWatch 'R': running time (millis) = 16; [] took 16 = 100%
StopWatch 'R': running time (millis) = 15; [] took 15 = 100%
ここでわかるように、クエリの最初の実行には時間がかかり、その後の実行時間は短くなります。クエリロガーをオンにすると、SQLが初めて起動されることがわかります。