SpringBoot と Kotlin と Vue.js を組み合わせたサンプル
このアプリは、Google の OpenID Connect でログインします。 このサイト で設定してください。
承認済みのリダイレクト URI には http://localhost:8089/login/oauth2/code/google
を指定します。
その後、以下の環境変数の設定をしてください。
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_GOOGLE_CLIENT_ID
- クライアントID
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_GOOGLE_CLIENT_SECRET
- クライアントシークレット
FlywayTest を使用してます。
- JdbcTaskRepositoryTest
- 実際に RDBMS(H2) へアクセスしてテストします
Mockito-Kotlin を使用してます。
- CreateTaskUseCaseImplTest
- Repository の呼び出しがありますが、Mock を使用するので RDBMS へアクセスしません
- CreateTaskApiControllerTest
- UseCase の呼び出しがありますが、Mock を使用するので RDBMS へアクセスしません
- テストできるのはメソッド呼び出し以降です。
@Valid
の validate 等はこのテストではできません - Spring Security を使用して CSRF 対策をしているので、リクエスト時に
with(SecurityMockMvcRequestPostProcessors.csrf())
を指定します
- CreateTaskApiIntegrationTest
@SpringBootTest
を使用することで、本物の Bean を Injection して実行します- API は Spring Security を off にし、MockMvc を使用して IntegrationTest を実施しています
- TestRestTemplate は使用していません
push する前に実施することを想定
$ ./gradlew formatAndKtlint
CI 回す時にチェックする(エラーがある場合、CI が通らない)
$ ./gradlew ktlint
初回だけ実行してください
$ cd src/main/resources
$ cp _sample_application-personal.properties application-personal.properties
コピーした application-personal.properties
の情報(ex. RDBMS の接続先)を変更してください
起動は以下のコマンドを使用します
$ ./gradlew -is bootRun -Ppersonal
以下のような情報が出るまで待ってください(Started VssApplicationKt)
2019/04/30 09:25:39.384 [main] INFO net.jp.vss.sample.VssApplicationKt:61 - Started VssApplicationKt in 2.719 seconds (JVM running for 3.165)
起動した後、以下のコマンドを叩いてレスポンスがくれば起動成功です。
$ curl -H 'Content-Type:application/json' http://localhost:8089/api/health
It's work!
https://github.com/domaframework/kotlin-sample の設定を行ってください
AWS_ACCESS_KEY_ID
- ECR の接続に必要
AWS_SECRET_ACCESS_KEY
- ECR の接続に必要
AWS_DEFAULT_REGION
- ECR の接続に必要
ECR_ENDPOINT
- e.g.
<ACCOUNT-ID>.dkr.ecr.ap-northeast-1.amazonaws.com
- e.g.
REPOSITORY_NAME
- リポジトリ名
${ECR_ENDPOINT}/${REPOSITORY_NAME}
となるように設定します
- feature ブランチの build 時には docker image を作成しない
- feature で始まる必要があります
- develop ブランチの build 時に docker image を作成する
- tag は
${REPOSITORY_NAME}:${CIRCLE_BUILD_NUM}
- tag は
- master ブランチの build 時に docker image を作成する
- tag は
${REPOSITORY_NAME}:${CIRCLE_BUILD_NUM}
- tag は
- git の tag を打った時に docker image を作成する
- tag は
${REPOSITORY_NAME}:${CIRCLE_TAG}
- V で始まる必要があります
- tag は
$ heroku login
$ heroku container:login
$ heroku create
アプリの name を保持しておいてください ex. radiant-brook-99999
$ heroku addons:create heroku-postgresql:hobby-dev -a ${アプリのname}
コンソールから
- Host
- Database
- User
- Port
- Password
がわかるので、
Heroku 上の管理コンソールから以下の環境変数を設定します。
- SPRING_DATASOURCE_URL
- jdbc:postgresql://{Hostの値}:{Portの値}/{Databaseの値}
- SPRING_DATASOURCE_USERNAME
- User の値
- SPRING_DATASOURCE_PASSWORD
- Password の値
- SPRING_DATASOURCE_DRIVER_CLASS_NAME
- org.postgresql.Driver
Google の OpenID Connect の設定も行い、環境変数として設定します。
- SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_GOOGLE_CLIENT_ID
- Gooele の OpenID Connect のクライアントID
- SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_GOOGLE_CLIENT_SECRET
- Gooele の OpenID Connect のクライアントシークレット
- 承認済みのリダイレクト URI には
https://{アプリのURL}/login/oauth2/code/google
を指定します。
$ ./gradlew build // build して jar ファイルを更新します
$ heroku container:push web
$ heroku container:release web
https://{アプリのURL} にアクセスします。