基于spring boot的项目中的spring data mongodb配置

Posted

技术标签:

【中文标题】基于spring boot的项目中的spring data mongodb配置【英文标题】:spring data mongodb configuration in spring boot based project 【发布时间】:2014-12-27 09:25:09 【问题描述】:

我正在使用 spring boot 编写代码,它将 csv 作为输入并创建 mongodb 集合并将其插入到 mongodb。

目前我坚持在基于 Spring Boot 的代码中使用 mongodb。在 MongoRepository 接口上使用 save 方法时出现 NullPointerException。

这个问题可能是由于 application.yml 文件中的配置不正确 下面是 src/main/resources 目录下 application.yml 中 mongodb 的具体变化。

spring:
   data:
      mongodb.host: localhost
      mongodb.port: 27017
      mongodb.uri: mongodb://localhost/test
      mongo.repositories.enabled: true

Application.java 文件如下:

@Configuration
@EnableMongoRepositories
@Import(RepositoryRestMvcConfiguration.class)
@EnableAutoConfiguration  // Sprint Boot Auto Configuration
@ComponentScan(basePackages = "com.khoubyari.example")
public class Application extends SpringBootServletInitializer 

private static final Class<Application> applicationClass = Application.class;
private static final Logger log = LoggerFactory.getLogger(applicationClass);

public static void main(String[] args) 
    SpringApplication.run(applicationClass, args);



@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) 
    return application.sources(applicationClass);


如果 Application.java 实现 CommandLineRunner 并在覆盖的方法 run 中编写 mongodb 插入特定代码,则代码工作正常。此代码可在此 URL 中找到: https://spring.io/guides/gs/accessing-data-mongodb/

但是,我的 Application.java 扩展了 SpringBootServletInitializer 类并覆盖了 configure(SpringApplicationBuilder application) 方法。请在上面查看我的 Application.java。

我需要在我的基于 Spring Boot 的项目的不同包中存在的实用程序类中使用相同的 db 特定代码(与我上面在 Application.java 类中提到的 URL 相同的代码)。

自定义仓库界面如下:

CustomRepository.java:

public interface CustomRepository extends MongoRepository<CsvPojo, String>


在实用程序类中,我只想注入 CustomRepository 并使用 save 方法将创建的 CsvPojo 保存在 mongodb 中。但是我在执行行 customRepository.save(csvPojo); 时遇到 NullPointerException;

请推荐!如果需要其他信息,请告诉我!

问候, 肖比特

【问题讨论】:

首先为什么你Application类扩展SpringBootServletInitializer?其次,请显示您用于自定义实用程序类的代码 您不能注入实用程序类(我怀疑该类不是弹簧管理的,或者您尝试注入 static 字段)。同样在您的配置中,您可以删除@EnableMongoRepositories@Import(RepositoryRestMvcConfiguration.class),当检测到相应的 Spring Data MongoDB 和 Spring Data Rest 时,Spring Boot 会自动添加它们。此外,如果您的 Application 课程在 com.khoubyari.example 包中,您可以执行 @ComponentScan 【参考方案1】:

在 spring rest 控制器中调用 save 方法解决了这个问题,而不是从实用程序类调用。

我只是在控制器中注入 CustomRepository 接口并使用保存方法!

我在学习https://github.com/khoubyari/spring-boot-rest-example的“关于服务”部分后得到了解决方案

我需要在 Spring Boot 中进行更多探索,但无论如何,经过以上发布的努力,问题都得到了解决!

【讨论】:

以上是关于基于spring boot的项目中的spring data mongodb配置的主要内容,如果未能解决你的问题,请参考以下文章

从 Spring Boot 项目部署战争

IntelliJ IDEA 中的 Spring Boot 项目在重启后停止工作

一款基于 Spring Boot 开发的 OA 项目,已开源,真香..

单个 Spring Boot 应用程序中的 SAML 和 Oauth2

spring boot(基于maven的项目结构)

基于Spring Boot的车牌识别系统(附项目地址)