2017-05-01 5 views
1

私は、springを使ってコンテキストを設定するJAXアプリケーションを持っています。applicationContext.xmlを省略できるようにSpringを設定する方法

私はこれに対処するためにAppConfigをセットアップしました...そうです。

@Configuration 
@ComponentScan("com.whatever") 
public class AppConfig {... //etc 

ただし、アプリケーションがapplicationContext.xmlを探しているのでエラーが発生します。

org.springframework.beans.factory.BeanDefinitionStoreException: 
IOException parsing XML document from class path resource [applicationContext.xml]; 

私はweb.xmlファイルで何かをしなければならないと信じています...しかし、私はそれを理解できません。私のweb.xmlです

<web-app version="3.1" xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_1.xsd"> 

<listener> 
    <listener-class>com.whatever.etc.ApplicationListener</listener-class> 
</listener> 

<!-- Application --> 
<servlet> 
    <servlet-name>Jersey Web Application</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value> 
      io.swagger.jaxrs.listing, 
      com.shutterstock.media.api 
     </param-value> 
    </init-param> 
    <init-param> 
     <param-name>jersey.config.server.provider.scanning.recursive</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <init-param> 
     <param-name>javax.ws.rs.Application</param-name> 
     <param-value>com.whatever.etc.MainClass</param-value> 
    </init-param> 
    <init-param> 
     <param-name>dirAllowed</param-name> 
     <param-value>false</param-value> 
    </init-param> 
    <init-param> 
     <!-- used to overwrite default 4xx state pages --> 
     <param-name>jersey.config.server.response.setStatusOverSendError</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    <async-supported>true</async-supported> 
</servlet> 

<servlet-mapping> 
    <servlet-name>Jersey Web Application</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

<!-- Swagger --> 
<servlet> 
    <servlet-name>Jersey Swagger</servlet-name> 
    <servlet-class>io.swagger.jersey.config.JerseyJaxrsConfig</servlet-class> 
    <load-on-startup>2</load-on-startup> 
</servlet> 

</web-app> 

答えて

1

JerseyがSpringと統合するためのデフォルトの方法は、このapplicationContext.xmlファイルを探すことなので、エラーが発生しています。あなたは、XMLレスに行きたい場合は、あなたが

createWebAplicationContext(SpringAnnotationConfig.class) 

を参照してください。この例ではWebApplicationInitializer

@Order(1) 
public class SpringWebContainerInitializer implements WebApplicationInitializer { 

    @Override 
    public void onStartup(ServletContext servletContext) throws ServletException { 
     registerContextLoaderListener(servletContext); 

     // Set the Jersey used property so it won't load a ContextLoaderListener 
     // see bug report https://java.net/jira/browse/JERSEY-2038 
     servletContext.setInitParameter("contextConfigLocation", ""); 
    } 

    private void registerContextLoaderListener(ServletContext servletContext) { 
     WebApplicationContext webContext; 
     webContext = createWebAplicationContext(SpringAnnotationConfig.class); 
     servletContext.addListener(new ContextLoaderListener(webContext)); 
    } 

    public WebApplicationContext createWebAplicationContext(Class... configClasses) { 
     AnnotationConfigWebApplicationContext context; 
     context = new AnnotationConfigWebApplicationContext(); 
     context.register(configClasses); 
     return context; 
    } 
} 

、とのプログラムで春を設定する必要がちょうどそこにあなたのAppConfigを使用しています。

ここで行っているのは、Springのコンテキストを自分でロードすることです.Jerseyがそれを探すと、それを見つけてコンテキスト自体を読み込もうとしません(そうでなければ、applicationContext.xmlファイル)。

も参照してください:このコメントのため

1

私が与えることができる最高のアドバイスは、あなたが提供するすばらしい機能をすべて利用するためにプロジェクトをスプリングブートに完全に変えることです。

あなたは完全にあなたのプロジェクトからすべてのXMLを削除し、次の手順で行う必要があります

TL; DR

スプリングinitializr(Spring initializr)を使用している春の起動と同時に起動する簡単な方法をして移行を開始新しいプロジェクトへのあなたのコード。既存のプロジェクトに春ブーツに移行する手順を開始

説明:

Maven依存

次の依存関係を追加して、他のすべての関連の春の依存関係を削除。一般的に他の依存関係が必要な場合は、最初にバネ起動スターターがあるかどうかを確認してください。 (また、購入時の梱包材は、jarであることを確認してくださいあなたがwarをしたい場合は、このリンクに従う必要があります。convert to war

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.5.3.RELEASE</version> 
    <relativePath/> <!-- lookup parent from repository --> 
</parent> 

<dependencies> 
    <!-- Spring Boot --> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-jersey</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-tomcat</artifactId> 
     <scope>provided</scope> 
    </dependency> 
    <!-- Test --> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 
</dependencies> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
</build> 

春ブートアプリケーション

を、以下のようになります@SpringBootApplicationと注釈付きクラスを作成します。あなたの基本パッケージ。この時点からのみ、このパッケージのサブパッケージで作成したクラスに自動的にコンポーネントのすべてをキャッチすることができ、スプリングので:

@SpringBootApplication 
public class FooApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(FooApplication .class, args); 
    } 

} 

Javaの設定

を、今あなたが簡単たとえばconfigというパッケージを追加することができますあなたの基本パッケージの下に、@Configuration注釈付きBeanをあなたのカスタム設定で追加します。あなたはまだ持っていない場合

application.properites/YML

は、アプリケーションを追加します。最低でも次のように構成されたsrc/main.resourcesにプロパティ/ YML(複数のプロパティは、ここで見つけることができます:spring boot common properties

  • 地図ジャージサーブレットエンドポイント追加することによって:

    spring.jersey.application-path=/

ジャージー設定をジャージプロバイダを、カスタムjava構成クラス(ResourceConfig)に登録する必要があります。

春のブーツはあなたのためのサーブレットを作成するの面倒を見るよう
@Configuration 
public class JerseyConfiguration extends ResourceConfig { 

    public JerseyConfiguration() { 
     register(FooController.class); 
     register(OtherController.class); 
     ... 
    } 

} 

重要事項

この変換を行った後、あなたはもうweb.xmlを必要としません。あなたはpom.xml以外のすべてのXMLをあなたのプロジェクトから削除し、すべてをjavaに変換する必要があります。 @ImportResourceを使用してXML構成と共存できますが、お勧めしません。

今すぐmavenでプロジェクトを実行するには、コマンド:spring-boot:runでmaven buildを使用してください。あなたはシステムによって提供されるすべての静的ファイルを持っている場合は

src/main/resources/static(ここでは詳細:Static Content)にsrc/main/webappからそれらを移動

このすべては、あなたの春のブーツを始める必要があると最高保ちながら、あなたがapplicationContext.xmlを削除することができます春のブーツの実践。あなたはより簡単なやり方でそれをやることができますが、長期的にはより良いサービスを提供すると思います。

+0

感謝を。私はBootに集中するつもりです。 – Nicholas

関連する問題