Java 应用程序无法启动Spring启动
我有一个使用Spring Boot的框架,它包含一个控制器Java 应用程序无法启动Spring启动,java,spring,spring-boot,apache-kafka,Java,Spring,Spring Boot,Apache Kafka,我有一个使用Spring Boot的框架,它包含一个控制器RestController类 @RequestMapping("/details") @RestController public class DataController { private KafkaStreams kafkaStreams; public DataController(KafkaStreams kafkaStreams) { this.kafkaStreams = kafkaStr
RestController
类
@RequestMapping("/details")
@RestController
public class DataController {
private KafkaStreams kafkaStreams;
public DataController(KafkaStreams kafkaStreams) {
this.kafkaStreams = kafkaStreams;
}
@Autowired
DataService dataService;
@RequestMapping(value = "getAllDetails", method = RequestMethod.GET)
public boolean getAllDetails(KafkaStreams kafkaStreams) {
return ktableService.getAllDetails(kafkaStreams);
}
}
在我的服务实现类中,我使用这个kafkaStreams
对象来查找我的不同服务的详细信息
现在我在我的另一个应用程序中使用这个框架作为依赖项,其中我有一个runner类
import org.apache.kafka.streams.KafkaStreams;
@Component
public class PipelineRunner {
private final StreamsBuilder streamsBuilder;
private final KafkaProperties kafkaProperties;
private final SerdesExt serdesExt;
@Autowired
public PipelineRunner(StreamsBuilder streamsBuilder, KafkaProperties kafkaProperties, SerdesExt serdesExt) {
this.streamsBuilder = streamsBuilder;
this.kafkaProperties = kafkaProperties;
this.serdesExt = serdesExt;
}
@PostConstruct
public void run() {
ReflectData.AllowNull.get().addStringable(Utf8.class);
ReflectData.get().addStringable(Utf8.class);
DataProcessor processor = new DataProcessor(streamsBuilder, kafkaProperties,
serdesExt);
start();
}
private void start() {
KafkaStreams kafkaStreams = new KafkaStreams(streamsBuilder.build(),
kafkaProperties.getKafkaStreamsProperties(serdesExt));
System.out.println("----Its is started----");
DataController controller = new DataController(kafkaStreams);
kafkaStreams.start();
}
}
在这个类中,我试图为DataController
创建对象
所以当我尝试运行应用程序类时
@SpringBootApplication(scanBasePackages = { "framework package" })
@EnableConfigurationProperties(KafkaProperties.class)
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
我得到了这个错误
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 0 of constructor in frameworkpackage.controllers.DataController required a bean of type 'org.apache.kafka.streams.KafkaStreams' that could not be found.
Action:
Consider defining a bean of type 'org.apache.kafka.streams.KafkaStreams' in your configuration.
我不熟悉弹簧靴。所以我可能做错了什么。如果需要更多信息,我可以提供
更新
我的pom文件
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
</parent>
<properties>
<confluent.version>4.1.0</confluent.version>
<kafka.version>1.1.0</kafka.version>
<lombok.version>1.18.0</lombok.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>io.confluent</groupId>
<artifactId>kafka-avro-serializer</artifactId>
<version>${confluent.version}</version>
</dependency>
<dependency>
<groupId>io.confluent</groupId>
<artifactId>kafka-streams-avro-serde</artifactId>
<version>${confluent.version}</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-streams</artifactId>
<version>${kafka.version}</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>${kafka.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-avro</artifactId>
<version>2.8.5</version>
</dependency>
</dependencies>
org.springframework.boot
spring启动程序父级
2.0.2.1发布
4.1.0
1.1.0
1.18.0
org.springframework.boot
弹簧靴起动器
org.springframework.boot
spring引导配置处理器
真的
org.springframework.boot
SpringBootStarterWeb
合流的
卡夫卡avro序列化程序
${confluent.version}
合流的
卡夫卡河酒店
${confluent.version}
org.apache.kafka
卡夫卡河
${kafka.version}
org.apache.kafka
卡夫卡客户
${kafka.version}
org.projectlombok
龙目
${lombok.version}
测试
com.fasterxml.jackson.dataformat
jackson数据格式avro
2.8.5
问题是您试图在类DataController中使用beankafkaStreams,但在Spring上下文中没有具有此名称的bean。您需要手动创建它,以便以后可以自动关联它
在您的情况下,我建议如下更新PipelineRunner.java:
import javax.annotation.PostConstruct;
import org.apache.kafka.streams.KafkaStreams;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.kafka.KafkaProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
@Component
public class PipelineRunner
{
private final StreamsBuilder streamsBuilder;
private final KafkaProperties kafkaProperties;
private final SerdesExt serdesExt;
@Autowired
public PipelineRunner(StreamsBuilder streamsBuilder, KafkaProperties kafkaProperties, SerdesExt serdesExt)
{
this.streamsBuilder = streamsBuilder;
this.kafkaProperties = kafkaProperties;
this.serdesExt = serdesExt;
}
@PostConstruct
public void run()
{
ReflectData.AllowNull.get().addStringable(Utf8.class);
ReflectData.get().addStringable(Utf8.class);
DataProcessor processor = new DataProcessor(streamsBuilder, kafkaProperties,
serdesExt);
start();
}
@Bean
KafkaStreams kafkaStreams()
{
KafkaStreams kafkaStreams = new KafkaStreams(
streamsBuilder.build(),
kafkaProperties.getKafkaStreamsProperties(serdesExt));
System.out.println("----Its is started----");
kafkaStreams.start();
return kafkaStreams;
}
}
您不需要自己创建DataController实例,这将由Spring自动完成
关于Spring对Bean的方法的更多信息可用您是否添加了Kafka Streams
Spring启动程序
依赖项?使用pom.xml
或build.gradle
更新问题将提供更多信息。@BranislavLazic添加了pom文件我不知道如何使用Spring boot配置Kafka,但我认为您的私有KafkaStreams KafkaStreams代码>应该自动连接或注入到构造函数中(基于日志)@MickaëlB是的。我以为Spring Boot会自动配置它。但是没有。似乎他必须手动定义KafkaStreams
bean。@MikaëlB我尝试在私有KafkaStreams KafkaStreams中添加自动连线;但面对同样的问题