コンテンツにスキップ

web プロジェクトの設定⚓︎

web プロジェクトで必要な設定を解説します。

依存ライブラリの設定⚓︎

web プロジェクトで利用を推奨するライブラリは以下の通りです。

  • spring-boot-starter-web:Spring MVC を使用して Web アプリケーションを構築するためのスターター

  • h2:テストやローカル実行で利用する組み込みの H2 データベース

  • springdoc-openapi-starter-webmvc-ui:Spring Web MVC アプリケーション向けの、 OpenAPI 形式の API ドキュメントを生成するためのライブラリ

  • spring-boot-starter-actuator: ヘルスチェックを含めたアプリケーション監視・管理機能を構築するためのスターター

  • spring-boot-starter-log4j2: Spring Boot アプリケーションで Apache Log4j 2 (以降 log4j2 )を使用するためのスターター

  • spring-boot-starter-test:Spring Boot アプリケーションをテストするためのスターター

上記のライブラリを依存ライブラリとして、 以下のように build.gradledependencies ブロックに追加します。

web/build.gradle
1
2
3
4
5
6
7
8
dependencies {
  implementation 'org.springframework.boot:spring-boot-starter-web'
  implementation 'com.h2database:h2:x.x.x'
  implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:x.x.x'
  implementation 'org.springframework.boot:spring-boot-starter-actuator'
  implementation 'org.springframework.boot:spring-boot-starter-log4j2'
  testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
各依存ライブラリのバージョンの参照先

依存プロジェクトの設定⚓︎

web プロジェクトは application-core 、 infrastructure 、 system-common を参照しています。 そのため、 build.gradle で以下のように他のプロジェクトを依存関係に含めます。

web/build.gradle
1
2
3
4
5
dependencies {
  implementation project(':application-core')
  implementation project(':infrastructure')
  implementation project(':system-common')
}

Spring Boot の設定⚓︎

web プロジェクトに関する Spring Boot のプロパティ等を設定します。 web プロジェクトの src/main/resource 以下に application.properties もしくは application.yaml ファイルを作成して行います。 設定できる項目については、以下を参照してください。

設定項目は多岐に渡るため、一般的に設定する項目について例示します。

  • データソース
    • spring.datasource.hikari.driver-class-name: JDBC ドライバーの完全修飾名
    • spring.datasource.hikari.url:データベースの JDBC URL
    • spring.datasource.hikari.username:データベースのログインユーザー名
    • spring.datasource.hikari.password:データベースのログインパスワード
  • データベース初期化設定
    • spring.sql.init.mode:データベースの初期化有無
  • ロギング
    • logging.xxx でロギングの各種設定が可能
  • MyBatis の設定
    • mybatis.configuration.xxx で MyBatis の設定を記述可能
  • ヘルスチェック機能を含む Spring Boot Actuator に関する設定
    • management.endpoints.web.base-path: エンドポイントパスのカスタマイズ
    • management.endpoint.health.group.xxx.include: さまざまなサーバーの監視目的に合わせたヘルスチェックのプローブを作成可能
application.properties の設定例
開発環境での設定例( H2 Database を使用する場合)
1
2
3
4
5
6
7
8
9
spring.datasource.hikari.driver-class-name=org.h2.Driver
spring.datasource.hikari.url=jdbc:h2:mem:データベースの名前
spring.datasource.hikari.username=データベースのログインユーザー名
spring.datasource.hikari.password=データベースのログインパスワード
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
spring.h2.console.settings.web-allow-others=true
spring.sql.init.mode=embedded
logging.level.web=DEBUG
本番環境での設定例( PostgreSQL を使用する場合)
1
2
3
4
5
spring.datasource.hikari.driver-class-name=org.postgresql.Driver
spring.datasource.hikari.url=jdbc:postgresql://localhost:5432/データベースの名前
spring.datasource.hikari.username=データベースのログインユーザー名
spring.datasource.hikari.password=データベースのログインパスワード
spring.sql.init.mode=never

ロギングライブラリの除外設定⚓︎

依存関係に記載している org.springframework.boot:spring-boot-starter-web ライブラリは、デフォルトで Logback 用のライブラリである org.springframework.boot:spring-boot-starter-logging が推移的依存で追加されます。

AlesInfiny Maia OSS Edition では、ロギングライブラリとして log4j2 を使用します。 そのため、以下のようにデフォルトのロギングライブラリを依存関係から除外する設定を記述します。

spring-boot-starter-logging の除外設定
1
2
3
4
5
configurations {
 all {
  exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
 }
}

ログの設定⚓︎

src/main/resourcelog4j2.xml ファイルを配置しログの設定を記述します。 以下は、ログの設定例です。

log4j2.xml
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="error">

  <Appenders>
    <Console name="console" Target="SYSTEM_OUT">
      <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %c %-5p %pid %t %m%n" />
    </Console>

    <Console name="application.log.appender" Target="SYSTEM_OUT">
        <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p %pid %t %m%n"/>
    </Console>
  </Appenders>

  <Loggers>
    <Logger name="application.log" level="debug" additivity="false">
        <AppenderRef ref="application.log.appender" />
    </Logger>

    <Root level="info">
        <AppenderRef ref="console" />
    </Root>
  </Loggers>

</Configuration>

log4j2.xml のタグの構成要素は以下の通りです。

  • Appenders

    ログの出力先を指定します。 ログイベントをどのリソース(コンソール、ファイル、データベースなど)に送信するかを決定します。

  • Loggers

    ログのエントリーポイントを指定します。 この設定では、どのレベルのメッセージをログに記録するかや、 Appenders のどの要素にメッセージを送信するかなどを指定します。

その他の詳細な設定については、公式ページ を確認してください。

OpenAPI 仕様書の出力設定⚓︎

OpenAPI 仕様書のファイルがビルド時に出力されるようプロジェクトファイルを設定します。 以下に、 application.propertiesbuild.gradle への設定内容を例示します。 SpringDoc OpenAPI Gradle Plugin のバージョンは こちら を参照してください。

web/src/main/resource/application.properties
1
2
# springdoc-openapi用のURLを指定
springdoc.api-docs.path=/api-docs
web/build.gradle
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
plugins {
  // OpenAPI のプラグインを追加する。
  id 'org.springdoc.openapi-gradle-plugin' version 'x.x.x'
}

// OpenAPI 仕様書出力の作業ディレクトリを指定する。
afterEvaluate {
  tasks.named("forkedSpringBootRun") {
  workingDir("$rootDir/api-docs")
  }
}
// OpenAPI 仕様書の出力先を指定する。
openApi {
  apiDocsUrl.set("http://localhost:8080/api-docs")
  outputDir.set(file("$rootDir/api-docs"))
  outputFileName.set("api-specification.json")
}
// ビルド時に OpenAPI 仕様書の出力を行うよう設定する。
build.dependsOn("generateOpenApiDocs")

ここまでを実行した後に、適切にビルドが実行できるかを確認します。 ターミナルを用いてルートプロジェクト直下で以下を実行してください。

web プロジェクトのビルド
1
./gradlew web:build
ここまでの手順を実行した際の web/build.gradle の例
web/build.gradle
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
plugins {
  id 'java'
  id 'org.springframework.boot' version 'x.x.x'
  id 'io.spring.dependency-management' version 'x.x.x'
  // OpenAPI のプラグインを追加する。
  id 'org.springdoc.openapi-gradle-plugin' version 'x.x.x'
}

group = 'プロジェクトのグループ名'
version = 'x.x.x-SNAPSHOT'

java {
  toolchain {
    languageVersion = JavaLanguageVersion.of(x)
  }
}

repositories {
  mavenCentral()
}

dependencies {
  implementation 'org.springframework.boot:spring-boot-starter-web'
  implementation 'com.h2database:h2:x.x.x'
  implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:x.x.x'
  implementation 'org.springframework.boot:spring-boot-starter-actuator'
  implementation 'org.springframework.boot:spring-boot-starter-log4j2'
  testImplementation 'org.springframework.boot:spring-boot-starter-test'
  implementation project(':application-core')
  implementation project(':infrastructure')
  implementation project(':system-common')
  // その他、プロジェクトに必要な依存ライブラリは任意で追加してください。
}

configurations {
  all {
    exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
  }
}


// OpenAPI 仕様書出力の作業ディレクトリを指定する。
afterEvaluate {
  tasks.named("forkedSpringBootRun") {
    workingDir("$rootDir/api-docs")
  }
}

// OpenAPI 仕様書の出力先を指定する。
openApi {
  apiDocsUrl.set("http://localhost:8080/api-docs")
  outputDir.set(file("$rootDir/api-docs"))
  outputFileName.set("api-specification.json")
}

// ビルド時に OpenAPI 仕様書の出力を行うよう設定する。
build.dependsOn("generateOpenApiDocs")

tasks.named('test') {
  useJUnitPlatform()
}

CORS (クロスオリジンリソース共有)環境の設定⚓︎

Web API を公開するオリジンと、呼び出し元となるクライアントスクリプトを公開するオリジンが異なる場合(クロスオリジン)の設定は、こちら を参照してください。

メッセージ読込に関する設定⚓︎

他サブプロジェクトで管理されているメッセージを読み込む場合の設定は、こちら を参照してください。

H2 Database をサーバーモードで起動する設定⚓︎

開発環境において、 H2 Database をサーバーモードで起動する設定方法を解説します。

本設定は、開発環境で使用するデータベースが H2 Database であり、同一のデータベースへ同時にアクセスするアプリケーションが存在する場合に行います。 同一のデータベースへ同時にアクセスするアプリケーションの例としては、サンプルアプリの Dressca のように、コンシューマー向けの EC サイトとその EC サイトで売られる商品を管理するアプリが挙げられます。

対象は H2 Database をサーバーモードで起動するクラスと、開発環境におけるアプリケーションの設定などを行う application-dev.properties です。以下がそれぞれの設定例です。

H2 Database をサーバーモードで起動するクラスの例

定義するクラスには、 @Component@Profile アノテーションを付与し、開発環境でのみ DI コンテナに Bean 登録されるように設定します。 クラスには H2 Database を起動する処理と停止する処理をそれぞれ実装します。 起動する処理は、アプリケーションが起動したタイミングで H2 Database を起動させるためにコンストラクタ内で行います。 停止する処理は、アプリケーションが停止したタイミングで、 H2 Database を停止させるために @PreDestroy アノテーションを付与したメソッド内で行います。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/**
 * 開発環境で H2 Database をサーバーモードで立ち上げるためのクラスです。
 */
@Component
@Profile("local")
public class H2ServerLauncher {

  private Server tcpServer;
  private final Logger apLog = LoggerFactory.getLogger(SystemPropertyConstants.APPLICATION_LOG_LOGGER);

  /**
   * {@link H2ServerLauncher} クラスのインスタンスを初期化し、 H2 Database をサーバーモードで起動します。
   */
  public H2ServerLauncher() {
    try {
      this.tcpServer = Server.createTcpServer("-tcpPort", "9092", "-tcpAllowOthers", "-ifNotExists").start();
    } catch (SQLException e) {
      apLog.info("H2 Database は既にサーバーモードで起動しています。");
    }
  }

  /**
   * インスタンスを破棄する際に H2 Database を停止します。
   */
  @PreDestroy
  public void stop() {
    if (this.tcpServer != null) {
      this.tcpServer.stop();
    }
  }
}
application-dev.properties の例
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
spring.datasource.hikari.driver-class-name=org.h2.Driver

# DBをサーバーモードで起動する場合の接続先情報
spring.datasource.hikari.jdbc-url=jdbc:h2:tcp://localhost:9092/mem:データベースの名前
# 起動した H2 Database にデータを流し込む設定
spring.sql.init.mode=always

spring.datasource.hikari.username=
spring.datasource.hikari.password=
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
spring.h2.console.settings.web-allow-others=true