Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Mongodb的Spring引导和数据库默认数据_Java_Spring_Mongodb_Spring Boot - Fatal编程技术网

Java 使用Mongodb的Spring引导和数据库默认数据

Java 使用Mongodb的Spring引导和数据库默认数据,java,spring,mongodb,spring-boot,Java,Spring,Mongodb,Spring Boot,我有一个使用Mongodb的Spring Boot项目。因此,在我的pom中,我有这种依赖性: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> org.springframework

我有一个使用Mongodb的Spring Boot项目。因此,在我的pom中,我有这种依赖性:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

org.springframework.boot
spring启动程序数据mongodb
因此,我可以使用此存储库类访问数据库:

package it.de.marini.server.dal;

import org.springframework.data.mongodb.repository.MongoRepository;

import it.de.marini.server.model.Role;

public interface RoleRepository extends MongoRepository<Role, String> {

}
package it.de.marini.server.dal;
导入org.springframework.data.mongodb.repository.MongoRepository;
导入it.de.marini.server.model.Role;
公共接口角色库扩展了MongoRepository{
}

我需要对Mongodb数据库中的数据进行序列化,例如使用默认角色。Spring Boot framework中最好的方法是什么?

有几种方法可以做到这一点,我建议您使用
CommandlineRunner

尝试:

否则,您可以使用
@PostConstruct
启动它


如果您需要类似于RDBMS的
liquibase
,请查看mongobee:

As@Jaiwo99,我知道没有这样做的标准。所以我决定用springbatch来完成这项工作。我实现了一个从CSV文件加载的批处理。我的应用程序的角色和权限

