Spring Configuration for Vaadin Applications

This topic is the discussion thread for the Vaadin documentation page Spring Configuration for Vaadin Applications.

Questions, feedback, and comments are welcome here.

hmm is it possible to configure Vaadin, spring boot to have two web roots in different Applications? like this;

/app

/backoffice,


so have complete cut in the app, to now show all the backend url in the client etc

How to define "complete"? It could be e.g. done on many levels, e.g. just defining different super class for your app and backoffice views (probably with different parent layouts) or you could put them to different JVMs altogether (probably somethign that you are looking for, allows your apps for example to use different dependency versions). To accomplish the latter, you'll probably use front-proxy configuraiton to map your UI servers to the same domain.

Hi, I changed the version of Vaadin from 24.3.9 to 24.6.5 and I am getting this error which has something to do with package.properties. I created this file in the src/main/resources/META-INF/VAADIN package, but I still get the same error. I'm completely lost now. Don't know what to do with it?

[2025-02-27 15:40:47,516] [WARN] [T: restartedMain] [.io.FilterableResourceResolver (FilterableResourceResolver.java:375)] [U: ] Failed to find META-INF/VAADIN/package.properties for path URL [jar:file:/C:/Users/vladimir.holy/.m2/repository/com/vaadin/flow-server/24.6.5/flow-server-24.6.5.jar!/com/vaadin/flow/router/]  
java.io.FileNotFoundException: URL [jar:file:/C:/Users/vladimir.holy/.m2/repository/com/vaadin/flow-server/24.6.5/flow-server-24.6.5.jar!/com/vaadin/flow/router/] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/C:/Users/vladimir.holy/.m2/repository/com/vaadin/flow-server/24.6.5/flow-server-24.6.5.jar!/com/vaadin/flow/router/
	at org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:217)
	at org.springframework.core.io.AbstractFileResolvingResource.getFile(AbstractFileResolvingResource.java:173)
	at org.springframework.core.io.UrlResource.getFile(UrlResource.java:285)
	at org.springframework.core.io.support.PathMatchingResourcePatternResolver.doFindPathMatchingFileResources(PathMatchingResourcePatternResolver.java:791)
	at com.vaadin.flow.spring.io.FilterableResourceResolver.cachePackageProperties(FilterableResourceResolver.java:363)
	at com.vaadin.flow.spring.io.FilterableResourceResolver.lambda$doFindAllClassPathResources$2(FilterableResourceResolver.java:244)
	at java.base/java.util.Collection.removeIf(Collection.java:576)
	at com.vaadin.flow.spring.io.FilterableResourceResolver.doFindAllClassPathResources(FilterableResourceResolver.java:233)
	at org.springframework.core.io.support.PathMatchingResourcePatternResolver.findAllClassPathResources(PathMatchingResourcePatternResolver.java:364)
	at org.springframework.core.io.support.PathMatchingResourcePatternResolver.getResources(PathMatchingResourcePatternResolver.java:333)
	at com.vaadin.flow.spring.VaadinServletContextInitializer$CustomResourceLoader.collectResources(VaadinServletContextInitializer.java:1033)
	at com.vaadin.flow.spring.VaadinServletContextInitializer$CustomResourceLoader.getResources(VaadinServletContextInitializer.java:1018)
	at org.springframework.core.io.support.PathMatchingResourcePatternResolver.findPathMatchingResources(PathMatchingResourcePatternResolver.java:557)
	at org.springframework.core.io.support.PathMatchingResourcePatternResolver.getResources(PathMatchingResourcePatternResolver.java:329)
	at com.vaadin.flow.spring.VaadinServletContextInitializer$CustomResourceLoader.collectResources(VaadinServletContextInitializer.java:1033)
	at com.vaadin.flow.spring.VaadinServletContextInitializer$CustomResourceLoader.getResources(VaadinServletContextInitializer.java:1018)
	at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.scanCandidateComponents(ClassPathScanningCandidateComponentProvider.java:422)
	at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:317)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1715)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
	at com.vaadin.flow.spring.VaadinServletContextInitializer$ErrorParameterServletContextListener.failFastContextInitialized(VaadinServletContextInitializer.java:458)
	at com.vaadin.flow.spring.VaadinServletContextInitializer$FailFastServletContextListener.contextInitialized(VaadinServletContextInitializer.java:202)
	at com.vaadin.flow.spring.VaadinServletContextInitializer$CompositeServletContextListener.lambda$contextInitialized$0(VaadinServletContextInitializer.java:230)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
	at com.vaadin.flow.spring.VaadinServletContextInitializer$CompositeServletContextListener.contextInitialized(VaadinServletContextInitializer.java:230)
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4710)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5155)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1393)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1383)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
	at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
	at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145)
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:916)
	at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:886)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1393)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1383)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
	at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
	at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145)
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:916)
	at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:252)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
	at org.apache.catalina.core.StandardService.startInternal(StandardService.java:430)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
	at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:926)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
	at org.apache.catalina.startup.Tomcat.start(Tomcat.java:485)
	at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:123)
	at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.<init>(TomcatWebServer.java:104)
	at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:488)
	at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:210)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:183)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:161)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:578)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:310)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1304)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1293)
	at com.dn.capl.ui.Application.main(Application.java:41)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
	at java.base/java.lang.reflect.Method.invoke(Method.java:578)
	at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)

Did you upgrade the Spring Boot version as well?

Vaadin 24.3 was based on Spring Boot 3.2, whereas Vaadin 24.6 requires Spring Boot 3.4

Thank you for your quick reply and correct solution to my problem! Everything is working now. Thank you very much again.