spring - 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);
}
}
解决方案
问题是由于初始化方法。
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);
}
}
推荐阅读
- powershell - Powershell 从 SharePoint 文档库中删除文件
- android - ExoPlayer HttpDataSource$InvalidResponseCodeException:响应代码:404
- powerbuilder - PB OLEObject 没有填充 wscript.network 的方法
- javascript - 如何使用 datalist 将对象键传递给函数
- chromecast - 是否有任何解决方案可以在 nay 索引处获取媒体队列项?
- java - Streams deploying stuck and then fails with no errors in the logs
- android-studio - android studio 给我一个错误:(访问被拒绝)
- r - 在 R 中读取 csv 文件后获取额外的符号和数字
- java - 我们可以在spring boot应用程序中随机执行另一个主要功能的单独进程吗?
- php - Google 日历 Yes/Maybe/No 来自 PHP 后端(google-calendar Laravel)