2014-10-31 118 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

我需要在春季啓動發掘更多學習「關於服務」部分之後,但不管怎麼說問題後,上面貼的努力解決了!