2016-03-08 2 views
2

Я запускаю приложение Spring Boot в экземпляре Tomcat, упакованном как военный файл. Я хотел бы иметь возможность добавлять «пакеты» к моему экземпляру в виде услуг отдыха. Для этого мне нужно иметь возможность настраивать scanBasePackages в аннотации @SpringBootApplication во время выполнения. т. е. когда tomcat запускается. Теперь у меня есть ...Настройка сканирования базового пакета для приложения Spring Boot в Runtime

@SpringBootApplication(scanBasePackages="path1, path2") 
public class RestApplication extends SpringBootServletInitializer { 
    //code 
} 

... но я хотел бы иметь path2 быть настраиваемым и поочередно иметь возможность добавлять путь3 и т.д., если это необходимо. Как я могу это достичь? Я понимаю, что я не могу сконфигурировать String в аннотации, поэтому я задаю вопрос о том, какие другие альтернативы я имею в этой аннотации для установки этого.

Cheers.

ответ

3

вы можете попробовать использовать что-то вроде этого в проекте

@Configuration 
@Profile("custom-profile")  
@ImportResource({"file:path/additional-context.xml" }) 
public class ConfigClass { } 

и настроить сканирование дополнительных пакетов в этом файле затем.

<context:component-scan base-package="x.y.z.service, x.y.z.controller, x.y.z.dao" /> 

Обратите внимание, ваш ресурс дополнительный-context.xml объявлено как внешние и у вас есть возможность изменить его без восстановления войны вообще.

@ImportResource будет обработан после объявления профиля «Пользовательский профиль» как активного. Это безопасный способ запуска приложения с «конфигурацией по умолчанию» без какого-либо файла «дополнительного-контекста.xml» на диске.

+0

Ах ура! Но, для моего случая, оказывается, что проблема немного вернулась. Для «общей» установки я хочу, чтобы в ней не было дополнительного файла конфигурации. Если я делаю это файлом, который не существует, или пустой строкой, он жалуется, что FileNotFound и война не запускаются. Поэтому единственное, что я могу придумать, это иметь фиктивный xml-файл, который не имеет ничего в нем для стандартной установки. Для этого, возможно, мне нужно использовать какую-то переменную env, так что мое значение ImportResource может быть «classpath: $ {ENV_VAR} spring-context.xml». Если ENV_VAR не установлен, по умолчанию используется фиктивный spring-context.xml. мысли? – crowmagnumb

+0

@crowmagnumb вы можете объявить свою конфигурацию как часть настраиваемого профиля, тогда импорт не будет запускаться при запуске «пакета по умолчанию» таким образом. После активации требуется профиль через стандартную Spring spring.profiles.active ваша пользовательская конфигурация будет загружена без каких-либо проблем. – ivanenok

1

Вы пробовали это:

@SpringBootApplication(scanBasePackages={"path1", "path2"}) 

Надеется, что это помогает :)

Смежные вопросы