Pelayan Redis Terbenam dengan Spring Boot Test

1. Gambaran keseluruhan

Spring Data Redis menyediakan cara mudah untuk disatukan dengan contoh Redis.

Walau bagaimanapun, dalam beberapa kes, lebih mudah menggunakan pelayan tertanam daripada membuat persekitaran dengan pelayan yang sebenarnya.

Oleh itu, kita akan belajar cara menyediakan dan menggunakan Pelayan Redis Terbenam.

2. Kebergantungan

Mari mulakan dengan menambahkan kebergantungan yang diperlukan:

 org.springframework.boot spring-boot-starter-data-redis   it.ozimov embedded-redis 0.7.2 test   org.springframework.boot spring-boot-starter-test test 

The bunga-boot-starter ujian pergantungan mengandungi semua yang kita perlu untuk menjalankan ujian integrasi.

Selain itu, embedded-redis mengandungi pelayan terbenam yang akan kami gunakan.

3. Persediaan

Setelah menambahkan kebergantungan, kita harus menentukan tetapan sambungan antara pelayan Redis dan aplikasi kita.

Mari mulakan dengan membuat kelas yang akan memuatkan sifat kami:

@Configuration public class RedisProperties { private int redisPort; private String redisHost; public RedisProperties( @Value("${spring.redis.port}") int redisPort, @Value("${spring.redis.host}") String redisHost) { this.redisPort = redisPort; this.redisHost = redisHost; } // getters }

Seterusnya, kita harus membuat kelas konfigurasi yang menentukan sambungan dan menggunakan sifat kita:

@Configuration @EnableRedisRepositories public class RedisConfiguration { @Bean public LettuceConnectionFactory redisConnectionFactory( RedisProperties redisProperties) { return new LettuceConnectionFactory( redisProperties.getRedisHost(), redisProperties.getRedisPort()); } @Bean public RedisTemplate redisTemplate(LettuceConnectionFactory connectionFactory) { RedisTemplate template = new RedisTemplate(); template.setConnectionFactory(connectionFactory); return template; } }

Konfigurasi agak mudah. Selain itu, ia membolehkan kita menjalankan pelayan tertanam pada port yang berbeza.

Lihat artikel Pengenalan kepada Spring Data Redis kami untuk mengetahui lebih lanjut mengenai Redis dengan Spring Boot.

4. Pelayan Redis Terbenam

Sekarang, kami akan mengkonfigurasi pelayan terbenam dan menggunakannya dalam salah satu ujian kami.

Pertama, mari buat fail application.properties di direktori sumber ujian ( src / test / resources):

spring.redis.host=localhost spring.redis.port=6370

Selepas itu, kami akan membuat kelas tanpa tanda @TestConfiguration:

@TestConfiguration public class TestRedisConfiguration { private RedisServer redisServer; public TestRedisConfiguration(RedisProperties redisProperties) { this.redisServer = new RedisServer(redisProperties.getRedisPort()); } @PostConstruct public void postConstruct() { redisServer.start(); } @PreDestroy public void preDestroy() { redisServer.stop(); } }

Pelayan akan bermula sebaik sahaja konteksnya habis. Ia akan bermula pada mesin kami di port yang telah kami tentukan dalam sifat kami . Sebagai contoh, kita sekarang boleh menjalankan ujian tanpa menghentikan pelayan Redis yang sebenarnya.

Sebaik-baiknya, kami ingin memulakannya di port yang tersedia secara rawak tetapi Redis yang tersemat belum mempunyai ciri ini. Apa yang dapat kita lakukan sekarang adalah mendapatkan port rawak melalui ServerSocket API.

Selain itu, pelayan akan berhenti sebaik sahaja konteksnya musnah.

Pelayan juga boleh disediakan dengan kami sendiri yang boleh dilaksanakan:

this.redisServer = new RedisServer("/path/redis", redisProperties.getRedisPort());

Selanjutnya, yang dapat dilaksanakan dapat ditentukan setiap sistem operasi:

RedisExecProvider customProvider = RedisExecProvider.defaultProvider() .override(OS.UNIX, "/path/unix/redis") .override(OS.Windows, Architecture.x86_64, "/path/windows/redis") .override(OS.MAC_OS_X, Architecture.x86_64, "/path/macosx/redis") this.redisServer = new RedisServer(customProvider, redisProperties.getRedisPort());

Akhirnya, mari buat ujian yang akan menggunakan kelas TestRedisConfiguration kami :

@RunWith(SpringRunner.class) @SpringBootTest(classes = TestRedisConfiguration.class) public class UserRepositoryIntegrationTest { @Autowired private UserRepository userRepository; @Test public void shouldSaveUser_toRedis() { UUID id = UUID.randomUUID(); User user = new User(id, "name"); User saved = userRepository.save(user); assertNotNull(saved); } }

Pengguna telah disimpan ke pelayan Redis tertanam kami.

Selain itu, kami terpaksa menambahkan TestRedisConfiguration secara manual ke SpringBootTest . Seperti yang kami katakan sebelumnya, pelayan telah bermula sebelum ujian dan berhenti selepas itu.

5. Kesimpulan

Embedded Redis Server adalah alat yang sempurna untuk menggantikan pelayan sebenar di persekitaran ujian. Kami telah melihat bagaimana mengkonfigurasinya dan bagaimana menggunakannya dalam ujian kami.

Seperti biasa, kod contoh boleh didapati di GitHub.