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

应用程序不会启动,因为未定义蒙古操作bean

韦飞尘
2023-03-14

我正在学习Spring Boot 2.0第二版,但是使用Spring Boot 2.5.6,所以我怀疑我的问题可能与我必须用不同的版本做一些事情有关。

我有这门课:

@Component
public class InitDatabase {

    @Bean
    CommandLineRunner init(MongoOperations operations) {
        return args -> {
            operations.dropCollection(Image.class);

            operations.insert(new Image("1", "learning-spring-boot-cover.jpg"));
            operations.insert(new Image("2", "learning-spring-boot-2nd-edition-cover.jpg"));
            operations.insert(new Image("3", "bazinga.png"));

            operations.findAll(Image.class).forEach(image -> System.out.println(image.toString()));
        };
    }

}

当我运行应用程序时,出现以下错误:

2021-11-25 12:26:42.870DEBUG 71010 --- [ 主]o. s. b. d.LoggingFailureAnalysis记者:由于异常,应用程序无法启动

组织。springframework。豆。工厂NoSuchBeanDefinitionException:没有类型为“org”的符合条件的bean。springframework。数据mongodb。果心MongoOperations可用:至少需要1个符合autowire候选资格的bean。依赖项批注:{}位于组织。springframework。豆。工厂支持DefaultListableBeanFactory。raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1790)~[spring-beans-5.3.12.jar:5.3.12]位于org。springframework。豆。工厂支持DefaultListableBeanFactory。doResolveDependency(DefaultListableBeanFactory.java:1346)~[spring-beans-5.3.12.jar:5.3.12]位于org。springframework。豆。工厂支持DefaultListableBeanFactory。resolveDependency(DefaultListableBeanFactory.java:1300)~[spring-beans-5.3.12.jar:5.3.12]位于org。springframework。豆。工厂支持构造器分解器。org上的resolveAutowiredArgument(ConstructorResolver.java:887)~[spring-beans-5.3.12.jar:5.3.12]。springframework。豆。工厂支持构造器分解器。在org上创建ArgumentArray(ConstructorResolver.java:791)~[spring-beans-5.3.12.jar:5.3.12]。springframework。豆。工厂支持构造器分解器。在org上实例化eusingFactoryMethod(ConstructorResolver.java:541)~[spring-beans-5.3.12.jar:5.3.12]。springframework。豆。工厂支持AbstractAutowireCapableBeanFactory。在org上实例化eusingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352)~[spring-beans-5.3.12.jar:5.3.12]。springframework。豆。工厂支持AbstractAutowireCapableBeanFactory。在org上创建BeanInstance(AbstractAutowireCapableBeanFactory.java:1195)~[spring-beans-5.3.12.jar:5.3.12]。springframework。豆。工厂支持AbstractAutowireCapableBeanFactory。doCreateBean(AbstractAutowireCapableBeanFactory.java:582)~[spring-beans-5.3.12.jar:5.3.12]位于org。springframework。豆。工厂支持AbstractAutowireCapableBeanFactory。createBean(AbstractAutowireCapableBeanFactory.java:542)~[spring-beans-5.3.12.jar:5.3.12]位于org。springframework。豆。工厂支持抽象工厂。lambda$doGetBean$0(AbstractBeanFactory.java:335)~[spring-beans-5.3.12.jar:5.3.12]位于org。springframework。豆。工厂支持DefaultSingletonBeanRegistry。getSingleton(DefaultSingletonBeanRegistry.java:234)~[spring-beans-5.3.12.jar:5.3.12]位于org。springframework。豆。工厂支持抽象工厂。doGetBean(AbstractBeanFactory.java:333)~[spring-beans-5.3.12.jar:5.3.12]位于org。springframework。豆。工厂支持抽象工厂。getBean(AbstractBeanFactory.java:208)~[spring-beans-5.3.12.jar:5.3.12]位于org。springframework。豆。工厂支持DefaultListableBeanFactory。在org上预实例化Singleton(DefaultListableBeanFactory.java:944)~[spring-beans-5.3.12.jar:5.3.12]。springframework。上下文支持AbstractApplicationContext。在org上完成BeanFactoryInitialization(AbstractApplicationContext.java:918)~[spring-context-5.3.12.jar:5.3.12]。springframework。上下文支持AbstractApplicationContext。在org上刷新(AbstractApplicationContext.java:583)~[spring-context-5.3.12.jar:5.3.12]。springframework。靴子网状物反应性。上下文ReactiveWebServerApplicationContext。在org上刷新(ReactiveWebServerApplicationContext.java:64)~[spring-boot-2.5.6.jar:2.5.6]。springframework。靴子SpringApplication。在org上刷新(SpringApplication.java:754)~[spring-boot-2.5.6.jar:2.5.6]。springframework。靴子SpringApplication。refreshContext(SpringApplication.java:434)~[spring-boot-2.5.6.jar:2.5.6]位于org。springframework。靴子SpringApplication。在org上运行(SpringApplication.java:338)~[spring-boot-2.5.6.jar:2.5.6]。springframework。靴子SpringApplication。在org上运行(SpringApplication.java:1343)~[spring-boot-2.5.6.jar:2.5.6]。springframework。靴子SpringApplication。在com上运行(SpringApplication.java:1332)~[spring-boot-2.5.6.jar:2.5.6]。保尔·卡伦。学习SpringBoot。学习SpringBoot。学习SpringBoot应用程序。main(LearningSpringBootApplication.java:12)~[classes/:na]

