无法解析字符串值“ $ {kafka.bootstrap-servers}”中的占位符“ kafka.bootstrap-servers”

时间:2019-06-19 12:44:42

标签: java maven spring-boot properties

我必须继续其他人的项目,但是当我在Intellij上运行spring应用程序时,我遇到了错误。我是春季和冬季新手。 我在ressource文件夹中有一个application.properties,没有用于配置的xml文件。

这是构建部分 pom.xml

<parent>
<groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
</parent>
<build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>**/*.properties</include>
                </includes>
            </resource>
        </resources>
        <!--
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        -->
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <!--
                <configuration>
                    <mainClass>kobdig.SimulationApplication</mainClass>
                </configuration>
                -->
            </plugin>
        </plugins>
    </build>
</code>

SimulationApplication.java

@SpringBootApplication
public class SimulationApplication {

    public static void main(String[] args){
        SpringApplication.run(SimulationApplication.class, args);
    }
}

SenderConfig.java

@Configuration
@PropertySource(ignoreResourceNotFound = true, value = "file:application.properties")
public class SenderConfig {

    @Value("${kafka.bootstrap-servers}")
    private String bootstrapServers;

    @Bean
    public Map<String, Object> producerConfigs() {
        Map<String, Object> props = new HashMap<>();
        // list of host:port pairs used for establishing the initial connections to the Kakfa cluster
        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;
    }

application.properties

server.port=9090
kafka.bootstrap-servers = localhost:2020

Sender.java

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);
    }
}

我遇到此错误:

  

嵌套的异常是java.lang.IllegalArgumentException:无法   在字符串值中解析占位符'kafka.bootstrap-servers'   “ $ {kafka.bootstrap-servers}”

已经尝试了很多事情,我在stackOverflow上看到了很多类似的主题,但是找不到问题。 @PropertySource没有帮助。 你能帮我吗?

1 个答案:

答案 0 :(得分:0)

请确保您的application.properties文件位于类路径中。如果您的属性文件位于另一个软件包中,那么它将不会在spring之前自动被占用。

如果属性文件在您的类路径中,请尝试使用如下所示的属性源

@PropertySource("classpath:application.properties")

如果将application.properties放在src/main/resources下,则无需使用@PropertySource注释。Spring应该会自动使用它。

验证是否从application.properties中拾取了其他值,如果不是,则可能是由于PropertySourcesPlaceholderConfigurer Bean所致,请尝试创建PropertySourcesPlaceholderConfigurer的bean。