Spring Framework で開発した、稼働実績があるプロジェクトの構成をご紹介いたします。

バージョンは以下の通りです。

  • Spring Framework 4.0.x
  • Maven 3

ディレクトリ構成

Coreモジュール

1src/main/java
2 |- Entity
3 |   |- Helper and Extention
4 |- Enums
5 |- Exception
6 |- Common Class
7 |- Utility

Webモジュール

 1src/main/java
 2 |- Annotation
 3 |- Aspect
 4 |- Bean
 5 |   |- Request and Response Bean
 6 |   :
 7 |- Context
 8 |- Controller
 9 |- Exception
10 |- Service
11 |- Utility

※src/main/resourceは割愛

モジュール分割

それなりの規模になる場合は、モジュールを分割して1モジュールあたりを小さく維持するのがおすすめです。

今回coreとwebの2モジュールを用意し、webモジュールはcoreモジュールに依存する構成とします。

マルチモジュールとはいっても、通常のMavenプロジェクトを複数作成して依存性を定義する形です。

具体的に、coreモジュールをローカルやインハウスのMavenリポジトリにdeployしておき、webモジュールのpom.xmldependencyに、coreモジュールを追加します。

coreのpom.xml
1<groupId>net.atuweb.example</groupId>
2<artifactId>atuweb-example-core</artifactId>
3<packaging>jar</packaging>
4<version>develop-SNAPSHOT</version>

webのpom.xml

1<dependencies>
2    <dependency>
3        <groupId>net.atuweb.example</groupId>
4        <artifactId>atuweb-example-core</artifactId>
5         <version>develop-SNAPSHOT</version>
6    </dependency>
7

Mavenではマルチモジュール・プロジェクトをサポートしており、複数モジュールを一発でcompileすることもできりるようですが、こちらとは異なり、やっていることはもっとシンプルですね。

Coreモジュール

こちらを基底とし、構造体や共通クラスなどを定義するモジュールとします。 具体的には、以下のクラスを配置します。

  • ORM
  • Dao
  • Dto
  • Enum

デプロイが煩雑になったりミスを誘発しますので、こちらにロジックは一切書かないようにするほうが幸せになれる感じです。

dependencies

主にDB関係のライブラリを定義します。

Webモジュール

spring-webspring-webmvcを設定したメインモジュールです。 webアプリケーションの本体で、こちらにゴリゴリロジックやテストを書いていきます。

dependencies

Spring

  • spring-core
  • spring-context
  • spring-webmvc
  • spring-web
  • spring-test
  • spring-tx

その他

環境別の定義

環境によって相違があるMySQLやmemcachedなどのストレージアクセスはWebモジュールで定義します。

ファイル構成

 1src/main/resources
 2 |- common
 3 |    |- configuration-common.xml
 4 |    |- datasource-common.xml
 5 |    :
 6 |- local
 7 |    |- configuration.xml
 8 |    |- datasource.xml
 9 |    :
10 |- development
11 |    |- configuration.xml
12 |    |- datasource.xml
13 |    :
14

pom.xml

pom.xmlでprofileごとに参照するディレクトリを指定します。

 1<profiles>
 2    <profile>
 3        <id>local</id>
 4        <activation>
 5            <activeByDefault>true</activeByDefault>
 6        </activation>
 7        <build>
 8            <resources>
 9                <resource>
10                    <directory>src/main/resources/common</directory>
11                </resource>
12                <resource>
13                    <directory>src/main/resources/local</directory>
14                    <filtering>true</filtering>
15                </resource>
16            </resources>
1718        </build>
19    </profile>
20

mvn -P localとprofileを指定することで、定義したディレクトリ以下のファイルを固めて出力してくれます。

楽しい開発ライフを!

[Java]Spring Frameworkで1年開発したので主要なポイントをおさらいする
Java Spring Frameworkを1案件で使ってみて「使えるフレームワーク」だと判断しました。Springを勉強し「ここ知らなかったわー」「素敵だわー」という特徴をざっくりまとめました。Spring 4です。
atuweb 開発ブログ