[BAEL-3614] - Spring Redis Configuration From application.properties File (#9226)
* BAEL-3614 - Initial commit * BAEL-3614 - Removing unnecessary properties
This commit is contained in:
parent
31462c6b49
commit
b26b71567a
|
@ -9,15 +9,30 @@
|
|||
|
||||
<parent>
|
||||
<groupId>com.baeldung</groupId>
|
||||
<artifactId>persistence-modules</artifactId>
|
||||
<version>1.0.0-SNAPSHOT</version>
|
||||
<artifactId>parent-boot-2</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<relativePath>../../parent-boot-2</relativePath>
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-data-redis</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>redis.clients</groupId>
|
||||
<artifactId>jedis</artifactId>
|
||||
<version>${jedis.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.kstyrc</groupId>
|
||||
|
@ -32,15 +47,12 @@
|
|||
<dependency>
|
||||
<groupId>io.lettuce</groupId>
|
||||
<artifactId>lettuce-core</artifactId>
|
||||
<version>${lettuce-core.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<properties>
|
||||
<jedis.version>3.2.0</jedis.version>
|
||||
<embedded-redis.version>0.6</embedded-redis.version>
|
||||
<redisson.version>3.3.0</redisson.version>
|
||||
<lettuce-core.version>5.0.1.RELEASE</lettuce-core.version>
|
||||
</properties>
|
||||
|
||||
</project>
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
package com.baeldung.spring.redis.configuration;
|
||||
|
||||
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.data.redis.connection.RedisConnectionFactory;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
|
||||
import com.baeldung.spring.redis.configuration.entity.Book;
|
||||
|
||||
@Configuration
|
||||
@EnableConfigurationProperties(RedisProperties.class)
|
||||
public class RedisConfig {
|
||||
|
||||
@Bean
|
||||
public RedisTemplate<Long, Book> redisTemplate(RedisConnectionFactory connectionFactory) {
|
||||
RedisTemplate<Long, Book> template = new RedisTemplate<>();
|
||||
template.setConnectionFactory(connectionFactory);
|
||||
// Add some specific configuration here. Key serializers, etc.
|
||||
return template;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
package com.baeldung.spring.redis.configuration;
|
||||
|
||||
import org.springframework.boot.CommandLineRunner;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
@SpringBootApplication
|
||||
public class SpringRedisConfigurationApplication implements CommandLineRunner {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(SpringRedisConfigurationApplication.class, args);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(String... args) throws Exception {
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
package com.baeldung.spring.redis.configuration.controller;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import com.baeldung.spring.redis.configuration.entity.Book;
|
||||
import com.baeldung.spring.redis.configuration.repository.BooksRepository;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/books")
|
||||
public class BooksController {
|
||||
|
||||
@Autowired
|
||||
private BooksRepository repository;
|
||||
|
||||
@PostMapping("/create")
|
||||
public String newBook(@RequestBody Book newBook) {
|
||||
repository.save(newBook);
|
||||
return "Added";
|
||||
}
|
||||
|
||||
@GetMapping("/get/{id}")
|
||||
public Book findOne(@PathVariable Long id) {
|
||||
return repository.findById(id);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
package com.baeldung.spring.redis.configuration.entity;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class Book implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Long id;
|
||||
|
||||
private String name;
|
||||
|
||||
public Book() {
|
||||
}
|
||||
|
||||
public Book(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Book(Long id, String name) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Book [id=" + id + ", name=" + name + "]";
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
package com.baeldung.spring.redis.configuration.repository;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.baeldung.spring.redis.configuration.entity.Book;
|
||||
|
||||
@Component
|
||||
public class BooksRepository {
|
||||
|
||||
@Autowired
|
||||
private RedisTemplate<Long, Book> redisTemplate;
|
||||
|
||||
public void save(Book book) {
|
||||
redisTemplate.opsForValue()
|
||||
.set(book.getId(), book);
|
||||
}
|
||||
|
||||
public Book findById(Long id) {
|
||||
return redisTemplate.opsForValue()
|
||||
.get(id);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
spring.redis.database=0
|
||||
spring.redis.host=localhost
|
||||
spring.redis.port=16379
|
||||
spring.redis.password=mypass
|
||||
spring.redis.timeout=60000
|
||||
spring.redis.lettuce.pool.max-active=8
|
||||
spring.redis.lettuce.pool.max-idle=8
|
||||
spring.redis.lettuce.pool.max-wait=-1
|
||||
spring.redis.lettuce.pool.min-idle=0
|
|
@ -0,0 +1,52 @@
|
|||
package com.baeldung.spring.redis.configuration.controller;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertSame;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.Spy;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
import com.baeldung.spring.redis.configuration.entity.Book;
|
||||
import com.baeldung.spring.redis.configuration.repository.BooksRepository;
|
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
public class BooksControllerUnitTest {
|
||||
|
||||
@Spy
|
||||
@InjectMocks
|
||||
private BooksController booksController;
|
||||
|
||||
@Mock
|
||||
private BooksRepository booksRepository;
|
||||
|
||||
private static final Long BOOK_ID = 1l;
|
||||
private static final Long OTHER_BOOK_ID = 2l;
|
||||
private static final String BOOK_NAME = "Ulysses";
|
||||
private static final String ADDED = "Added";
|
||||
|
||||
@Test
|
||||
public void whenNewBook_thenCorrect() {
|
||||
assertEquals(ADDED, booksController.newBook(new Book(BOOK_ID, BOOK_NAME)));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenFindOneFinds_thenCorrect() {
|
||||
Book book = new Book(BOOK_ID, BOOK_NAME);
|
||||
when(booksRepository.findById(BOOK_ID)).thenReturn(book);
|
||||
assertSame(book, booksController.findOne(BOOK_ID));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenFindOneNotFound_thenReturnsNull() {
|
||||
Book book = new Book(BOOK_ID, BOOK_NAME);
|
||||
when(booksRepository.findById(BOOK_ID)).thenReturn(book);
|
||||
assertNull(booksController.findOne(OTHER_BOOK_ID));
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,66 @@
|
|||
package com.baeldung.spring.redis.configuration.repository;
|
||||
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertSame;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.Spy;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.data.redis.core.ValueOperations;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
import com.baeldung.spring.redis.configuration.entity.Book;
|
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
public class BooksRepositoryUnitTest {
|
||||
|
||||
@Spy
|
||||
@InjectMocks
|
||||
private BooksRepository booksRepository;
|
||||
|
||||
@Mock
|
||||
private RedisTemplate<Long, Book> redisTemplate;
|
||||
|
||||
@Mock
|
||||
private ValueOperations<Long, Book> valueOperations;
|
||||
|
||||
private static final Long BOOK_ID = 1l;
|
||||
private static final Long OTHER_BOOK_ID = 2l;
|
||||
private static final String BOOK_NAME = "Ulysses";
|
||||
|
||||
@Test
|
||||
public void whenSave_thenCorrect() {
|
||||
Book book = new Book(BOOK_ID, BOOK_NAME);
|
||||
when(redisTemplate.opsForValue()).thenReturn(valueOperations);
|
||||
booksRepository.save(book);
|
||||
verify(redisTemplate, times(1)).opsForValue();
|
||||
verify(valueOperations, times(1)).set(BOOK_ID, book);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenFindByIdFound_thenReturnsBook() {
|
||||
Book book = new Book(BOOK_ID, BOOK_NAME);
|
||||
when(redisTemplate.opsForValue()).thenReturn(valueOperations);
|
||||
when(valueOperations.get(BOOK_ID)).thenReturn(book);
|
||||
assertSame(book, booksRepository.findById(BOOK_ID));
|
||||
verify(redisTemplate, times(1)).opsForValue();
|
||||
verify(valueOperations, times(1)).get(BOOK_ID);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenFindByIdNotFound_thenReturnsNull() {
|
||||
Book book = new Book(BOOK_ID, BOOK_NAME);
|
||||
when(redisTemplate.opsForValue()).thenReturn(valueOperations);
|
||||
when(valueOperations.get(BOOK_ID)).thenReturn(book);
|
||||
assertNull(booksRepository.findById(OTHER_BOOK_ID));
|
||||
verify(redisTemplate, times(1)).opsForValue();
|
||||
verify(valueOperations, times(1)).get(OTHER_BOOK_ID);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue