4

サーバーでバッチジョブを実行する際に問題が発生しましたが、開発ワークステーションのEclipseからは正常に実行されます。

Rooを使用してSpring環境をセットアップし、エンティティを作成し、いくつかの作業を行うバッチを作成して、開発済みボックスで十分にテストしました。コンテキストを初期化して作業を行いますが、サーバーでバッチを実行すると、コンテキストが正しく初期化されません。コードは次のとおりです。

public class TestBatch {

    private static ApplicationContext context;


    @SuppressWarnings("unchecked")
    public static void main(final String[] args) {

            context = new ClassPathXmlApplicationContext("/META-INF/spring/applicationContext.xml");
            try {
                @SuppressWarnings("unused")
                TestBatch app = new TestBatch();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
    }

    public void TestBatch() { /** Do Something using the context **/ }

}

そして、ここにログと例外があります:

2010-02-16 11:54:16,072 [main] INFO  org.springframework.context.support.ClassPathXmlApplicationContext - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@6037fb1e: startup date [Tue Feb 16 11:54:16 CET 2010]; root of context hierarchy
Exception in thread "main" java.lang.ExceptionInInitializerError
    at org.springframework.context.support.AbstractRefreshableApplicationContext.createBeanFactory(AbstractRefreshableApplicationContext.java:194)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:127)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:458)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:388)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    at tld.mydomain.myproject.batch.TestBatch.main(TestBatch.java:51)
Caused by: java.lang.NullPointerException
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.<clinit>(DefaultListableBeanFactory.java:103)
    ... 7 more

何が起こっているのかについてのアイデアやヒントはありますか?クラスパスは$PROJECTHOME/ target / classesに設定されており、すべての依存関係は$ PROJECTHOME / target / libにあり、「export CLASSPATH = $ PROJECTHOME / target / classes; java -Djava.endorsed.dirs =$PROJECTHOME」を使用して実行します。 / target / lib tld.mydomain.myproject.batch.TestBatch "

私のセットアップに非常に間違っているように見えるものはありますか?これをEclipseから実行すると問題はありませんが、実行したいサーバーにデプロイして上記のように実行すると、この問題が発生します。Eclipseから実行されるため、構成ファイルは大丈夫だと思いますが、これを引き起こしている原因をデバッグするにはどうすればよいですか?おそらく、サーバーと開発ワークステーションの間にいくつかの構成エラーまたは不一致がありますか?または、これはファイルが見つからないという本当に奇妙な言い方ですか?もしそうなら、どうすれば正しいファイルが見つかることを確認できますか?

この問題に取り組む方法についてのあなたの提案を聞くのを本当に楽しみにしています。

乾杯

ニック

4

4 に答える 4

7

問題の原因に-Djava.endorsed.dirs=$PROJECTHOME/target/lib org.springframework.beans.factory.support.DefaultListableBeanFactoryは、次のコードが含まれています。

static {
    ClassLoader cl = DefaultListableBeanFactory.class.getClassLoader();
    try {
        javaxInjectProviderClass = cl.loadClass("javax.inject.Provider"); //Line 103
    }
    catch (ClassNotFoundException ex) {
        // JSR-330 API not available - Provider interface simply not supported then.
    }
}

クラスが。を介してロードされると戻るNullPointerExceptionため、が発生します。javadocから:getClassLoader()null-Djava.endorsed.dirs

一部の実装では、nullを使用してブートストラップクラスローダーを表す場合があります。

したがって、-classpath代わりに(すべてのjarを明示的に指定して)使用してください-Djava.endorsed.dirs

于 2010-02-16T12:31:28.737 に答える
2

スレッド「main」の例外java.lang.ExceptionInInitializerErrorは、ユーザーライブラリの追加中に発生します。HibernateSpringでも同じ問題に直面しました。そこで、ユーザーライブラリを削除して「 Spring 」と言ってから、手動でjarを追加すると完全に機能します。

于 2014-02-12T15:02:44.807 に答える
1

Eclipseの場合:

spring jarsasユーザーライブラリ(Say SpringLib)を使用している場合は、Springのユーザーライブラリがadded(or checked)システムライブラリ(ブートクラスパスに追加)であるかどうかを確認します。はいの場合remove、チェックマーク。`

于 2016-03-24T11:37:41.087 に答える
0

ユーザーライブラリではなく、参照ライブラリにjarを追加するだけです。それは私のために働いた!

于 2013-12-13T19:49:35.517 に答える