Closed zsh9527 closed 1 year ago
Can you provide relevant stack exception information, or a minimalist demo, so that the community can replicate and handle the problem!
Can you provide relevant stack exception information, or a minimalist demo, so that the community can replicate and handle the problem!
plugins {
id 'org.springframework.boot' version '3.0.2'
id 'io.spring.dependency-management' version '1.1.0'
id("java")
}
group = "org.example"
version = "1.0-SNAPSHOT"
sourceCompatibility = '17'
repositories {
mavenCentral()
}
ext {
set('springCloudVersion', "2022.0.1")
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-aop")
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.springframework.cloud:spring-cloud-stream")
implementation("org.springframework.cloud:spring-cloud-starter")
implementation("org.springframework.cloud:spring-cloud-stream-binder-rocketmq:0.9.0.RELEASE")
}
dependencyManagement {
imports {
mavenBom("org.springframework.cloud:spring-cloud-dependencies:${property("springCloudVersion")}")
}
}
spring:
application:
name: untitled
cloud:
stream:
defaultBinder: rocketmq
binders:
rocketmq:
type: rocketmq
rocketmq:
binder:
name-server: dev1.rocketmq.leve.com:9876;dev2.rocketmq.leve.com:9876
enable-msg-trace: false
package org.example;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
/**
* ${NAME}
*
* @author zsh
* @version 1.0.0
* @date ${YEAR}/${MONTH}/${DAY} ${HOUR}:${MINUTE}
*/
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(MainApplication.class);
ConfigurableApplicationContext applicationContext = application.run(args);
DefaultMQProducer defaultMQProducer = applicationContext.getBean(DefaultMQProducer.class);
}
}
2023-03-30T10:22:06.897+08:00 INFO 20840 --- [ main] org.example.MainApplication : Started MainApplication in 6.435 seconds (process running for 7.085)
Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.apache.rocketmq.client.producer.DefaultMQProducer' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:340)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:331)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1148)
at org.example.MainApplication.main(MainApplication.java:21)
plugins {
id 'org.springframework.boot' version '2.6.7'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id("java")
}
group = "org.example"
version = "1.0-SNAPSHOT"
sourceCompatibility = '11'
repositories {
mavenCentral()
}
ext {
set('springCloudVersion', "2021.0.2")
}
Can you provide relevant stack exception information, or a minimalist demo, so that the community can replicate and handle the problem!
build.gradle
plugins { id 'org.springframework.boot' version '3.0.2' id 'io.spring.dependency-management' version '1.1.0' id("java") } group = "org.example" version = "1.0-SNAPSHOT" sourceCompatibility = '17' repositories { mavenCentral() } ext { set('springCloudVersion', "2022.0.1") } dependencies { implementation("org.springframework.boot:spring-boot-starter-aop") implementation("org.springframework.boot:spring-boot-starter-web") implementation("org.springframework.cloud:spring-cloud-stream") implementation("org.springframework.cloud:spring-cloud-starter") implementation("org.springframework.cloud:spring-cloud-stream-binder-rocketmq:0.9.0.RELEASE") } dependencyManagement { imports { mavenBom("org.springframework.cloud:spring-cloud-dependencies:${property("springCloudVersion")}") } }
application.yml
spring: application: name: untitled cloud: stream: defaultBinder: rocketmq binders: rocketmq: type: rocketmq rocketmq: binder: name-server: dev1.rocketmq.leve.com:9876;dev2.rocketmq.leve.com:9876 enable-msg-trace: false
Main Class
package org.example; import org.apache.rocketmq.client.producer.DefaultMQProducer; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; /** * ${NAME} * * @author zsh * @version 1.0.0 * @date ${YEAR}/${MONTH}/${DAY} ${HOUR}:${MINUTE} */ @SpringBootApplication public class MainApplication { public static void main(String[] args) { SpringApplication application = new SpringApplication(MainApplication.class); ConfigurableApplicationContext applicationContext = application.run(args); DefaultMQProducer defaultMQProducer = applicationContext.getBean(DefaultMQProducer.class); } }
Error log
2023-03-30T10:22:06.897+08:00 INFO 20840 --- [ main] org.example.MainApplication : Started MainApplication in 6.435 seconds (process running for 7.085) Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.apache.rocketmq.client.producer.DefaultMQProducer' available at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:340) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:331) at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1148) at org.example.MainApplication.main(MainApplication.java:21)
old gradle config, it work normal
plugins { id 'org.springframework.boot' version '2.6.7' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id("java") } group = "org.example" version = "1.0-SNAPSHOT" sourceCompatibility = '11' repositories { mavenCentral() } ext { set('springCloudVersion', "2021.0.2") }
ok! I reproduced your problem locally, and I found that when I upgraded the spring cloud version to 2022.0.2, it worked without changing the spring boot version! If you change the spring boot version, it will fail to run. I have reported this to the spring boot community. Related issues:https://github.com/spring-projects/spring-boot/issues/34825
Alternatively, you can temporarily fix the problem by writing the following configuration bean
@Bean
public DefaultMQProducer getRockerMQBean() throws ClassNotFoundException, InstantiationException, IllegalAccessException {
return (DefaultMQProducer) Class.forName("org.apache.rocketmq.client.producer.DefaultMQProducer").newInstance();
}
This component is not currently available for Spring Boot 3.0. There are some differences between Spring Boot2.x and 3.x auto injection!
RocketMQComponent4BinderAutoConfiguration does not loading bean named DefaultMQProducer, RocketMQTemplate it work corrort in spring cloud 2021, but failed in spring cloud 2022
new environment JDK17 spring cloud 2022.0.1 spring boot 3.0.2
old environment JDK11 spring cloud 2021.0.2 spring boot 2.6.7
gradle dependence implementation("org.springframework.cloud:spring-cloud-stream-binder-rocketmq:0.9.0.RELEASE") or implementation("com.alibaba.cloud:spring-cloud-stream-binder-rocketmq:2.2.0.RELEASE")
spring config