2014-10-31 113 views
1

我正在编写带有弹簧引导的代码,它将csv作为输入并创建mongodb集合并将其插入到mongodb中。弹簧数据mongodb配置在基于spring boot的项目中

目前我坚持在基于spring启动的代码中使用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和写入mongodb的插入overrided方法运行特定代码,代码工作正常。此代码可在以下URL中找到: ​​

但是,我的Application.java扩展了SpringBootServletInitializer类并覆盖了configure(SpringApplicationBuilder应用程序)方法。请看上面的我的Application.java。

我需要在我的基于spring引导项目的不同包中存在的工具类中使用相同的db特定代码(如同上面在Application.java类中提到的那样的代码)。

自定义库界面如下:

CustomRepository.java: 

public interface CustomRepository extends MongoRepository<CsvPojo, String>{ 

} 

在实用工具类,我只是想注入CustomRepository和使用Save方法保存创建CsvPojo在MongoDB中。但我在执行行customRepository.save(csvPojo)时引发NullPointerException;

请建议!如果需要其他信息,请告诉我!

问候, Shobhit

+0

首先你为什么'Application'类扩展'SpringBootServletInitializer'?其次,请显示您用于自定义实用程序类的代码 – geoand 2014-10-31 06:50:43

+1

您无法注入实用程序类(我怀疑该类不是弹簧管理的,或者您有试图注入的“静态”字段)。同样在你的配置中,你可以删除'@EnableMongoRepositories'和'@Import(RepositoryRestMvcConfiguration.class)',当检测到相应的Spring Data MongoDB和Spring Data Rest时,Spring Boot自动添加这些。另外,如果您的'Application'类位于'com.khoubyari.example'包中,您可以执行'@ ComponentScan'。 – 2014-10-31 08:15:52

回答

4

调用保存在弹簧安置控制器方法从实用类调用代替解决了问题。

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

我得到了解决,从https://github.com/khoubyari/spring-boot-rest-example

我需要在春季启动发掘更多学习“关于服务”部分之后,但不管怎么说问题后,上面贴的努力解决了!