Repository填充

如果使用过Spring提供的JDBC模块,可能会对使用SQL脚本填充DataSource。Spring Data中也提供了相似的功能来填充repository,只不过不是使用SQL,而是使用XML或JSON来定义数据,

假设有一个data.json文件,内容如下:

Example 29. Data defined in JSON(使用JSON定义数据)

  1. [ { "_class" : "com.acme.Person",
  2. "firstname" : "Dave",
  3. "lastname" : "Matthews" },
  4. { "_class" : "com.acme.Person",
  5. "firstname" : "Carter",
  6. "lastname" : "Beauford" } ]

为了把前面定义的数据填充到PersonRepository中可以使用repository命名空间提供的popilator元素。
Example 30. Declaring a Jackson repository populator(声明Jackson repository populator)

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:repository="http://www.springframework.org/schema/data/repository"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://www.springframework.org/schema/data/repository
  8. http://www.springframework.org/schema/data/repository/spring-repository.xsd">
  9. <repository:jackson2-populator locations="classpath:data.json" />
  10. </beans>

上面的配置会让data.json文件可以在其他地方通过Jackson的Object Mapper读取和反序列化。

JSON object的类型可以通过解析json文件中的_class属性得到。Spring框架会根据反序列化的对象选择合适的repository来处理。

如果想要用XML来定义repositries填充的数据,需要使用unmarshaller-populator元素,可以利用Spring OXM提供的组件,想要详细了解请参考Spring参考文档:

Example 31. Declaring an unmarshalling repository populator (using JAXB)

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:repository="http://www.springframework.org/schema/data/repository"
  5. xmlns:oxm="http://www.springframework.org/schema/oxm"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans.xsd
  8. http://www.springframework.org/schema/data/repository
  9. http://www.springframework.org/schema/data/repository/spring-repository.xsd
  10. http://www.springframework.org/schema/oxm
  11. http://www.springframework.org/schema/oxm/spring-oxm.xsd">
  12. <repository:unmarshaller-populator locations="classpath:data.json"
  13. unmarshaller-ref="unmarshaller" />
  14. <oxm:jaxb2-marshaller contextPath="com.acme" />
  15. </beans>