Search code examples
javaspring-bootconfigurationignite

Unable to load Ignite config spring bean definition from non default location in spring boot application


I am trying to externalize my ignite configuration in my spring boot application so the configuration can be changed without rebuilding the jar.

Previously the file resided in src/main/resrouces and was loaded via annotations.

@ImportResource("IgniteConfig.xml") and 

@Autowired 
private IgniteConfiguration cfg;

When I moved the IgniteConfig.xml to the config folder that resides next to the excutable jar the above stopped working and I have tried the following without success:

  1. use --spring.config.location argument. I can tell this is picked up during run time as other configurations work but the above ImportResource annotation says the file IgniteConfig.xml cannot be found.

  2. use a relative path to (e.g. ./config.IgniteConfig.xml) to Ignition.start. I cause this relative path to print the file contents of the xml file in my logs but when I pass it to Ignition.start it says the file cannot be found. I have tried using relative and absolute paths to do this.

  3. Manually create an ApplicationContext and get the configuration by bean name.

ApplicationContext context = new ClassPathXmlApplicationContext("./config/IgniteConfig.xml");

This again complains that the file does not exist even though I can see by opening the file directly:

File igniteConfigFile = new File("./config/IgniteConfig.xml");

Solution

  • The comment by konqi in this post answered my question:

    "In case you want to import a resource that is outside the classpath the syntax would be:

    @ImportResource( { "file:path/spring-context1.xml", "file:path/spring-context2.xml" } ) 
    

    "

    In my case I just needed to do:

    @ImportResource( { "file:./config/IgniteConfig.xml" } )