Spring Boot启动报错:无法解析kafka.bootstrap-servers占位符求助
作为Spring Boot新手遇到这种配置加载问题很正常,我帮你一步步排查解决:
1. 移除错误的@PropertySource注解
你在SenderConfig里加的@PropertySource(ignoreResourceNotFound = true, value = "file:application.properties")是问题根源之一。Spring Boot默认会自动加载classpath下的src/main/resources/application.properties,而你指定的file:application.properties是去项目根目录(不是resources文件夹)找这个文件,自然找不到正确的配置。直接删掉这个注解就好,Spring会自动帮你加载默认路径的配置文件。
修改后的SenderConfig:
@Configuration public class SenderConfig { @Value("${kafka.bootstrap-servers}") private String bootstrapServers; @Bean public Map<String, Object> producerConfigs() { Map<String, Object> props = new HashMap<>(); props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers); props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class); props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class); return props; } // 补充:需要创建KafkaTemplate的Bean,否则Sender里的@Autowired会找不到 @Bean public KafkaTemplate<String, String> kafkaTemplate() { return new KafkaTemplate<>(new DefaultKafkaProducerFactory<>(producerConfigs())); } }
2. 检查Maven资源打包是否正确
你的pom.xml里的resources配置是对的,但可以验证下配置文件是否被正确打包到classpath:
- 执行命令:
mvn clean compile - 查看项目目录下的
target/classes文件夹,确认里面有application.properties文件,并且文件里确实有kafka.bootstrap-servers = localhost:2020这一行。
如果没有,可能是Maven缓存问题,执行mvn clean install重新打包试试。
3. 确保Sender类被Spring管理
你的Sender类目前没有任何Spring注解,Spring无法扫描到它,里面的@Autowired KafkaTemplate也会失效。给它加上@Component注解:
@Component public class Sender { private static final Logger LOGGER = LoggerFactory.getLogger(Sender.class); @Autowired private KafkaTemplate<String, String> kafkaTemplate; public void send(String topic, String payload) { LOGGER.info("sending payload='{}' to topic='{}'", payload, topic); kafkaTemplate.send(topic, payload); } }
4. 确认Kafka依赖已正确引入
Spring Boot 1.4.2.RELEASE需要对应版本的kafka starter依赖,在pom.xml的<dependencies>里加入:
<dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> </dependency>
因为你用了KafkaTemplate,这个依赖是必须的,Spring Boot的parent会帮你管理对应的版本。
最后验证
做完以上步骤后,重新启动项目:
- 如果还是报错,检查
application.properties里的键名是否正确(kafka.bootstrap-servers有没有拼写错误,比如少了s或者连字符错了) - 确保你的Kafka服务确实在localhost:2020运行(不过当前报错是配置找不到,所以先确保配置加载正常)
内容的提问来源于stack exchange,提问作者Trist49

