gpt4 book ai didi

java - Spring Boot @Autowired 环境抛出 NullPointerException

转载 作者:行者123 更新时间:2023-12-01 19:53:02 25 4
gpt4 key购买 nike

我有一个简单的 SpringBoot 应用程序,其中我使用 Environment.class 访问 application.properties 文件下的属性。当在 Application.class

main 方法中访问 Environment bean 时,它就会工作。
@Configuration
@EnableAutoConfiguration
@ComponentScan(basePackages = "com.cisco.sdp.cdx.consumers")
public class StreamingConsumerApplication {

public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(StreamingConsumerApplication.class, args);
Environment env = context.getBean(Environment.class);
StreamingConsumerFactory factory = context.getBean(StreamingConsumerFactory.class);
StreamingConsumer streamingConsumer = factory.createStreamingConsumer(StreamType.valueOf(env.getRequiredProperty("streaming.application.type")));
streamingConsumer.consume();
}
}

当在不同的类中使用相同的内容时,它会抛出NullPointerException。我尝试使用 @Configuration@Component@Repository@Service 注释来注释该类,但没有用.

我尝试了@Autowired以及@Resource注释。但是,没有成功。

@Component 
public class InventoryStreamingConsumer implements StreamingConsumer {

@Autowired
private Environment env;
@Autowired
private JavaSparkSessionSingleton sparksession;
@Autowired
private StreamingContext _CONTEXT;
private final Map<String, String> kafkaParams = new HashMap<String, String>();

@Override
public void consume() {
if(env == null) {
System.out.println("ENV is NULL");
}
System.out.println(env.getRequiredProperty("kafka.brokerlist"));
kafkaParams.put("metadata.broker.list", env.getRequiredProperty("kafka.brokerlist"));
Set<String> topics = Collections.singleton(env.getRequiredProperty("kafka.topic"));

// Unrelated code.
}

我尝试遵循以下问题中提供的答案

Spring Boot - Environment @Autowired throws NullPointerException

Autowired Environment is null

我正在寻找解决该问题的建议。

最佳答案

@Configuration 注释在此处被误用于 InventoryStreamingConsumer。尝试@Component@Repository@Service

<小时/>

更新

另一个误用是

StreamingConsumer streamingConsumer = factory.createStreamingConsumer(StreamType.valueOf(env.getRequiredProperty("streaming.application.type")));

@Autowired@Resource 只能在 Spring 创建的 bean 中工作。由 StreamingConsumerFactory 工厂 创建的 streamingConsumer 不能使用 @Autowired 来注入(inject)其属性。

您应该创建一个@Configuration类,告诉Spring从您的工厂创建streamingConsumer。像这样

@Configuration
public class ConsumerCreator {

@Autowired
StreamingConsumerFactory factory;

@Bean
public StreamingConsumer streamingConsumer() {
return factory.createStreamingConsumer(StreamType.valueOf(env.getRequiredProperty("streaming.application.type")));
}
}

并且InventoryStreamingConsumer不使用注释,同时使用

        StreamingConsumer streamingConsumer = context.getBean(StreamingConsumer.class);

在您的 StreamingConsumerApplication.main() 方法中而不是检索 streamingConsumer

关于java - Spring Boot @Autowired 环境抛出 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50653975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com