2016-11-07 6 views
0

私はSpringブートとSpringのデータMongoDBを使って小さなテストアプリケーションを開発したいと思います。だから、この場合、私はデフォルトの設定(localhost:27017/testデータベースのような)を使い、私はスプリングガイド(https://spring.io/guides/gs/accessing-data-mongodb/)に従おうとします。春のブートデータMongoDB - リポジトリがnull

私はこのように自分のアプリケーションを起動します。

@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 コム。 Project.java com.test.dummy.repositories ProjectRepository.java

test.dummy.domainあなたはunderstaに私を助けることができます私のエラー?

注:私はあなたがSpringコンテキスト(new DummyClass())の外に、あなたのDummyClassをインスタンス化し、あなたのApplication.run()メソッド内で3.2

+0

さて、あなたのアプリケーション#のrunメソッドがweired見えます。以前これを見たことはありません。削除して再試行できますか? 編集:これはうんざりです。新しいDummyClass()でオブジェクトを作成しています。これはIoCとDIの原則と矛盾します – smsnheck

+0

ありがとうございます、あなたは完全に正しいです。たわごとは、砥石に鼻を当てたときに起こる... ;-) –

答えて

1

春ブート1.4.1とモンゴを使用しています。この方法では、

@Autowired 
private ProjectRepository projectRepository; 

は正しくインスタンス化されません。

あなたはDummyClassをSpring経由で注入し、そのコンストラクタを介して新しいインスタンスを作成しないでください。

例:

@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

もちろん、よく...ハムハムは不都合なことを申し訳なく思っています;-) –

関連する問題