Hadoop mapreduce ジョブを含む spring-batch でアプリケーション/テストを作成しています。
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;
メインメソッドから 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();
}
...
ティア、R