プライベートなコンテナイメージを Amazon Lightsailで使う

前提 ・ローカルにプライベートなDockerイメージが作成済であること ・AWS CLIがインストールされていること ・lightsailctl プラグインがインストールされていること 手順 IAMを作成する { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor…

AWS CLI & lightsailctl プラグインのインストール

AWS CLI のインストール docs.aws.amazon.com 下記のコマンドを実行してインストール C:\>msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi 確認 C:\>aws --version aws-cli/2.6.3 Python/3.9.11 Windows/10 exe/AMD64 prompt/off lightsailctl プ…

Springのテストで使用するアノテーション

Springのテストで使用するアノテーションを整理する。 @ContextConfiguration (org.springframework.test.context.ContextConfiguration) Spring Frameworkのテストで使用するアノテーション。 テストクラスと同じパッケージ上に存在する「テストクラス名-co…

Relaxed Bindingについて

Circuit Breakerについて調べていた時、サイトによって設定ファイル(application.yml)に定義するプロパティがキャメルケースだったり、ケバブケースだったりどちらが正しいんだろって疑問を持ってたんだけど、どっちも正しかった。 Relaxed Binding docs.s…

踏み台サーバを経由してSSH接続する

AWS

下記のサイトを参考にPublicなサブネットからPrivateなサブネットへSSH接続を行った。 qiita.com

Redisinsightに触る

RedisinsightはGUIでRedisを操作できるWebアプリケーション 操作はブラウザから行う セットアップ docker-compose.yml version: '3.8' services: redis: container_name: redis image: "redis:latest" ports: - "16379:6379" volumes: - "./redis/data:/data…

POST処理を非同期で実行する

FormでSubmitされたリクエストを非同期に切り替えるサンプル $(function () { $('#userForm').submit(function (event) { // HTMLでの送信をキャンセル event.preventDefault(); // 操作対象のフォーム要素を取得 var $form = $(this); $("#overlay").fadeIn…

SpringBootでホットデプロイ

SpringBootの開発用のdevtoolsモジュールを導入するとホットデプロイができるらしい。 build.gradle ~省略~ dependencies { developmentOnly 'org.springframework.boot:spring-boot-devtools' // hot deploy ~省略~ application.yml ~省略~ spring: d…

Advanced Encryption Standard (AES)

Advanced Encryption Standard (AES) Advanced Encryption Standard (AES) は、DESに代わる新しい標準暗号となる共通鍵暗号アルゴリズム。 DES(Data Encryption Standard)は56ビットの鍵長が短すぎて安全でない為、新たに鍵長は128ビット・192ビット・256…

@ConditionalOnExpressionを使う

@Scheduledでタスクを作成したけど、設定ファイルで起動する/しないを切り替えたい。 @ConditionalOnExpressionを利用すればできるらしい。 SleepTasks.java ~省略~ @Component @RequiredArgsConstructor @ConditionalOnExpression("${tasks.sleep-tasks.…

@PostConstructと@PreDestroyを使う

アプリ起動時と停止時に何かしらの処理を行いたい。 コンポーネントを用意して、メソッドに@PostConstructと@PreDestroyを付与すれば簡単にできるらしい。 ApplicationListner.java package com.example.demo; import javax.annotation.PostConstruct; impor…

SpringBootのキャッシングをRedisで使ってみる

例えば、DBから取得した結果を返却するというメソッドがあるとする。 このメソッドに@Cacheableを付与すると、検索結果をキャッシュに格納してくれて次回呼び出し時はキャッシュで保持しているデータを返却してくれる。 基本的にキャッシュにデータがある限…

Spring Sessionを使う

Spring Sessionを使ってHttpSessionをRedisで管理してみる セットアップ build.gradle dependenciesにspring-boot-starter-data-redisとspring-session-data-redisを追加する plugins { id 'org.springframework.boot' version '2.5.0' id 'io.spring.depend…

AWS SDK for Java でDynamoDBを操作する

build.gradle aws-java-sdk-dynamodb を追加 plugins { id 'org.springframework.boot' version '2.5.0' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibilit…

DynamoDBをローカル環境で使う

docker-composeでローカルにDynamoDBを利用できる環境を作る あと、dynamodb-adminも利用する セットアップ docker-compose.yml version: '3.8' services: dynamodb-local: container_name: dynamodb-local image: amazon/dynamodb-local:latest user: root …

Redisの環境を作る

docker-composeでRedisを利用できる環境を作る セットアップ docker-compose.yml version: '3.8' services: redis: container_name: redis image: "redis:latest" ports: - "16379:6379" volumes: - "./redis/data:/data" 実行 docker-compose up -d

Thymeleafをホットデプロイして使う

いちいちテンプレートを修正したらサーバを起動し直すのが面倒だったのでホットデプロイできるようにした セットアップ build.gradle springloaded をdependenciesに追加 plugins { id 'org.springframework.boot' version '2.5.0' id 'io.spring.dependency…

Thymeleafを使う

Thymeleafを使うため最もシンプルな構成で環境を準備する セットアップ build.gradle spring-boot-starter-thymeleaf をdependenciesに追加 plugins { id 'org.springframework.boot' version '2.5.0' id 'io.spring.dependency-management' version '1.0.11…

リクエストからUserAgentを取得する

リクエストからUserAgentを取得して各コントローラで持ちまわる共通的な処理を追加する。 取得部分はFilterではなく、HandlerInterceptorで行った。 FilterとInterceptorの違いは下記を参考にした。 https://meetup-jp.toast.com/698 /src/main/java/com/exa…

業務チェック処理を実装

リクエストパラメータの単項目/関連項目バリデーションとは別に業務的なチェック処理を追加して、エラーメッセージを返却するところまでを追加する /src/main/java/com/example/demo/domain/mapper/UsersMapper.java メールアドレスが重複するレコードが登…

バリデーションと共通例外処理

バリデーション処理の実装 1. アノテーションによるバリデーション処理の実装 2. 独自メッセージの使用 3. 独自バリデーター(単項目/関連項目)の作成 共通例外処理 1. @RestControllerAdviceを使って共通の例外ハンドラーを作成 /build.gradle spring-boo…

CRUD操作を行うREST APIを作成する

とりあえずバリデーションはなしでCURD操作に注力する build.gradle plugins { id 'org.springframework.boot' version '2.5.0' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } group = 'com.example' version = '0.0.1-SNAPSH…

Spring Bootの開発環境を作る

eclipseの準備 Eclipse マーケットプレースから下記のプラグインをインストール Spring Tool4(aka Spring Tool Suite 4) Gradle IDE Pack プロジェクトの作成 Spring Starter Projectからプロジェクトを作成 Type:Gradle Packaging:Jar Java Version:11 Lang…

MySQLの環境を作る

docker-composeでMySQLを利用できる環境を作る ※mysqlのイメージをそのまま利用するとWindowsでは下記の警告が発生し、my.cnfが読み込めなかった。この為、Dockerfile を介してパーミッションを変更する処理を追加した。 mysqld: [Warning] World-writable c…

Optionalについて

nullの可能性のあるオブジェクトのラッパー。NullPointerExceptionを発生させない為に導入された仕組み。 Optionalオブジェクトの生成 public static Optional of(T value) public static <T> Optional<T> of(T value) 指定された非null値を含むOptionalを返します</t></t>…

Streamの終端処理

void forEach(Consumer action) 要素を順に処理する ※forEachメソッドは並列ストリームでは順序を保証しない為、順序を保証したいならforEachOrderedメソッドを使うこと Stream.of("beckham", "zidane", "ronald").forEach(v -> System.out.println(v)); Opt…

関数型インタフェースとStream API

関数型インタフェースとStream APIの復習をしたのでメモ 関数型インタフェース インタフェース メソッド 説明 Function<T, R> R apply(T t) T型の引数を受け取ってR型の結果を戻す Consumer< T > void accept(T t) T型の引数を受け取って処理する(戻り値なし) Su</t,>…

vue-i18nにさわる

ロケールによってメッセージや項目名などの言語を切り替える仕組みですが、今回は単にVueテンプレートに埋め込む文字列を別ファイルに切り出したかったので使ってみます。 インストール yarn add vue-i18n@next 設定 src/main.ts import { createApp } from …

モジュールを使う

複数のモジュールを登録する方法 how to use modules in vuex4.0 · Issue #1833 · vuejs/vuex · GitHub src/store/index.ts import { store as authStore, key as authKey } from "@/store/AuthStore"; const stores = [ { store: authStore, key: authKey, …

Vuexにさわる

Vue3ではprovide/injectによる状態管理が推奨されているようなので使うつもりはなかったが、Global Before Guardsを使ったログイン状態によるページ制御をしようとした際にVueRouterでどう参照するのかわからなかったので使ってみる。 Vuex4になってTypeScri…