Как читать внешний XML при весенней загрузке 2.1.7, используя внешний путь в качестве аргумента командной строки или конфигурационной папки - PullRequest
1 голос
/ 30 октября 2019

Я работаю с приложением весенней загрузки, имеющим внешнюю конфигурацию. Файл JAR запускается из командной строки с помощью следующей команды.

java -jar Service-1.0.jar --spring.config.additional-location=C:/Users/Administrator/Desktop/Springboot/

Требуется передать внешний путь конфигурации через аргумент командной строки, поскольку они могут различаться.

Основной класс

@ImportResource(locations = {
        "config/spring/service-config.xml",
        "config/spring/datasource-config.xml"

})
public class ServiceMain {

    public static void main(String[] args) {

        ConfigurableApplicationContext applicationContext = new SpringApplicationBuilder(ServiceMain.class)
                .build()
                .run(args);
        for (String name : applicationContext.getBeanDefinitionNames()) {

        }

    }
}

, когда я запускаю эту банку, появляется следующая ошибка

enter image description here

РЕДАКТИРОВАТЬ 1 изменена рабочая команда

java -jar Service-1.0.jar --spring.config.additional-location=C:/Users/Administrator/Desktop/Springboot/,--external.config=C:/Users/Administrator/Desktop/Springboot/

изменен основной класс

 @ImportResource(locations = {
            "${external.config}/config/spring/service-config.xml",
            "${external.config}/config/spring/datasource-config.xml"

    })
    public class ServiceMain {

        public static void main(String[] args) {

            ConfigurableApplicationContext applicationContext = new SpringApplicationBuilder(ServiceMain.class)
                    .build()
                    .run(args);
            for (String name : applicationContext.getBeanDefinitionNames()) {

            }

        }
    }

показано исключение

java.lang.IllegalArgumentException: Could not resolve placeholder 'external.config' in value "${external.config}/config/spring/service-config.xml"
    at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:181)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:315)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:232)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:275)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:95)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:705)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:531)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:743)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:390)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:312)
    at com.ge.hcit.xer.app.services.api.XERServiceMain.main(XERServiceMain.java:31)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:51)
    at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52)
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'external.config' in value "${external.config}/config/spring/service-config.xml"
    at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:178)
    at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:124)
    at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:237)
    at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:211)
    at org.springframework.core.env.AbstractEnvironment.resolveRequiredPlaceholders(AbstractEnvironment.java:575)
    at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:311)
    at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:242)
    at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:199)
    at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:167)
    ... 18 common frames omitted

как импорт ресурсов принимает внешнюю конфигурацию

РЕДАКТИРОВАТЬ 2

Я помещаю конфигурацию в папку config.external application.properties загружается в текущий проект, но не загружается в проект зависимостей.

@Configuration
public class ConfigurationFactory
{

    public static final String REQ_CONF = "config/Configuration.xml";
    public static final String FILTER_XML_CONF = "config/DocFilter.xml";
}

Только внешние файлы application.properties/yml для весенней загрузки?

Ответы [ 2 ]

1 голос
/ 31 октября 2019

Используйте префикс file: для файла системных ресурсов:

@ImportResource(locations = {
     "file:${external.config.location}/config/spring/service-config.xml",
     "file:${external.config.location}/config/spring/datasource-config.xml"
})

Запускать с --external.config.location=xxx:

java -jar Service-1.0.jar --external.config.location=C:/Users/Administrator/Desktop/Springboot
1 голос
/ 31 октября 2019

Ничего плохого в вашем подходе.

Instead of command line, add that as variable in application.properties file

пожалуйста, разделите местозаполнитель и оставшийся путь,

like ("${external.config}"+"/spring/service-config.xml")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...