Вызов приложения на основе Spring из сценария оболочки вне контейнера
У меня есть приложение на базе Spring, использующее Hibernate, развернутое в Tomcat. Это прекрасно работает, когда выполняется внутри контейнера или вызывает сервлет, находящийся в Tomcat. Он читает все файлы конфигурации, такие как applicationContext.xml
и другие файлы гибернации. Но я должен выполнить основной метод Java из сценария оболочки вне среды Tomcat. Итак, я создал основной метод в файле WAR, который вызывает соответствующие методы. Но я понимаю applicationContext
является нулевым, когда он вызывается через скрипт.
ApplicationContext appCtx = ApplicationContextProvider.getApplicationContext();
Сценарий оболочки, как показано ниже
WAR_PATH="/usr/apache-tomcat-6.0.36/webapps/AdminTool/WEB-INF"
CLASSPATH=$WAR_PATH/classes
java -classpath $CLASSPATH:$WAR_PATH/lib/*: com.mycompany.controller.BatchController "$1"
Как я могу добиться, чтобы рабочий контекст Spring вызывался через скрипт?
Большое спасибо
2 ответа
Вы должны будете сообщить своему приложению, как инициализировать beanfactory
используя ApplicationContext. В зависимости от того, какую версию Spring вы используете. Если вы используете версию 2, обратитесь к документации
Создание пружинного контейнера в Spring 3 Документация
ApplicationContext context =
new ClassPathXmlApplicationContext(new String[] {"services.xml", "daos.xml"});
Допустим, у вас есть класс Main с методом main. Пометьте класс с помощью:
@org.springframework.context.annotation.Configuration
@ComponentScan(basePackages = {"com.your_base_package"})
@Component
В основном методе начните с:
ApplicationContext ctx = new AnnotationConfigApplicationContext(Controller.class);
ctx.getBean(Controller.class).invokeTransformationService(pipelineId);
Аннотация @Configuration будет обрабатывать все комментарии. @ComponentScan необходим, чтобы сообщить контейнеру Spring базовый пакет, в котором будут выполняться поиск компонентов. @Component делает этот класс компонентом, чтобы его можно было извлечь из ApplicationContext. Контейнер Spring будет использовать эти аннотации для поиска всех @Components, создания синглтона (по умолчанию singleton) и регистрации его в ApplicationContext.