2021-11-25 12:26:42.870错误71010 --- [ 主]o. s. b. d.LoggingFailureAnalysis记者:

应用程序无法启动

描述:

com.paulcarron.learningspringboot.learningspringboot.InitDatabase中方法初始化的参数0需要一个类型为org.springframework.data.mongodb.core.Mongo运算的bean,但找不到。

行动:

考虑定义一个类型为“org”的bean。springframework。数据mongodb。果心配置中的“MongoOperations”。

这是我的构建。格雷德尔

plugins {
    id 'org.springframework.boot' version '2.5.6'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

group = 'com.paulcarron.learningspringboot'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-mongodb-reactive'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-webflux'
    implementation 'org.synchronoss.cloud:nio-multipart-parser:1.1.0'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'de.flapdoodle.embed:de.flapdoodle.embed.mongo'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'io.projectreactor:reactor-test'
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'javax.persistence:javax.persistence-api:2.2'
}

test {
    useJUnitPlatform()
}

我的理解是,我不需要使用@enableeractivemongorepositories激活,因为如果类路径上有Reactive MongoDB或Spring DataMongoDB 2.0,这是自动完成的。

有没有什么明显的原因可以解释为什么这不起作用?

共有3个答案

嵇出野
2023-03-14

我想预加载数据,并了解到最好使用阻塞API进行预加载,因为在启动应用程序时,当web容器和我的加载程序都启动时,存在线程锁定问题的风险。我正在使用的这本书是为Spring Boot和MongoDB的旧版本veriosn编写的。

这本书使用的spring boot starter data mongodb reactive版本似乎包含MongoOperations,但随后又被拆分出来。看这个。

为了使用这个,我添加了实现'org.springframework.boot: sping-boot-starter-data-mongob'到我的类路径。

如果没有线程锁的问题,我可以使用ReactiveMongoOperations

汪博达
2023-03-14

MongoOperations是以阻塞方式与Mongo交互的接口ReactiveMongoOperations是以反应方式与Mongo交互的接口。

当您使用WebFlux(spring boot starter WebFlux)时,您似乎想要构建一个反应式应用程序。如果是这样,您应该将MongoOperations替换为ReactiveMongoOperations。如果您想要构建一个基于Servlet的阻塞式web应用程序,则需要切换到spring boot starter data mongodbspring boot starter web

穆招
2023-03-14

我猜您正试图在启动时初始化数据库。

您可以利用spring内部事件机制。当应用程序准备就绪时,spring会触发事件ApplicationReadyEvent

您可以监听此事件并初始化您的集合:

@Component
public class DataInit implements ApplicationListener<ApplicationReadyEvent> {

    private final MongoOperations operations;

    public DataInit(MongoOperations operations) {
        this.operations = operations;
    }

    @Override
    public void onApplicationEvent(ApplicationReadyEvent event) {
        // init data
    }
}

如果你想知道更多关于Spring活动的信息

 类似资料:
  • 我在intellij上启动spring boot应用程序时遇到问题,它失败了,并显示以下消息:与目标VM断开连接,地址:'127.0.0.1:49784',传输:'socket' 过程结束,退出代码为255。以前有人遇到过这种情况吗?

  • Spring Boot版本是。 jetty服务器被定义为spring bean,如下所示 类服务器如下所示: 谢了!

  • 我尝试使用pyinstaller模块将我的python gui应用程序(.py)转换为可执行文件(.exe)。我在终端中运行了以下命令- pyinstaller.exe--onefile-w sourcecode.py

  • 我有一个Spring Boot应用程序,其中有一个Kafka消费者和生产者。还有一个bean来创建主题。 我的Spring Boot应用程序和Kafka都是在Kubernetes的Docker启动的。有时Spring Boot应用程序在Kafka pod启动之前就启动了,因此无法启动,因为用户无法连接(参见stacktrace)。 有没有一种方法可以让我的应用程序以弹性的方式启动?例如,消费者应该

  • 从Android Studio,我已经从Eclipse导入了以前的非Gradle Android项目。 它包括ABS,在Eclipse中运行没有问题。 它在Android Studio中编译无错误。然而,每次我运行它时,它并不是像在Eclipse中那样运行,而是进入某种测试模式,并给出以下输出。 运行测试 开始测试运行失败:无法找到ComponentInfo{com.my.package/andr

  • 我在Windows下使用PostgreSQL9.5安装SN5.5。不幸的是,我打错误"Webapp没有启动"。 下面是完整的堆栈跟踪。我想我首先在“Exception sending context initialized event to listener instance of class org.sonar.server.platform.PlatformServletContextList