简体   繁体   English

Spring Boot Data MongoDB-存储库为空

[英]Spring Boot Data MongoDB - Repository is null

I want to develop a little test application using Spring Boot and Spring Data MongoDB. 我想使用Spring Boot和Spring Data MongoDB开发一个小的测试应用程序。 So, in this case, I use default configuration (like localhost:27017/test database) and I try to follow the spring guide ( https://spring.io/guides/gs/accessing-data-mongodb/ ). 因此,在这种情况下,我使用默认配置(例如localhost:27017 / test数据库),然后尝试遵循spring指南( https://spring.io/guides/gs/accessing-data-mongodb/ )。

I launch my application like this: 我这样启动我的应用程序:

@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();
    }
}

The DummyClass is as following: 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);
    }    
}

When the projectRepository.deleteAll() statement is executed, I receive un NullPointerException. 当执行projectRepository.deleteAll()语句时,我收到un NullPointerException。

For information, below the ProjectRepository interface: 有关信息,请在ProjectRepository界面下面:

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

And my package structure is: com.test.dummy Application.java com.test.dummy.components DummyClass.java com.test.dummy.domain Project.java com.test.dummy.repositories ProjectRepository.java 我的包结构是:com.test.dummy Application.java com.test.dummy.components DummyClass.java com.test.dummy.domain Project.java com.test.dummy.repositories ProjectRepository.java

Can you help me to understand my error? 您能帮我理解我的错误吗?

Note: I use Spring Boot 1.4.1 and Mongo 3.2 注意:我使用Spring Boot 1.4.1和Mongo 3.2

Inside your Application.run() method you instantiate your DummyClass outside of the Spring context ( new DummyClass() ). Application.run()方法中,您可以在Spring上下文之外( new DummyClass() )实例化DummyClass。 This way the 这样

@Autowired
private ProjectRepository projectRepository;

is not instantiated correctly. 没有正确实例化。

You should inject your DummyClass via Spring and not create a new instance of it via its constructor. 您应该通过Spring注入DummyClass ,而不是通过其构造函数创建它的新实例。

Example: 例:

@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();
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM