Changes for BAEL-1472

This commit is contained in:
Nikhil Khatwani 2018-02-07 19:45:04 +05:30
parent efb66e3001
commit 596efe3042
6 changed files with 46 additions and 86 deletions

View File

@ -16,11 +16,13 @@
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>4.3.7.RELEASE</spring.version> <spring.version>5.0.3.RELEASE</spring.version>
<spring-data-redis>1.8.1.RELEASE</spring-data-redis> <spring-data-redis>2.0.3.RELEASE</spring-data-redis>
<cglib.version>3.2.4</cglib.version> <cglib.version>3.2.4</cglib.version>
<jedis.version>2.9.0</jedis.version> <jedis.version>2.9.0</jedis.version>
<nosqlunit.version>0.10.0</nosqlunit.version> <nosqlunit.version>0.10.0</nosqlunit.version>
<spring-data-commons.version>2.0.3.RELEASE</spring-data-commons.version>
</properties> </properties>
<dependencies> <dependencies>
@ -73,6 +75,12 @@
<artifactId>nosqlunit-redis</artifactId> <artifactId>nosqlunit-redis</artifactId>
<version>${nosqlunit.version}</version> <version>${nosqlunit.version}</version>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
<version>2.0.3.RELEASE</version>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@ -1,8 +1,5 @@
package com.baeldung.spring.data.redis.config; package com.baeldung.spring.data.redis.config;
import com.baeldung.spring.data.redis.queue.MessagePublisher;
import com.baeldung.spring.data.redis.queue.RedisMessagePublisher;
import com.baeldung.spring.data.redis.queue.RedisMessageSubscriber;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
@ -11,10 +8,16 @@ import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.listener.ChannelTopic; import org.springframework.data.redis.listener.ChannelTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer; import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.listener.adapter.MessageListenerAdapter; import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;
import org.springframework.data.redis.repository.configuration.EnableRedisRepositories;
import org.springframework.data.redis.serializer.GenericToStringSerializer; import org.springframework.data.redis.serializer.GenericToStringSerializer;
import com.baeldung.spring.data.redis.queue.MessagePublisher;
import com.baeldung.spring.data.redis.queue.RedisMessagePublisher;
import com.baeldung.spring.data.redis.queue.RedisMessageSubscriber;
@Configuration @Configuration
@ComponentScan("com.baeldung.spring.data.redis") @ComponentScan("com.baeldung.spring.data.redis")
@EnableRedisRepositories(basePackages = "com.baeldung.spring.data.redis.repo")
public class RedisConfig { public class RedisConfig {
@Bean @Bean

View File

@ -2,6 +2,9 @@ package com.baeldung.spring.data.redis.model;
import java.io.Serializable; import java.io.Serializable;
import org.springframework.data.redis.core.RedisHash;
@RedisHash("Student")
public class Student implements Serializable { public class Student implements Serializable {
public enum Gender { public enum Gender {

View File

@ -1,18 +1,9 @@
package com.baeldung.spring.data.redis.repo; package com.baeldung.spring.data.redis.repo;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import com.baeldung.spring.data.redis.model.Student; import com.baeldung.spring.data.redis.model.Student;
import java.util.Map; @Repository
public interface StudentRepository extends CrudRepository<Student, String> {}
public interface StudentRepository {
void saveStudent(Student person);
void updateStudent(Student student);
Student findStudent(String id);
Map<Object, Object> findAllStudents();
void deleteStudent(String id);
}

View File

@ -1,49 +0,0 @@
package com.baeldung.spring.data.redis.repo;
import com.baeldung.spring.data.redis.model.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Repository;
import javax.annotation.PostConstruct;
import java.util.Map;
@Repository
public class StudentRepositoryImpl implements StudentRepository {
private static final String KEY = "Student";
private RedisTemplate<String, Object> redisTemplate;
private HashOperations hashOperations;
@Autowired
public StudentRepositoryImpl(RedisTemplate<String, Object> redisTemplate) {
this.redisTemplate = redisTemplate;
}
@PostConstruct
private void init() {
hashOperations = redisTemplate.opsForHash();
}
public void saveStudent(final Student student) {
hashOperations.put(KEY, student.getId(), student);
}
public void updateStudent(final Student student) {
hashOperations.put(KEY, student.getId(), student);
}
public Student findStudent(final String id) {
return (Student) hashOperations.get(KEY, id);
}
public Map<Object, Object> findAllStudents() {
return hashOperations.entries(KEY);
}
public void deleteStudent(final String id) {
hashOperations.delete(KEY, id);
}
}

View File

@ -1,17 +1,20 @@
package com.baeldung.spring.data.redis.repo; package com.baeldung.spring.data.redis.repo;
import com.baeldung.spring.data.redis.config.RedisConfig; import static org.junit.Assert.assertEquals;
import com.baeldung.spring.data.redis.model.Student; import static org.junit.Assert.assertNull;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.Map; import com.baeldung.spring.data.redis.config.RedisConfig;
import com.baeldung.spring.data.redis.model.Student;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
@RunWith(SpringJUnit4ClassRunner.class) @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = RedisConfig.class) @ContextConfiguration(classes = RedisConfig.class)
@ -23,18 +26,18 @@ public class StudentRepositoryIntegrationTest {
@Test @Test
public void whenSavingStudent_thenAvailableOnRetrieval() throws Exception { public void whenSavingStudent_thenAvailableOnRetrieval() throws Exception {
final Student student = new Student("Eng2015001", "John Doe", Student.Gender.MALE, 1); final Student student = new Student("Eng2015001", "John Doe", Student.Gender.MALE, 1);
studentRepository.saveStudent(student); studentRepository.save(student);
final Student retrievedStudent = studentRepository.findStudent(student.getId()); final Student retrievedStudent = studentRepository.findById(student.getId()).get();
assertEquals(student.getId(), retrievedStudent.getId()); assertEquals(student.getId(), retrievedStudent.getId());
} }
@Test @Test
public void whenUpdatingStudent_thenAvailableOnRetrieval() throws Exception { public void whenUpdatingStudent_thenAvailableOnRetrieval() throws Exception {
final Student student = new Student("Eng2015001", "John Doe", Student.Gender.MALE, 1); final Student student = new Student("Eng2015001", "John Doe", Student.Gender.MALE, 1);
studentRepository.saveStudent(student); studentRepository.save(student);
student.setName("Richard Watson"); student.setName("Richard Watson");
studentRepository.saveStudent(student); studentRepository.save(student);
final Student retrievedStudent = studentRepository.findStudent(student.getId()); final Student retrievedStudent = studentRepository.findById(student.getId()).get();
assertEquals(student.getName(), retrievedStudent.getName()); assertEquals(student.getName(), retrievedStudent.getName());
} }
@ -42,18 +45,19 @@ public class StudentRepositoryIntegrationTest {
public void whenSavingStudents_thenAllShouldAvailableOnRetrieval() throws Exception { public void whenSavingStudents_thenAllShouldAvailableOnRetrieval() throws Exception {
final Student engStudent = new Student("Eng2015001", "John Doe", Student.Gender.MALE, 1); final Student engStudent = new Student("Eng2015001", "John Doe", Student.Gender.MALE, 1);
final Student medStudent = new Student("Med2015001", "Gareth Houston", Student.Gender.MALE, 2); final Student medStudent = new Student("Med2015001", "Gareth Houston", Student.Gender.MALE, 2);
studentRepository.saveStudent(engStudent); studentRepository.save(engStudent);
studentRepository.saveStudent(medStudent); studentRepository.save(medStudent);
final Map<Object, Object> retrievedStudent = studentRepository.findAllStudents(); List<Student> students = new ArrayList<>();
assertEquals(retrievedStudent.size(), 2); studentRepository.findAll().forEach(students::add);
assertEquals(students.size(), 2);
} }
@Test @Test
public void whenDeletingStudent_thenNotAvailableOnRetrieval() throws Exception { public void whenDeletingStudent_thenNotAvailableOnRetrieval() throws Exception {
final Student student = new Student("Eng2015001", "John Doe", Student.Gender.MALE, 1); final Student student = new Student("Eng2015001", "John Doe", Student.Gender.MALE, 1);
studentRepository.saveStudent(student); studentRepository.save(student);
studentRepository.deleteStudent(student.getId()); studentRepository.deleteById(student.getId());
final Student retrievedStudent = studentRepository.findStudent(student.getId()); final Student retrievedStudent = studentRepository.findById(student.getId()).orElse(null);
assertNull(retrievedStudent); assertNull(retrievedStudent);
} }
} }