2016-12-19 8 views
0

JPAエンティティとリポジトリクラス(および関連するサービス)がうまく動作するSpring Boot RESTアプリケーションがあります。今週は、これらのクラスを毎週のCRONジョブやコマンドラインから実行される同様のワンタイムプロセスのような他の目的で再利用したいと考えています。Spring Boot RESTアプリケーションでクラスを再利用するには?

これを行うにはどうすればよいでしょうか?課題は、永続コンテキストのプロパティがapplication.propertiesに設定され、永続コンテキストがApplicationクラスが初期化されていない限り初期化されないことです。

これらのクラスをすべて別のプロジェクトに分けて、別の方法で永続コンテキストを定義することはできますが、エンティティやDAOメソッドによって何かが変更された場合、メンテナンスの頭痛になります。

私が本当に気に入っているのは、コマンドラインから、メインアプリケーションの代わりに別のクラスを実行して永続コンテキストを適切に初期化するようにSpringブートに指示する方法です。これを行う方法は?

[編集]それはCommandLineRunnerを実装@Componentを作成することによってこれを行うことが可能です:

は(Possible to use Spring Boot repositories from another main class?私は何の応答を得なかった同様の質問をしますか)?私はただ完全なRESTアプリケーションではなく、単純なワンタイムプロセスを実行したいだけです。

答えて

2

これを行うにはいくつかの方法があります。 複数のMainクラスを持ち、起動するアプリケーションをselect main classから選択することができますが、慎重でない場合は、ComponetScanの仕組みがわからない場合は両方のアプリケーションのロードが終了します。

別の方法として、Profilesを使用すると、春のアプリケーションを起動したときにプロファイルを設定してから、Tomcatを起動するWebプロファイルとそうでないコマンドラインプロファイルを設定できます。

私が取り組んでいるプロジェクトでは、データレイヤーを独自のSpring Contextを持つ完全に別のモジュール(同じgradleプロジェクト)として選択しました。データ層のスプリングコンテキストは、他のアプリケーションの親コンテキストとして、再利用可能なコンポーネントとして使用されます。これは、同じコード内に複数のアプリケーションを持つ代わりに、共有されたコードがはっきりとマークされていたかどうか、少し慎重な分離です。

+0

お返事ありがとうございます。私は複数のメインクラスのことを試しましたが、私は間違っているか、または永続コンテキストを適切に初期化しません。私はRESTアプリケーションからDAOレイヤーを分離したいのですが、もう一度、永続コンテキストが正しく機能するようにするのが面倒でした。これを行うには簡単な例がありますが、それでもRESTコントローラ/サービス層からアクセスできるようにしていますか? – Andrew

+0

私は最終的にこれをプロファイルで動作させることができましたが、あなたが記述するほど簡単ではありませんでした。私は別の答えとしてより詳細な説明を書くつもりです。しかし私は正しい方向で私を指摘してくれてありがとう、私はまだ別のSpringブートプロジェクトとして永続コンテキストを持つ方法が不思議です。 – Andrew

+0

@Klausデータレイヤーを完全に別個のモジュールと言うときは、独自のMainクラスを持っていますか?ファイル構造を共有してもよろしいですか?私は別々のDOとサービスモジュールを持つJava 6プロジェクトを持っています。私は春のブートを使用してそのような何かをするのに苦労している? – Kay

関連する問題