如何解决Spring boot:在覆盖 spring-context 初始值设定项时尝试获取属性值时出错 控制台错误关于覆盖初始化程序
控制台错误
2021-07-27 23:09:35.124 ERROR 20275 --- [ main] o.s.boot.SpringApplication : Application run Failed
java.lang.NullPointerException: Cannot invoke "java.lang.Integer.intValue()" because "this.wmPort" is null
at com.wmock.info.utilities.wiremockInitializer.initialize(wiremockInitializer.java:21) ~[test-classes/:na]
关于覆盖初始化程序
@ActiveProfiles({"test"})
public class wiremockInitializer implements ApplicationContextinitializer<ConfigurableApplicationContext> {
private wiremockServer wiremockServer;
@Value("${wiremock.port:2222}")
private Integer wmPort;
@Override
public void initialize(ConfigurableApplicationContext configurableApplicationContext) {
wiremockServer = new wiremockServer(wiremockConfiguration.wiremockConfig().port(wmPort));
wiremockServer.start();
configurableApplicationContext.addApplicationListener(applicationEvent -> {
if (applicationEvent instanceof ContextClosedEvent) {
wiremockServer.stop();
}
});
configurableApplicationContext.getbeanfactory()
.registerSingleton("wiremockServer",wiremockServer);
}
}
解决方法
问题是因为 initialize 方法。
package com.wmock.info.utilities;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Data
@Configuration
@ConfigurationProperties(prefix = "wiremock")
public class CustomConfig {
private int port;
public int getPort() {
return port;
}
}
public class WireMockInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
private WireMockServer wireMockServer;
@Override
public void initialize(ConfigurableApplicationContext configurableApplicationContext) {
ConfigurableEnvironment environment = configurableApplicationContext.getEnvironment();
BindResult<CustomConfig> configProps = Binder.get(environment).bind("wiremock",CustomConfig.class);
wireMockServer = new WireMockServer(WireMockConfiguration.wireMockConfig().port(configProps.get().getPort()));
wireMockServer.start();
configurableApplicationContext.addApplicationListener(applicationEvent -> {
if (applicationEvent instanceof ContextClosedEvent) {
wireMockServer.stop();
}
});
configurableApplicationContext.getBeanFactory()
.registerSingleton("wireMockServer",wireMockServer);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。