Java-buildpack: ¿El JBP es compatible con Spring Boot 2.0?

Creado en 1 sept. 2017  ·  6Comentarios  ·  Fuente: cloudfoundry/java-buildpack

Todos 6 comentarios

Aún no lo hemos probado, pero dado que la forma en que se ejecuta ( java -jar ) no ha cambiado, no tengo ninguna razón para creer que no.

De hecho, tengo un problema con el M3 actual. Pero solo sucede cuando se usa MongoDB. Cloud Foundry intenta reconfigurar la conexión MongoDB y se encuentra con un NoSuchMethodError .

Por lo que puedo ver, esto se debe a cambios importantes en la dependencia spring-data-mongo .

La configuración es una aplicación Spring Boot 2.0.0.M3 básica con iniciadores para:

  • solenoide
  • datos-mongo
  • web
  • etc.

El proyecto se puede encontrar aquí:
https://github.com/nt-ca-aqe/library-app/tree/master/library-service

Extracto de registros:

2017-09-13T12:56:07.084+02:00 [APP/PROC/WEB/0] [OUT] 2017-09-13 10:56:07.083 ERROR [] --- [ main] o.s.boot.SpringApplication : Application startup failed
2017-09-13T12:56:07.084+02:00 [APP/PROC/WEB/0] [OUT] java.lang.NoSuchMethodError: org.springframework.data.mongodb.core.SimpleMongoDbFactory.<init>(Lcom/mongodb/Mongo;Ljava/lang/String;)V
2017-09-13T12:56:07.084+02:00 [APP/PROC/WEB/0] [OUT] at org.cloudfoundry.reconfiguration.org.springframework.cloud.service.document.MongoDbFactoryCreator.createMongoDbFactory(MongoDbFactoryCreator.java:50)
2017-09-13T12:56:07.084+02:00 [APP/PROC/WEB/0] [OUT] at org.cloudfoundry.reconfiguration.org.springframework.cloud.service.document.MongoDbFactoryCreator.create(MongoDbFactoryCreator.java:37)
2017-09-13T12:56:07.084+02:00 [APP/PROC/WEB/0] [OUT] at org.cloudfoundry.reconfiguration.org.springframework.cloud.service.document.MongoDbFactoryCreator.create(MongoDbFactoryCreator.java:31)
2017-09-13T12:56:07.084+02:00 [APP/PROC/WEB/0] [OUT] at org.cloudfoundry.reconfiguration.org.springframework.cloud.Cloud.getServiceConnector(Cloud.java:245)
2017-09-13T12:56:07.084+02:00 [APP/PROC/WEB/0] [OUT] at org.cloudfoundry.reconfiguration.org.springframework.cloud.Cloud.getSingletonServiceConnector(Cloud.java:155)
2017-09-13T12:56:07.084+02:00 [APP/PROC/WEB/0] [OUT] at org.cloudfoundry.reconfiguration.spring.AbstractCloudServiceBeanFactoryPostProcessor.reconfigureBean(AbstractCloudServiceBeanFactoryPostProcessor.java:119)
2017-09-13T12:56:07.084+02:00 [APP/PROC/WEB/0] [OUT] at org.cloudfoundry.reconfiguration.spring.AbstractCloudServiceBeanFactoryPostProcessor.processBean(AbstractCloudServiceBeanFactoryPostProcessor.java:112)
2017-09-13T12:56:07.084+02:00 [APP/PROC/WEB/0] [OUT] at org.cloudfoundry.reconfiguration.spring.AbstractCloudServiceBeanFactoryPostProcessor.processBeans(AbstractCloudServiceBeanFactoryPostProcessor.java:97)
2017-09-13T12:56:07.084+02:00 [APP/PROC/WEB/0] [OUT] at org.cloudfoundry.reconfiguration.spring.AbstractCloudServiceBeanFactoryPostProcessor.postProcessBeanFactory(AbstractCloudServiceBeanFactoryPostProcessor.java:63)
2017-09-13T12:56:07.084+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:282)
2017-09-13T12:56:07.084+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:127)
2017-09-13T12:56:07.084+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:693)
2017-09-13T12:56:07.084+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:531)
2017-09-13T12:56:07.084+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:122)
2017-09-13T12:56:07.084+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750)
2017-09-13T12:56:07.084+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:386)
2017-09-13T12:56:07.084+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.boot.SpringApplication.run(SpringApplication.java:327)
2017-09-13T12:56:07.084+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1245)
2017-09-13T12:56:07.084+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1233)
2017-09-13T12:56:07.084+02:00 [APP/PROC/WEB/0] [OUT] at library.service.ApplicationKt.main(Application.kt:17)
2017-09-13T12:56:07.084+02:00 [APP/PROC/WEB/0] [OUT] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2017-09-13T12:56:07.084+02:00 [APP/PROC/WEB/0] [OUT] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
2017-09-13T12:56:07.084+02:00 [APP/PROC/WEB/0] [OUT] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2017-09-13T12:56:07.084+02:00 [APP/PROC/WEB/0] [OUT] at java.lang.reflect.Method.invoke(Method.java:498)
2017-09-13T12:56:07.084+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
2017-09-13T12:56:07.084+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
2017-09-13T12:56:07.084+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
2017-09-13T12:56:07.084+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
2017-09-13T12:56:07.085+02:00 [APP/PROC/WEB/0] [OUT] 2017-09-13 10:56:07.085 INFO [] --- [ main] ConfigServletWebServerApplicationContext : Closing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext<strong i="19">@2cfb4a64</strong>: startup date [Wed Sep 13 10:56:02 UTC 2017]; root of context hierarchy
2017-09-13T12:56:07.088+02:00 [APP/PROC/WEB/0] [OUT] 2017-09-13 10:56:07.087 WARN [] --- [ main] ConfigServletWebServerApplicationContext : Exception thrown from LifecycleProcessor on context close
2017-09-13T12:56:07.088+02:00 [APP/PROC/WEB/0] [OUT] java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' before invoking lifecycle methods via the context: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext<strong i="20">@2cfb4a64</strong>: startup date [Wed Sep 13 10:56:02 UTC 2017]; root of context hierarchy
2017-09-13T12:56:07.088+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.context.support.AbstractApplicationContext.getLifecycleProcessor(AbstractApplicationContext.java:433)
2017-09-13T12:56:07.088+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1004)
2017-09-13T12:56:07.088+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:963)
2017-09-13T12:56:07.088+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.boot.SpringApplication.handleRunFailure(SpringApplication.java:808)
2017-09-13T12:56:07.088+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.boot.SpringApplication.run(SpringApplication.java:338)
2017-09-13T12:56:07.088+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1245)
2017-09-13T12:56:07.088+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1233)
2017-09-13T12:56:07.088+02:00 [APP/PROC/WEB/0] [OUT] at library.service.ApplicationKt.main(Application.kt:17)
2017-09-13T12:56:07.088+02:00 [APP/PROC/WEB/0] [OUT] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2017-09-13T12:56:07.088+02:00 [APP/PROC/WEB/0] [OUT] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
2017-09-13T12:56:07.088+02:00 [APP/PROC/WEB/0] [OUT] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2017-09-13T12:56:07.088+02:00 [APP/PROC/WEB/0] [OUT] at java.lang.reflect.Method.invoke(Method.java:498)
2017-09-13T12:56:07.088+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
2017-09-13T12:56:07.088+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
2017-09-13T12:56:07.088+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
2017-09-13T12:56:07.088+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
2017-09-13T12:56:07.089+02:00 [APP/PROC/WEB/0] [OUT] 2017-09-13 10:56:07.089 ERROR [] --- [ main] o.s.b.f.s.DefaultListableBeanFactory : Destroy method on bean with name 'org.springframework.boot.autoconfigure.internalCachingMetadataReaderFactory' threw an exception
2017-09-13T12:56:07.089+02:00 [APP/PROC/WEB/0] [OUT] java.lang.IllegalStateException: ApplicationEventMulticaster not initialized - call 'refresh' before multicasting events via the context: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext<strong i="21">@2cfb4a64</strong>: startup date [Wed Sep 13 10:56:02 UTC 2017]; root of context hierarchy
2017-09-13T12:56:07.089+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.context.support.AbstractApplicationContext.getApplicationEventMulticaster(AbstractApplicationContext.java:420)
2017-09-13T12:56:07.089+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.context.support.ApplicationListenerDetector.postProcessBeforeDestruction(ApplicationListenerDetector.java:95)
2017-09-13T12:56:07.089+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:240)
2017-09-13T12:56:07.089+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:582)
2017-09-13T12:56:07.089+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton(DefaultSingletonBeanRegistry.java:558)
2017-09-13T12:56:07.089+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingleton(DefaultListableBeanFactory.java:952)
2017-09-13T12:56:07.089+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:527)
2017-09-13T12:56:07.089+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.destroySingletons(FactoryBeanRegistrySupport.java:228)
2017-09-13T12:56:07.089+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingletons(DefaultListableBeanFactory.java:959)
2017-09-13T12:56:07.089+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:1035)
2017-09-13T12:56:07.089+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1011)
2017-09-13T12:56:07.089+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:963)
2017-09-13T12:56:07.089+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.boot.SpringApplication.handleRunFailure(SpringApplication.java:808)
2017-09-13T12:56:07.089+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.boot.SpringApplication.run(SpringApplication.java:338)
2017-09-13T12:56:07.089+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1245)
2017-09-13T12:56:07.089+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1233)
2017-09-13T12:56:07.089+02:00 [APP/PROC/WEB/0] [OUT] at library.service.ApplicationKt.main(Application.kt:17)
2017-09-13T12:56:07.089+02:00 [APP/PROC/WEB/0] [OUT] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2017-09-13T12:56:07.089+02:00 [APP/PROC/WEB/0] [OUT] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
2017-09-13T12:56:07.089+02:00 [APP/PROC/WEB/0] [OUT] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2017-09-13T12:56:07.089+02:00 [APP/PROC/WEB/0] [OUT] at java.lang.reflect.Method.invoke(Method.java:498)
2017-09-13T12:56:07.089+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
2017-09-13T12:56:07.089+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
2017-09-13T12:56:07.089+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
2017-09-13T12:56:07.089+02:00 [APP/PROC/WEB/0] [OUT] at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
2017-09-13T12:56:07.446+02:00 [APP/PROC/WEB/0] [OUT] Exit status 1

