Me sale este error durante el inicio de mi aplicación basada en la primavera de arranque 2.1.4:
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [test.services.AlmConnectivity]: Constructor threw exception; nested exception is java.lang.NullPointerException
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:184) ~[spring-beans-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87) ~[spring-beans-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1295) ~[spring-beans-5.1.6.RELEASE.jar:5.1.6.RELEASE]
... 22 common frames omitted
Caused by: java.lang.NullPointerException: null
at test.services.AlmConnectivity.initProxyBean(AlmConnectivity.java:43) ~[classes/:na]
at test.services.AlmConnectivity.<init>(AlmConnectivity.java:30) ~[classes/:na]
La línea mencionada 43
es la que comienza con proxy =
:
@DependsOn({ "config", "cfg" })
private void initProxyBean() {
System.err.println("Config: " + config);
proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(config.getProxyHost(), config.getProxyPort()));
}
System.err
grabados también nulo. Como se puede ver Traté de dependencias de señal utilizando @DependsOn
.
Estos son los (supongo) otras partes pertinentes de la clase:
@Service
public class AlmConnectivity {
Logger log = LoggerFactory.getLogger(AlmConnectivity.class);
@Autowired
@Qualifier("config")
Config config;
private Proxy proxy;
private OkHttpClient client;
public AlmConnectivity() {
initProxyBean();
initClientBean(proxy);
}
Porque prefiero nombres más cortos he usado @Qualifier
, pero incluso si me salto esto y tomo el grano con su nombre completo config
no funciona y estancias de configuración nula.
Esta es la clase de configuración:
@Component
public class Config {
@NotNull
@NotEmpty
@Value("${proxy.host}")
private String proxyHost = "i.am.desparate";
@NotNull
@NotEmpty
@Value("${proxy.port}")
private int proxyPort = 8090;
public String getProxyHost() {
return proxyHost;
}
public int getProxyPort() {
return proxyPort;
}
}
Mi clase principal lleva estas anotaciones:
@SpringBootApplication
@EnableScheduling
@Configuration
@ComponentScan
@EnableAutoConfiguration
(Los tres últimos fueron añadidas durante mis intentos para conseguir este funcionamiento)
Es posible que desee cambiar su comportamiento de ser llamado en el constructor de una
javax.annotation.PostConstruct
método anotado:
@Service
public class AlmConnectivity {
Logger log = LoggerFactory.getLogger(AlmConnectivity.class);
@Autowired
@Qualifier("config")
Config config;
private Proxy proxy;
private OkHttpClient client;
@PostConstruct
private void initProxyBean() {
System.err.println("Config: " + config);
proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(config.getProxyHost(), config.getProxyPort()));
}
}