Hi Raymond, thanks for the investigation, but i don't want to override the spring framework and implement it myself. I really wonder if there is no better possibility for route templates.
regards Michael Am Mi., 2. Nov. 2022 um 15:18 Uhr schrieb ski n <raymondmees...@gmail.com>: > Hi Michael, > > Interesting case. As far as I know, you cannot change the order of the > components to load while scanning. > > It's maybe possible to load the routetemplate definitions before Spring > starts: > > 1. Move the routetemplate definitions (for example the RouteTemplate.java > file) to a separate package. > 2. Load that package manually: > > @SpringBootApplication > public class MyCamelApplication { > > /** > * A main method to start this application. > */ > public static void main(String[] args) { > setRouteTemplates("org.myorg.routetemplates"); > SpringApplication.run(MyCamelApplication.class, args); > } > > //loads templates in the template package > public void setRouteTemplates(String packageName) throws Exception { > > // create scanner and disable default filters (that is the 'false' > argument) > final ClassPathScanningCandidateComponentProvider provider = new > ClassPathScanningCandidateComponentProvider(false); > provider.addIncludeFilter(new > RegexPatternTypeFilter(Pattern.compile(".*"))); > > // get matching classes defined in the package > final Set<org.springframework.beans.factory.config.BeanDefinition> classes > = provider.findCandidateComponents(packageName); > > // this is how you can load the class type from BeanDefinition instance > for (BeanDefinition bean: classes) { > Class<?> clazz = Class.forName(bean.getBeanClassName()); > Object template = clazz.getDeclaredConstructor().newInstance(); > if(template instanceof RouteBuilder){ > context.addRoutes((RouteBuilder) template); > } > > } > > } > > } > > I haven't tested it, but it is worth a try. > > Raymond > > On Wed, Nov 2, 2022 at 2:12 PM Michael Rambichler <mich...@rambichler.at> > wrote: > > > Hi all, > > > > we are heavily using route templates with camel 3.18.x and Spring boot > > 2.7.3 > > > > I still wonder if there is no better possibility to avoid the spring boot > > component scan order dependency. > > > > To reproduce the issue: check out the example from > > > > > https://github.com/apache/camel-spring-boot-examples/tree/main/routetemplate > > and rename the MyRouteTemplates.java to RouteTemplates.java > > > > There we are, your spring boot will initialize your RouteTemplate > > (RouteTemplates.class) class* after* the RouteBuilder > > (MyTemplateBuilder.class) and fails with: Cannot find RouteTemplate with > id > > myTemplate > > > > Are there any better approaches to avoid this Spring Component Scan > > ordering? > > > > BR > > Michael > > >