我正在学习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,这是自动完成的。
有没有什么明显的原因可以解释为什么这不起作用?
我想预加载数据,并了解到最好使用阻塞API进行预加载,因为在启动应用程序时,当web容器和我的加载程序都启动时,存在线程锁定问题的风险。我正在使用的这本书是为Spring Boot和MongoDB的旧版本veriosn编写的。
这本书使用的spring boot starter data mongodb reactive
版本似乎包含MongoOperations
,但随后又被拆分出来。看这个。
为了使用这个,我添加了实现'org.springframework.boot: sping-boot-starter-data-mongob'
到我的类路径。
如果没有线程锁的问题,我可以使用ReactiveMongoOperations
。
MongoOperations
是以阻塞方式与Mongo交互的接口ReactiveMongoOperations
是以反应方式与Mongo交互的接口。
当您使用WebFlux(spring boot starter WebFlux
)时,您似乎想要构建一个反应式应用程序。如果是这样,您应该将MongoOperations
替换为ReactiveMongoOperations
。如果您想要构建一个基于Servlet的阻塞式web应用程序,则需要切换到spring boot starter data mongodb
和spring boot starter web
。
我猜您正试图在启动时初始化数据库。
您可以利用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