2

我在 Tomcat 中部署了一个使用 Hibernate 的基于 Spring 的应用程序。当在容器中执行或调用驻留在 Tomcat 中的 servlet 时,这非常有效。它读取所有配置文件,例如applicationContext.xml和其他休眠文件。但我必须从 Tomcat 环境之外的 shell 脚本执行 Java 主方法。因此,我在 WAR 文件中创建了一个调用相应方法的主方法。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 上下文工作?

非常感谢

4

2 回答 2

1

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


在 Spring 3文档中实例化一个 spring 容器

ApplicationContext context =
new ClassPathXmlApplicationContext(new String[] {"services.xml", "daos.xml"});
于 2012-11-28T18:10:43.047 回答
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,创建一个单例(默认为单例)并将其注册到 ApplicationContext。

于 2017-11-06T01:44:53.777 回答