@Configuration
@EnableBatchProcessing
public class BatchConfiguration {

@Autowired
public JobBuilderFactory jobBuilderFactory;

@Autowired
public StepBuilderFactory stepBuilderFactory;

@Autowired
public MongoTemplate mongoTemplate;

@Bean
public PlatformTransactionManager transactionManager() {
    return new ResourcelessTransactionManager();
}

@Bean
public Tasklet defaultRolePermissionTasklet() {
    return new DefaultRolePermissionTasklet();
}


public <T> FlatFileItemReader<T> readerFile(String fileName,String[] fields,Class<T> type)  {

    FlatFileItemReader<T> reader = new FlatFileItemReader<T>();
    reader.setStrict(false);
    reader.setResource(new ClassPathResource(fileName));
    reader.setLineMapper(new DefaultLineMapper<T>() {
        {
            setLineTokenizer(new DelimitedLineTokenizer() {
                {
                    setNames(fields);
                    setStrict(false);
                }
            });
            setFieldSetMapper(new BeanWrapperFieldSetMapper<T>() {
                {
                    setTargetType(type);
                }
            });
        }
    });
    return reader;

}

@Bean
public PermissionItemProcessor permissionProcessor() {
    return new PermissionItemProcessor();
}

@Bean
public RoleItemProcessor roleProcessor() {
    return new RoleItemProcessor();
}

@Bean
public Job initAuthenticationData(JobCompletionNotificationListener listener) {
    return jobBuilderFactory.get("initAuthenticationData").incrementer(new RunIdIncrementer()).listener(listener)
            .start(stepPermission())
            .next(stepRole())
            .next(stepDefaultRolePermissions())
            .build();
}

@Bean
public Step stepDefaultRolePermissions() {
    return stepBuilderFactory.get("stepDefaultRolePermissions").tasklet(defaultRolePermissionTasklet()).build();
}


@Bean
public Step stepPermission() {

    MongoItemWriter<Permission> writer = new MongoItemWriter<Permission>();
    writer.setTemplate(mongoTemplate);




    return stepBuilderFactory.get("stepPermission").<Permission, Permission>chunk(20)
            .reader(readerFile("permission-data.csv",new String[] {"name","description"},Permission.class))
            .processor(permissionProcessor())
            .writer(writer)
            .build();
}

@Bean
public Step stepRole() {
    MongoItemWriter<Role> writer = new MongoItemWriter<Role>();
    writer.setTemplate(mongoTemplate);

    return stepBuilderFactory.get("stepRole").<Role, Role>chunk(20)
            .reader(readerFile("role-data.csv",new String[] {"name","description"},Role.class))
            .processor(roleProcessor())
            .writer(writer)
            .build();
    }
}
@配置
@启用批处理
公共类批处理配置{
@自动连线
公共建筑商建筑商工厂;
@自动连线
公共StepBuilderFactory StepBuilderFactory;
@自动连线
公共MongoTemplate MongoTemplate;
@豆子
公共平台transactionManager transactionManager(){
返回新的ResourcesTransactionManager();
}
@豆子
公共Tasklet defaultRolePermissionTasklet(){
返回新的DefaultRolePermissionTasklet();
}
公共FlatFileItemReader读取器文件(字符串文件名、字符串[]字段、类类型){
FlatFileItemReader=新的FlatFileItemReader();
reader.setStrict(假);
setResource(新类路径资源(文件名));
reader.setLineMapper(新的DefaultLineMapper(){
{
setLineTokenizer(新的DelimitedLineTokenizer(){
{
设置名称(字段);
setStrict(假);
}
});
setFieldSetMapper(新的BeanRapperFieldSetMapper(){
{
setTargetType(类型);
}
});
}
});
返回读取器;
}
@豆子
public PermissionItemProcessor permissionProcessor(){
返回新的PermissionItemProcessor();
}
@豆子
公共角色处理器角色处理器(){
返回新的RoleItemProcessor();
}
@豆子
公共作业initAuthenticationData(JobCompletionNotificationListener侦听器){
返回jobBuilderFactory.get(“initAuthenticationData”).incrementer(新RunIdIncrementer()).listener(listener)
.start(stepPermission())
.next(stepRole())
.next(stepDefaultRolePermissions())
.build();
}
@豆子
公共步骤stepDefaultRolePermissions(){
返回stepBuilderFactory.get(“stepDefaultRolePermissions”).tasklet(defaultRolePermissionTasklet()).build();
}
@豆子
公共步骤{
MongoItemWriter=新的MongoItemWriter();
作者:setTemplate(mongoTemplate);
返回stepBuilderFactory.get(“stepPermission”).chunk(20)
.reader(readerFile(“permission data.csv”,新字符串[]{“name”,“description”},permission.class))
.processor(permissionProcessor())
.作者(作者)
.build();
}
@豆子
公共步骤stepRole(){
MongoItemWriter=新的MongoItemWriter();
作者:setTemplate(mongoTemplate);
返回stepBuilderFactory.get(“stepRole”).chunk(20)
.reader(readerFile(“role data.csv”,新字符串[]{“name”,“description”},role.class))
.processor(角色处理器())
.作者(作者)
.build();
}
}

至少,还有一种方法可以使用Spring Boot初始化Mongodb中的数据。您可以在配置中创建如下内容:

@Configuration
public class AppConfiguration {

    @Autowired
    public void prepare(ReactiveMongoOperations mongoOperations,
                        UserRepository userRepository) {
        mongoOperations.createCollection("users",
                CollectionOptions.empty()
                        .maxDocuments(1_000)
                        .size(1024 * 8)
                        .capped()).block();
        userRepository
                .insert(List.of(
                        User.builder()
                                .name("Joe Doe")
                                .build()
                ))
                .blockLast();
    }
}
当然,您必须检查集合是否不存在,以便在数据库已经创建的情况下不创建集合

@Configuration
public class AppConfiguration {

    @Autowired
    public void prepare(ReactiveMongoOperations mongoOperations,
                        UserRepository userRepository) {
        mongoOperations.createCollection("users",
                CollectionOptions.empty()
                        .maxDocuments(1_000)
                        .size(1024 * 8)
                        .capped()).block();
        userRepository
                .insert(List.of(
                        User.builder()
                                .name("Joe Doe")
                                .build()
                ))
                .blockLast();
    }
}