diff --git a/persistence-modules/spring-data-jpa-2/pom.xml b/persistence-modules/spring-data-jpa-2/pom.xml
index 8e46112659..251007ba6d 100644
--- a/persistence-modules/spring-data-jpa-2/pom.xml
+++ b/persistence-modules/spring-data-jpa-2/pom.xml
@@ -1,12 +1,13 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- com.baeldung
+
+ com.baeldung
spring-data-jpa-2
- spring-data-jpa
-
+ spring-data-jpa
+
parent-boot-2
com.baeldung
@@ -19,12 +20,22 @@
org.springframework.boot
spring-boot-starter-data-jpa
-
+
com.h2database
h2
-
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+
+ org.springframework
+ spring-oxm
+
+
\ No newline at end of file
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/config/JpaPopulators.java b/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/config/JpaPopulators.java
new file mode 100644
index 0000000000..24348d31c5
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/config/JpaPopulators.java
@@ -0,0 +1,35 @@
+package com.baeldung.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.data.repository.init.Jackson2RepositoryPopulatorFactoryBean;
+import org.springframework.data.repository.init.UnmarshallerRepositoryPopulatorFactoryBean;
+import org.springframework.oxm.jaxb.Jaxb2Marshaller;
+
+import com.baeldung.entity.Fruit;
+
+@Configuration
+public class JpaPopulators {
+
+ @Bean
+ public Jackson2RepositoryPopulatorFactoryBean getRespositoryPopulator() throws Exception {
+ Jackson2RepositoryPopulatorFactoryBean factory = new Jackson2RepositoryPopulatorFactoryBean();
+ factory.setResources(new Resource[] { new ClassPathResource("fruit-data.json") });
+ return factory;
+ }
+
+ @Bean
+ public UnmarshallerRepositoryPopulatorFactoryBean repositoryPopulator() {
+
+ Jaxb2Marshaller unmarshaller = new Jaxb2Marshaller();
+ unmarshaller.setClassesToBeBound(Fruit.class);
+
+ UnmarshallerRepositoryPopulatorFactoryBean factory = new UnmarshallerRepositoryPopulatorFactoryBean();
+ factory.setUnmarshaller(unmarshaller);
+ factory.setResources(new Resource[] { new ClassPathResource("apple-fruit-data.xml"), new ClassPathResource("guava-fruit-data.xml") });
+ return factory;
+ }
+
+}
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/entity/Fruit.java b/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/entity/Fruit.java
index f82022e67e..d45ac33db8 100644
--- a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/entity/Fruit.java
+++ b/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/entity/Fruit.java
@@ -2,7 +2,9 @@ package com.baeldung.entity;
import javax.persistence.Entity;
import javax.persistence.Id;
+import javax.xml.bind.annotation.XmlRootElement;
+@XmlRootElement
@Entity
public class Fruit {
diff --git a/persistence-modules/spring-data-jpa-2/src/main/resources/apple-fruit-data.xml b/persistence-modules/spring-data-jpa-2/src/main/resources/apple-fruit-data.xml
new file mode 100644
index 0000000000..d87ae28f1e
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-2/src/main/resources/apple-fruit-data.xml
@@ -0,0 +1,7 @@
+
+
+
+ 1
+ apple
+ red
+
diff --git a/persistence-modules/spring-data-jpa-2/src/main/resources/fruit-data.json b/persistence-modules/spring-data-jpa-2/src/main/resources/fruit-data.json
new file mode 100644
index 0000000000..6dc44e2586
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-2/src/main/resources/fruit-data.json
@@ -0,0 +1,14 @@
+[
+ {
+ "_class": "com.baeldung.entity.Fruit",
+ "name": "apple",
+ "color": "red",
+ "id": 1
+ },
+ {
+ "_class": "com.baeldung.entity.Fruit",
+ "name": "guava",
+ "color": "green",
+ "id": 2
+ }
+]
\ No newline at end of file
diff --git a/persistence-modules/spring-data-jpa-2/src/main/resources/guava-fruit-data.xml b/persistence-modules/spring-data-jpa-2/src/main/resources/guava-fruit-data.xml
new file mode 100644
index 0000000000..ffd75bb4bb
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-2/src/main/resources/guava-fruit-data.xml
@@ -0,0 +1,7 @@
+
+
+
+ 2
+ guava
+ green
+
diff --git a/persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/repository/FruitPopulatorTest.java b/persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/repository/FruitPopulatorTest.java
new file mode 100644
index 0000000000..29ef52dcef
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/repository/FruitPopulatorTest.java
@@ -0,0 +1,38 @@
+package com.baeldung.repository;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.List;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import com.baeldung.entity.Fruit;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class FruitPopulatorTest {
+
+ @Autowired
+ private FruitRepository fruitRepository;
+
+ @Test
+ public void givenFruitJsonPopulatorThenShouldInsertRecordOnStart() {
+
+ List fruits = fruitRepository.findAll();
+ assertEquals("record count is not matching", 2, fruits.size());
+
+ fruits.forEach(fruit -> {
+ if (1 == fruit.getId()) {
+ assertEquals("apple", fruit.getName());
+ assertEquals("red", fruit.getColor());
+ } else if (2 == fruit.getId()) {
+ assertEquals("guava", fruit.getName());
+ assertEquals("green", fruit.getColor());
+ }
+ });
+ }
+}