Ingebouwde Redis-server met Spring Boot Test

1. Overzicht

Spring Data Redis biedt een gemakkelijke manier om te integreren met Redis-instances.

In sommige gevallen het is handiger om een ​​embedded server te gebruiken dan om een ​​omgeving te creëren met een echte server.

Daarom zullen we leren hoe u de Embedded Redis Server instelt en gebruikt.

2. Afhankelijkheden

Laten we beginnen met het toevoegen van de nodige afhankelijkheden:

 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 spring-boot-starter-test afhankelijkheid bevat alles wat we nodig hebben om integratietests uit te voeren.

Bovendien is het embedded-redis bevat de embedded server die we zullen gebruiken.

3. Installatie

Na het toevoegen van de afhankelijkheden, moeten we de verbindingsinstellingen tussen de Redis-server en onze applicatie definiëren.

Laten we beginnen met het maken van een klasse die onze eigendommen zal bevatten:

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

Vervolgens moeten we een configuratieklasse maken die de verbinding definieert en onze eigenschappen gebruikt:

@Configuration @EnableRedisRepositories openbare klasse RedisConfiguration {@Bean openbaar LettuceConnectionFactory redisConnectionFactory (RedisProperties redisProperties) {retourneer nieuwe LettuceConnectionFactory (redisProperties.getRedisHost (), (redisProperties); } @Bean openbare RedisTemplate redisTemplate (LettuceConnectionFactory connectionFactory) {RedisTemplate-sjabloon = nieuwe RedisTemplate (); template.setConnectionFactory (connectionFactory); retour sjabloon; }}

De configuratie is vrij eenvoudig. Bovendien stelt het ons in staat om de embedded server op een andere poort te laten draaien.

Bekijk ons ​​artikel Inleiding tot Spring Data Redis voor meer informatie over Redis met Spring Boot.

4. Ingebouwde Redis-server

Nu gaan we de embedded server configureren en gebruiken in een van onze tests.

Laten we eerst een application.properties bestand in de testresource-directory (src / test / resources):

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

Daarna maken we een @TestConfiguration-annotated klasse:

@TestConfiguration openbare klasse TestRedisConfiguration {privé RedisServer redisServer; openbare TestRedisConfiguration (RedisProperties redisProperties) {this.redisServer = nieuwe RedisServer (redisProperties.getRedisPort ()); } @PostConstruct openbare leegte postConstruct () {redisServer.start (); } @PreDestroy openbare leegte preDestroy () {redisServer.stop (); }}

De server wordt gestart zodra de context actief is. Het begint op onze computer op de poort die we in onze eigenschappen hebben gedefinieerd. We kunnen nu bijvoorbeeld de test uitvoeren zonder de daadwerkelijke Redis-server te stoppen.

Idealiter zouden we het willen starten op de willekeurig beschikbare poort, maar embedded Redis heeft deze functie nog niet. Wat we nu zouden kunnen doen, is de willekeurige poort verkrijgen via de ServerSocket API.

Bovendien stopt de server zodra de context is vernietigd.

De server kan ook worden voorzien van ons eigen uitvoerbare bestand:

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

Verder kan het uitvoerbare bestand per besturingssysteem worden gedefinieerd:

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

Laten we tot slot een test maken die onze TestRedisConfiguration klasse:

@RunWith (SpringRunner.class) @SpringBootTest (klassen = TestRedisConfiguration.class) openbare klasse UserRepositoryIntegrationTest {@Autowired privé UserRepository userRepository; @Test openbare leegte shouldSaveUser_toRedis () {UUID id = UUID.randomUUID (); Gebruiker gebruiker = nieuwe gebruiker (id, "naam"); Gebruiker opgeslagen = userRepository.save (gebruiker); assertNotNull (opgeslagen); }}

De gebruiker is opgeslagen op onze ingebouwde Redis-server.

Bovendien moesten we handmatig TestRedisConfiguration naar SpringBootTest. Zoals we al eerder zeiden, is de server gestart voor de test en daarna gestopt.

5. Conclusie

De Embedded Redis Server is de perfecte tool om de eigenlijke server in de testomgeving te vervangen. We hebben gezien hoe we het moeten configureren en hoe we het in onze test kunnen gebruiken.

Zoals altijd is de code voor voorbeelden beschikbaar op GitHub.