将Spring Applicationcontext添加到类中(在我的例子中:Hadoop Mapper类)

时间:2012-09-07 04:06:17

标签: spring hadoop spring-data

我正在使用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

0 个答案:

没有答案