2016-10-03 13 views
0

私は3つのjarファイルを持つプロジェクト構造を持っています。すべてが1つのクラスパスにロードされ、実行されます。私は春のコア、jpaと冬眠を使用しています。 @Services/@Autowiredは、エンティティとリポジトリ(すべてmysqlデータベース上)だけでなく、正常に動作しています。スタンドアロンのjarファイルでtomcatを使用しないスプリングブート

今、プロジェクトがネットワーク/インターネット経由でメッセージを送受信できるようにしたいと考えています。だから私は現在の構造を壊すことなくこれを達成する方法を人々に尋ねました。私は春のブーツは私のためのアーキテクチャであると言われました。なぜなら私はそれにウェブサーバー(風邪やグラスフィッシュ)を必要としないからです。

しかし、私は同じことを言うソースが見つからなかったのでこれが正しいかどうかはわかりません。そのため、自分で検証するために実装しようとしました。私は私のプロジェクトに行わ
重要な変更点は、(すべてのpom.xmlファイルと私のコンフィギュレーションクラスが)ここで見つけることができます:私が読んだものから、http://84.141.90.123:9910/

私は春ブーツ用@SpringBootApplication注釈を必要とします。これは、@Configuration,@ComponentScan,@EnableAutoConfiguration,@EnableWebMvcと等価です。
最初の2つはすでに私の構造に入っています。しかし、私は最後の二つのアノテーションを追加したとき、私は別のエラーを取得:私は@EnableAutoConfigurationを追加すると

  • 私は

    Caused by: java.lang.IllegalArgumentException: No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct. 
    
  • を取得し、私は@EnableWebMvcを追加すると、私は

    Caused by: java.lang.IllegalArgumentException: A ServletContext is required to configure default servlet handling 
    
を取得

私の悪い英語の暴言から、@EnableWebMvcというエラーがtと思われるアプリケーションにはWebサーバー(TomcatまたはGlassfish)が必要です。
メインステートメントが間違っているため、Webサーバーなしで春の起動を開始できません。

私は春にはxmlファイルやプロパティファイルを使用しないため(動作しませんでした)、spring、jpa、hibernateのJavaコードベースの設定のみに依存しています。したがって、助けを借りたチュートリアル/スレッドはごくわずかしかありません。ほとんどの場合、彼らはちょうどadd thi or add that to your xmlと言うが、私はそれらを持っていないので、それはお尻に少し痛みです。

また、私はaspectjでコンパイルするので、私はspringコンパイルの親を使用できません。メインクラスは私がプログラムしていない外側のjarファイルにあるので、メインクラス/メソッドを操作することもできません。

ので、コンクリート:

  1. それを包むウェブサーバなしのスタンドアロンのjar実行で春のブートアプリケーションできますか?
  2. 「はい」の場合、私は間違っていますか?依存関係、注釈、または設定が欠けていますか?
+1

1.はい、あなたはウェブアプリケーションを実行しようとしていますが、Webサーバーは実行されません。 '@ SpringBootApplication'が何であるかについてのあなたの知識は間違っています。それは '@ EnableWebMvc'を含んでいません。 '@ EnableWebMvc'は、自動的に設定され、特定のWeb関連クラスが検出された場合にのみ追加されます。 @ SpringBootApplication'を追加して、適切なMavenプラグインと依存関係があることを確認してください。サーバーが必要なエンドポイントを公開する場合、Springブートには組み込みのものが付属しているため、展開する必要はありません。私はそれがここでの主な誤解だと思う。 –

+0

申し訳ありませんが、私はあなたの答えを理解できないと思います。 @ SpringBootApplication'を追加するように教えてください。しかし、私が読んだことから、これをメインクラスに追加する必要があります。私がプログラムしていない別のjarファイルにあるので、そのメソッドを変更することはできません。あるいは、JpaConfigクラスに注釈を追加するだけでいいのですか?さらに、「エンドポイントを公開する」とはどういう意味ですか?春のブートは私が探しているかどうかのアーキテクチャですか?私の現在のjarプロジェクトからhttp GET/POST要求を送受信することは、私が達成しようとする唯一の目標です。 – christopher2007

+0

コンテナがない場合、どのようにGET/POSTリクエストを受け取ると思いますか?私はいくつかのドキュメントを読んで、Spring Bootが何で、何ができるのかについて基本的な理解を得ることをお勧めします。注釈を追加するだけでいいですが、Springアプリケーションをブートストラップするもの、つまりSpringApplicationが何も必要なくなります。 –

答えて

0

HTTP経由でメッセージを受信する(REST APIを実行する)場合は、Webサーバーが必要です。
HTTP経由でメッセージを送信する場合は、HTTPクライアントのみが必要です。

Spring-bootには埋め込みWebサーバー(デフォルトではtomcat)を実行するオプションがありますので、別のアプリケーションサーバーを実行する必要はありません。

ビルドで問題を解決するには、まずspring initializrを使用してプロジェクトを生成します。

必要な依存関係を選択することができます(下の拡張バージョンリンクを試してみてください)、適切な構造、ビルドファイル、および互換性のある依存関係を持つmaven/gradleプロジェクトをビルドします。

関連する問題