LoginSignup
15
18

More than 5 years have passed since last update.

SpringBootでチャットアプリを作る

Posted at

DynamoDB(Local)とwebsocketを軽く触ってみたので、今度はSpringBootでチャットアプリのサンプルを作ってみます。

環境


  • windows7
  • eclipse Luna
  • java8(1.8.0_25)
  • dynamodb_local_latest
  • spring-boot(1.2.2)

windows版DynamoDBLocalのインストールと起動確認


  1. http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Tools.DynamoDBLocal.html より「zip」版をダウンロードする
  2. 任意のフォルダで解凍する(私はC:¥直下にdynamodbフォルダを作成し、そこに解凍しました)
  3. コマンドプロンプトを起動し、上記フォルダに移動する
  4. 以下のコマンドを実行
java -Djava.library.path=.¥DynamoDBLocal_lib -jar DynamoDBLocal.jar

※ctrl+cで終了できます

テーブル構成


今回は以下のようなテーブル構成にします

chatテーブル

名称 構造 用途
room_id N(Numeric) HASH
commented_datetime S(Srting) RANGE
user_name S(String) - ユーザ名称
message S(String) - 文章
  1. 上記「room_id」「commented_datetime」はcreate tableを行うときに必要
  2. 「user_name」「message」はcreate table時には必要無いが、データを登録するときに使う

ソース


ソースはGitHubにありますので参考にしてください。
https://github.com/duke-gonorego/WebsocketChatSample
※これ以降DynamoDBLocalへの操作はソースを利用して説明します。

テーブルの作成、初期データ登録


ソース内のテストクラスを使ってテーブルを作成します

DynamoDBAPITest.java
@Ignore
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
public class DynamoDBAPITest {

※テスト実施前にIgnoreを外してください

作成します

DynamoDBAPITest.java
    @Test
    public void createTableTest() throws Exception {
        dynamoDBAPI.createTable();
    }

※上記メソッドのテスト実行をしてください。

テーブルが作成されたか確認します

DynamoDBAPITest.java
    @Test
    public void getTableInformationTest(){
        dynamoDBAPI.getTableInformation();
    }

※コンソールログにテーブル構成が出力されます

データ登録

DynamoDBAPITest.java
    @Test
    public void putTest() {

        for (int i = 0; i < 10; i++) {
            ChatItem chatItem = new ChatItem();
            chatItem.setUserName("test" + String.valueOf(i));
            chatItem.setMessage("hogehogehoge" + String.valueOf(i));
            dynamoDBAPI.put(chatItem);
        }
    }

データ確認

DynamoDBAPITest.java
    @Test
    public void getAllTest(){

        System.out.println(dynamoDBAPI.getAll());
    }

※データ登録が上手くいっていればコンソールログにselect結果が出力されます

SpringBoot起動


※その前に「DynamoDBAPITest.java」の@Ignoreを再度つけてください

  1. ~~~.jarを作成する
  2. 「Run As」⇒「Java Application」⇒「Appliation - com.websockettest」選択して起動

ブラウザで確認


  1. http://localhost:8000/login にアクセス
  2. user1/password1 を入力してログイン
  3. 事前にデータを登録している場合はデータが画面に表示されます
  4. 「connect」ボタンを押してからメッセージを入力し、sendmessageボタンをクリックします
  5. 入力したメッセージが表示されます(このメッセージはwebsocket経由でリクエストし、レスポンスされたメッセージです)
  6. 画面をリロードしても入力したメッセージが表示されます(このメッセージはDynamoDBLocalに先ほど登録されたメッセージを取得し、表示しています)

メモ


  • SpringSecurityを使った理由:ログインユーザのメッセージをユーザ名称とともにDynamoDBLocalに登録するとき、認証の為だけにDBを用意するのが面倒だったので。。
  • リクエストされたメッセージを受けるcontroller(MessageController)でSpringSecurityで認証されたユーザ名を取得する方法が不明だった。。(のでChatControllerで無理矢理thymeleafに渡すというお寒いやり方に。。)
  • とりあえずDynamoDBLocalにメッセージ保存/取得、websocketでメッセージのやりとりを確認したかっただけなので、それだけの実装しかしていません。。
15
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
18