Innebygd Redis Server med Spring Boot Test

1. Oversikt

Spring Data Redis gir en enkel måte å integrere med Redis-forekomster.

I noen tilfeller det er mer praktisk å bruke en innebygd server enn å skape et miljø med en ekte server.

Derfor vil vi lære å sette opp og bruke den innebygde Redis-serveren.

2. Avhengigheter

La oss begynne med å legge til de nødvendige avhengighetene:

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

De vår-støvel-start-test avhengighet inneholder alt vi trenger for å kjøre integrasjonstester.

I tillegg har innebygd-redis inneholder den innebygde serveren vi skal bruke.

3. Oppsett

Etter å ha lagt til avhengighetene, bør vi definere tilkoblingsinnstillingene mellom Redis-serveren og applikasjonen vår.

La oss begynne med å lage en klasse som vil inneholde egenskapene våre:

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

Deretter bør vi lage en konfigurasjonsklasse som definerer tilkoblingen og bruker egenskapene våre:

@Configuration @EnableRedisRepositories offentlig klasse RedisConfiguration {@Bean public LettuceConnectionFactory redisConnectionFactory (RedisProperties redisProperties) {return new LettuceConnectionFactory (redisProperties.getRedisHost (), redisProperties.getRis; } @Bean public RedisTemplate redisTemplate (LettuceConnectionFactory connectionFactory) {RedisTemplate mal = ny RedisTemplate (); template.setConnectionFactory (connectionFactory); returmal; }}

Konfigurasjonen er ganske enkel. I tillegg tillater det oss å kjøre den innebygde serveren på en annen port.

Ta en titt på vår introduksjon til Spring Data Redis-artikkelen for å lære mer om Redis med Spring Boot.

4. Innebygd Redis Server

Nå konfigurerer vi den innebygde serveren og bruker den i en av testene våre.

For det første, la oss lage en application.properties filen i testressurskatalogen (src / test / resources):

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

Etter det oppretter vi en @TestConfiguration-anmeldt klasse:

@TestConfiguration offentlig klasse TestRedisConfiguration {private RedisServer redisServer; offentlig TestRedisConfiguration (RedisProperties redisProperties) {this.redisServer = ny RedisServer (redisProperties.getRedisPort ()); } @ PostConstruct offentlig ugyldig postConstruct () {redisServer.start (); } @ PreDestroy offentlig ugyldig preDestroy () {redisServer.stop (); }}

Serveren starter når konteksten er oppe. Det starter på maskinen vår på porten som vi har definert i egenskapene våre. For eksempel kan vi nå kjøre testen uten å stoppe den faktiske Redis-serveren.

Ideelt sett vil vi starte den på den tilfeldige tilgjengelige porten, men innebygd Redis har ikke denne funksjonen ennå. Det vi kunne gjøre akkurat nå er å få den tilfeldige porten via ServerSocket API.

I tillegg vil serveren stoppe når konteksten er ødelagt.

Serveren kan også få vår egen kjørbare:

this.redisServer = ny RedisServer ("/ bane / redis", redisProperties.getRedisPort ());

Videre kan den kjørbare defineres per operativsystem:

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 = ny RedisServer (customProvider, redisProperties.getRedisPort ());

Til slutt, la oss lage en test som bruker vår TestRedisConfiguration klasse:

@RunWith (SpringRunner.class) @SpringBootTest (klasser = TestRedisConfiguration.class) offentlig klasse UserRepositoryIntegrationTest {@Autowired private UserRepository userRepository; @Test offentlig ugyldig skalSaveUser_toRedis () {UUID id = UUID.randomUUID (); Brukerbruker = ny bruker (id, "navn"); Bruker lagret = userRepository.save (bruker); assertNotNull (lagret); }}

Brukeren er lagret på den innebygde Redis-serveren vår.

I tillegg måtte vi legge til manuelt TestRedisConfiguration til SpringBootTest. Som vi sa tidligere, har serveren startet før testen og stoppet etter.

5. Konklusjon

Den innebygde Redis-serveren er det perfekte verktøyet for å erstatte den faktiske serveren i testmiljøet. Vi har sett hvordan vi skal konfigurere den og hvordan du bruker den i testen.

Som alltid er koden for eksempler tilgjengelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found