2016-11-07 98 views
0

我想用Spring Boot和Spring Data MongoDB開發一個小測試應用程序。因此,在這種情況下,我使用默認配置(如localhost:27017/test database),並嘗試遵循彈簧指南(https://spring.io/guides/gs/accessing-data-mongodb/)。Spring Boot Data MongoDB - 存儲庫爲空

我啓動我的應用程序是這樣的:

@SpringBootApplication 
public class Application implements CommandLineRunner { 
    private static final Logger LOGGER = LoggerFactory.getLogger(Application.class); 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 

    @Override 
    public void run(String... strings) throws Exception { 
     (new DummyClass()).load(); 
    } 
} 

的DummyClass是如下:

@org.springframework.stereotype.Component 
@ConfigurationProperties(prefix="dummy") 
public class DummyClass { 

    private static String url; 
    private List<Project> projects; 


    @Autowired 
    private ProjectRepository projectRepository; 


    public void setUrl(String url) { 
     DummyClass.url = url; 
    } 


    @Override 
    public void load() { 

     // (...) creating some project objects 

     projectRepository.deleteAll(); 
     projectRepository.save(this.projects); 
    }  
} 

當執行projectRepository.deleteAll()語句,我收到聯合國NullPointerException異常。

有關信息,該ProjectRepository界面下方:

public interface ProjectRepository extends MongoRepository<Project, String>  
{ 
} 

而我的包結構爲: com.test.dummy Application.java com.test.dummy.components DummyClass.java 融爲一體。 test.dummy.domain Project.java com.test.dummy.repositories ProjectRepository.java

你能幫我易懂nd我的錯誤?

注:我使用Spring 1.4.1引導和蒙戈3.2

+0

嗯,你的應用程序#執行方法看起來weired。之前從未見過。你可以刪除它,然後重試?編輯:嗯,這是weired。你正在用新的DummyClass()創建一個對象。這與IoC和DI – smsnheck

+0

的原則相矛盾。謝謝,你完全正確。當你的鼻子到達磨刀石時發生了...... ;-) –

回答

1

裏面你Application.run()方法實例化Spring上下文(new DummyClass())以外的DummyClass。這樣

@Autowired 
private ProjectRepository projectRepository; 

未正確實例化。

您應該通過Spring注入DummyClass,而不是通過它的構造函數創建它的新實例。

例子:

@SpringBootApplication 
public class Application implements CommandLineRunner { 
    private static final Logger LOGGER = LoggerFactory.getLogger(Application.class); 

    @Autowired 
    DummyClass dummyClass; 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 

    @Override 
    public void run(String... strings) throws Exception { 
     dummyClass.load(); 
    } 
} 
+0

當然,好吧......哼哼哼抱歉給我帶來不便;-) –

相關問題