我正在使用spring-batch编写一个应用程序/测试,其中包含hadoop mapreduce作业。
对于spring-batch容器,一切都很好:我在执行Unittests之前加载了Applicationcontext特定的配置。
(来自spring-data hadoop示例的代码)http://static.springsource.org/spring-hadoop/docs/current/reference/html/batch-wordcount.html
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/launch-context.xml")
public class WordCountWorkflowTest {
@Autowired
private ApplicationContext ctx;
当我需要从main方法加载Applicationcontext时,我发现了一个建议,可以通过以下方式进行:
public class Main {
public static void main(String[] arguments) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
}
}
现在我正在寻找一种从Hadoop Mapper类中启动Applicationcontext的方法。我的问题:类本身会注入bean。我想通常你会有另一个类或对象为你启动Applicationcontext。
以下方法似乎对我有用(但我不知道是否存在一些陷阱或更好的方法,例如带注释):
public class ToHBaseMapper extends
Mapper<LongWritable, Text, Text, IntWritable> {
private static final String[] CONFIGS = new String[] { "/mapReduce-context.xml" };
private static AbstractApplicationContext ctx;
// Executed when class is loaded
static {
ctx = new ClassPathXmlApplicationContext(CONFIGS);
ctx.registerShutdownHook();
}
...
TIA,R