【发布时间】:2019-01-24 07:55:45
【问题描述】:
我是 spring-boot 新手,目前正在尝试开发一个 kafka 生产者 我想测试使用属性文件中定义的值的方法。但它显示值为 null 如何解决这个问题。我已将我的属性文件添加到测试文件夹中的单独资源文件中 this is my folder structure
@SpringBootTest
public class KafkaProducerImplTest {
@BeforeEach
void setUp() {
}
@Test
void check() {
KafkaProducerImpl kpi = new KafkaProducerImpl();
kpi.check();
}
}
@Service
public class KafkaProducerImpl implements KafkaProducerInterface
{
@Value("${kafka.brokers.local}")
private String kafkaBrokers;
@Value("${schema-registry}")
private String schemaRegistry;
private Properties config()
{
Properties props = new Properties();
props.setProperty("bootstrap.servers",kafkaBrokers);
props.setProperty("acks", "1");
props.setProperty("reties", "10");
props.setProperty("key.serializer", StringSerializer.class.getName());
props.setProperty("value.serializer",Serializer.class.getName());
props.setProperty("schema.registry.url",schemaRegistry);
return props;
}
public <K,T>KafkaProducer<K,T> getProducer()
{
return new KafkaProducer<>(config());
}
public <T>ProducerRecord createRecord(String Topic,T msg)
{
return new ProducerRecord<>(
Topic,msg
);
}
public void sendMessage(KafkaProducer producer,ProducerRecord record)
{
producer.send(record, (recordMetadata, e) -> {
if (e == null){
System.out.println("success");
}
});
producer.flush();
}
public void closeProducer(KafkaProducer producer){
producer.close();
}
public void check(){
System.out.println(schemaRegistry);
}
}
【问题讨论】:
-
您正在自己创建一个新实例,而不是让 Spring 管理的
KafkaProducerImpl实例。 -
好的,我怎样才能使用 spring 托管实例。因为当我尝试通过 @Autowired 获取实例时,它给出了错误
-
您应该自动连接
KafkaProducerInterface而不是Impl并且您的测试需要@RunWith(SpringRunner.class)。
标签: spring-boot testing junit properties