当前位置: 首页 > 知识库问答 >
问题:

Spring启动数据MongoDB-存储库为空

耿弘阔
2023-03-14

我想使用SpringBoot和SpringDataMongoDB开发一个小测试应用程序。因此,在本例中,我使用默认配置(如localhost:27017/test-database),并尝试遵循spring指南(https://spring.io/guides/gs/accessing-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()语句时,我收到un NullPointerException。

有关信息,请在ProjectRepository界面下方:

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

我的包结构是:com。测验虚拟应用程序。javacom。测验笨蛋组件类。javacom。测验笨蛋域项目。javacom。测验笨蛋存储库项目存储库。JAVA

你能帮我理解我的错误吗?

注意:我使用SpringBoot 1.4。1和Mongo 3.2

共有1个答案

邵劲
2023-03-14

应用程序内部。run()方法在Spring上下文之外实例化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();
    }
}
 类似资料:
  • 我需要使用spring@Cacheable注释缓存对MongoDB的调用: 不幸的是,使用@Cacheable注释接口中的任何方法都会导致以下异常: 我正在寻找一种方法来缓存对DB的调用(这相当昂贵)。有什么想法吗?

  • 我想知道是否有任何机制可以在Spring Data MongoDB存储库中使用带有注释的?我希望能收到我所拥有的文件数量,而不必获取所有文件。 基本上,这在Java中相当于:

  • 我正在开发一个Spring BootAPI,该API应该在本月晚些时候部署。我们为存储库创建了自己的界面,并扩展了CrudRepository。Spring开机自动连线一切。 我想做的是添加更多日志记录功能,例如。 目前,我们的代码如下所示: 由于Spring配置了所有功能,所以并没有真正看到装饰这些功能以添加日志功能的方法。有人能帮我指出留档,展示一个很好的例子,或者解释日志装饰器背后的概念吗?

  • 我正在试验Spring和MongoDB。在我的项目中,我有一个存储库和一个有调度方法的服务。问题是,存储库没有自动运行,它总是为空。 Autowire在主应用程序类中正常工作(通过实现CommandLineRunner进行测试) 我错过什么了吗? 目录 机器应用。JAVA 工人JAVA LineDataRepository

  • 问题内容: 我想知道在带有注释的Spring Data MongoDB存储库中是否可以使用任何机制?我很想收到我所拥有的文件数量而不必全部获取。 基本上,这等效于Java: 问题答案: 对我来说,这个解决方案就像一个迷住了一样(使用spring-data-mongodb 1.3.1.RELEASE),我也遇到了同样的问题atm并像这样解决了它(这只是我工作中的一小段代码):

  • 我在Spring Boot上还是新手,我在mongoDB数据库中使用Spring-Boot添加了一个名为文章的文档,我想在该文章中添加注释。但是Spring-boot不能在我的应用程序中自动连接我的存储库。 下面是我的Repository类,它实现了ArticleRepositoryCustom接口,该接口包含一个OuterComment方法。 文章库 这是我的Springboot应用程序课程 当