Nital
Nital

Reputation: 6084

How can you load initial data in MongoDB through Spring Boot?

Is it possible to load initial data in a MongoDB database using src/main/resources/data.sql or by any other file?

I understand that data.sql is used for SQL DB's whereas MongoDB is a NOSQL DB. But just wanted to know if there is any equivalent of data.sql for NOSQL DB's.

While googling I found out this SO link (Spring Boot - Loading Initial Data) which does what I am looking for but still it's not a standalone file data.sql.

Upvotes: 19

Views: 15849

Answers (3)

naXa stands with Ukraine
naXa stands with Ukraine

Reputation: 37946

You can use a repository populator with Spring Data MongoDB. Let me demonstrate this with a code sample in Kotlin:

@Configuration
class TestApplicationConfig {
    @Value("classpath:test_data.json")
    private lateinit var testData: Resource

    @Bean
    @Autowired
    fun repositoryPopulator(objectMapper: ObjectMapper): Jackson2RepositoryPopulatorFactoryBean {
        val factory = Jackson2RepositoryPopulatorFactoryBean()
        // inject your Jackson Object Mapper if you need to customize it:
        factory.setMapper(objectMapper)
        factory.setResources(arrayOf(testData))
        return factory
    }
}

Put test_data.json in resources directory.

Upvotes: 5

Deep
Deep

Reputation: 76

you can define your data in json/xml and use populator elements of the repository to load the data.

https://docs.spring.io/spring-data/mongodb/docs/2.0.9.RELEASE/reference/html/#core.repository-populators

Upvotes: 4

A. Malynskyi
A. Malynskyi

Reputation: 66

To load initial data you can use db migration tool like MongoBee

It's very useful option to handle data initialization in java. You just need to configure @Bean public Mongobee mongobee in your spring boot and setup component scan for data ChangeLogs where data creation actually happens.

Upvotes: 5

Related Questions