Вызов приложения на основе 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.

Другие вопросы по тегам