从容器外部的shell脚本调用基于Spring的应用程序

时间:2012-11-28 18:03:08

标签: java spring shell applicationcontext

我使用部署在Tomcat中的Hibernate的基于Spring的应用程序。当在容器中执行或调用驻留在Tomcat中的servlet时,这非常正常。它读取所有配置文件,如applicationContext.xml和其他hibernate文件。但是我必须从Tomcat环境之外的shell脚本执行Java main方法。 所以,我在WAR文件中创建了一个main方法,用于调用各自的方法。 但是当我通过脚本调用applicationContext时,我得到它。

ApplicationContext appCtx = ApplicationContextProvider.getApplicationContext();

shell脚本如下所示

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 个答案:

答案 0 :(得分:1)

您必须告诉应用程序如何使用ApplicationContext初始化beanfactory。取决于您使用的Spring版本。如果您使用的是版本2,请参阅documentation


在Spring 3 Documentation

中实例化弹簧容器
ApplicationContext context =
new ClassPathXmlApplicationContext(new String[] {"services.xml", "daos.xml"});

答案 1 :(得分:0)

假设你有一个名为Main的类,带有一个main方法。用以下标记该课程:

@org.springframework.context.annotation.Configuration
@ComponentScan(basePackages = {"com.your_base_package"})
@Component

在main方法中,从:

开始
 ApplicationContext ctx = new AnnotationConfigApplicationContext(Controller.class);
    ctx.getBean(Controller.class).invokeTransformationService(pipelineId);

@Configuration注释将处理所有注释。需要@ComponentScan来告诉Spring容器将搜索组件的基础包。 @Component使该类成为一个组件,以便可以从ApplicationContext中检索它。 Spring容器将使用这些注释来查找所有@Components,创建一个单例(默认为singleton)并使用ApplicationContext注册它。