Sí, este es un problema de reconfiguración automática. Dependemos de una versión de Spring Cloud Connectors que podría no estar lista para la actualización de la versión principal a Spring Data. @scottfrederick, ¿está al tanto de esto y todo lo que tendré que hacer es comenzar a usar una nueva versión de Spring Cloud Connectors?

He estado actualizando nuestras aplicaciones de prueba de Java a Boot 2.0 . Basado en ese trabajo, lo único que parece tener un problema es que la reconfiguración automática de Spring Data Mongo parece estar rota (cambios en la API). Dejaré este problema abierto como un indicador de eso, y luego lo cerraré una vez que tengamos una solución.

¿Alguna estimación de cuándo estará disponible? Además: ¿existen soluciones alternativas aplicables por el momento?

Estamos bastante cerca de cumplir, pero todavía estamos esperando que @scottfrederick haga un lanzamiento de Spring Cloud Connectors. Hemos realizado un trabajo importante para simplificar la reconfiguración automática y actualizarla para usar Spring Cloud Connectors 2.x. Como parte de ese trabajo, enviamos un PR para asegurarnos de que todos los tipos configurados fueran compatibles en Boot 1.xy Boot 2.x. Esto se ha incluido, pero aún se está probando. Una vez que se publique, lo consumiremos y obtendremos una nueva versión de la reconfiguración automática en la naturaleza.

No hay una necesidad real de una solución alternativa, ya que todo, excepto la reconfiguración automática de MongoDB, funciona como se esperaba hoy. Si está intentando realizar una reconfiguración automática de MongoDB, no hay otra solución que la de configurar explícitamente su aplicación para usar el servicio (lo que debería hacer de todos modos; la reconfiguración automática no es una buena opción para los sistemas de producción).

¿Fue útil esta página
0 / 5 - 0 calificaciones