Spring Boot 2.0에서 AWS DynamoDB에 어쨌든 빨리 연결하고 싶습니다.

1. 개요



제목대로 바쁜 사람을 위해
템플릿을 공유합니다.

github 저장소

할 일은 다음 세 가지입니다.
  • AWS 연결 정보 설정
  • DynamoDB에서 테이블 만들기
  • 빌드 및 실행

  • 2. 상세



    AWS 연결 정보 설정



    AWS CLI를 설치합니다.
    AWS CLI 설치 를 참고해 주세요.
    aws configure
    
  • 액세스 키
  • 비밀 액세스 키
  • 지역
  • 형식

  • 을 설정합니다.
    설정 파일은
  • ~/.aws(Linux)
  • C:\Users\사용자 이름 .aws(Windows)

  • 어느 쪽이든 만들어집니다.

    DynamoDB로 테이블 만들기



    관리 콘솔에서,
    테이블을 만듭니다.


  • 샘플에서는 테이블명은 「Table」
  • 샘플에서 기본 키는 'id'



  • 테이블이 생성되면 항목 이름을 볼 수 있습니다.
    (내용은 아직 비어 있습니다.)



    출처



    프로젝트는 다음 구성입니다.
    dynamo-sample
    │  .gitignore
    │  build.gradle
    │  gradlew
    │  gradlew.bat
    │  .gradle
    │  gradle
    │
    └─src
        └─main
            ├─java
            │  └─com
            │      └─example
            │          │  Application.java
            │          │  DynamoDBConfig.java
            │          │
            │          ├─model
            │          │      User.java
            │          │
            │          ├─repositories
            │          │      UserRepository.java
            │          │
            │          └─resource
            │                  UserController.java
            │
            └─resources
                └─config
                        application.yml
    

    종속 모듈 버전은 여기을 참조했습니다.

    build.gradle
    buildscript {
        ext {
            springBootVersion = '2.0.0.RELEASE'
        }
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        }
    }
    
    apply plugin: 'java'
    apply plugin: 'eclipse'
    apply plugin: 'org.springframework.boot'
    
    group = 'com.example'
    version = '0.0.1-SNAPSHOT'
    sourceCompatibility = 1.8
    
    repositories {
        mavenCentral()
    }
    
    
    dependencies {
        compile("org.springframework.boot:spring-boot-starter-web:${springBootVersion}")
        compile('org.springframework:spring-webmvc:5.0.4.RELEASE')
        compile('com.github.spring-data-dynamodb:spring-data-dynamodb:5.0.2')
        compile group: 'org.springframework.data', name: 'spring-data-releasetrain', version: 'Kay-SR1', ext: 'pom'
        compile group: 'com.google.guava', name: 'guava', version: 'r05'
    
    }
    

    application.yml은 리전에 따라 엔드포인트를 변경해야 합니다.

    application.yml
    amazon:
      dynamodb:
        endpoint: https://dynamodb.ap-northeast-1.amazonaws.com
      credential:
        profile: default
    

    DynamoDB와 연결하기 위한 관리자 클래스입니다.

    DynamoDBConfig.java
    package com.example;
    
    import org.socialsignin.spring.data.dynamodb.repository.config.EnableDynamoDBRepositories;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.util.StringUtils;
    
    import com.amazonaws.auth.AWSCredentials;
    import com.amazonaws.auth.profile.ProfileCredentialsProvider;
    import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
    import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;
    
    @Configuration
    @EnableDynamoDBRepositories(basePackages = "com.example.repositories")
    public class DynamoDBConfig {
        @Value("${amazon.dynamodb.endpoint}")
        private String amazonDynamoDBEndpoint;
    
        @Value("${amazon.credential.profile}")
        private String profile;
    
        @Bean
        public AmazonDynamoDB amazonDynamoDB() {
            AmazonDynamoDB amazonDynamoDB = new AmazonDynamoDBClient(amazonAWSCredentials());
            if (!StringUtils.isEmpty(amazonDynamoDBEndpoint)) {
                amazonDynamoDB.setEndpoint(amazonDynamoDBEndpoint);
            }
            return amazonDynamoDB;
        }
    
        @Bean
        public AWSCredentials amazonAWSCredentials() {
            return new ProfileCredentialsProvider(profile).getCredentials();
        }
    }
    

    일반적인 시작 클래스입니다.

    Application.java
    package com.example;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    
    }
    

    엔드포인트입니다.
    이번은 간단하게 유저명을 등록하는 것만의 내용으로 하고 있습니다.

    UserController.java
    package com.example.resource;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.example.model.User;
    import com.example.repositories.UserRepository;
    
    @RestController
    public class UserController {
    
        @Autowired
        private UserRepository userRepository;
    
        @GetMapping("/init")
        private void init() throws Exception {
            userRepository.save(new User("taro"));
        }
    
    }
    

    모델입니다.

    User.java
    package com.example.model;
    
    import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute;
    import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAutoGeneratedKey;
    import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey;
    import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable;
    
    @DynamoDBTable(tableName = "Table")
    public class User {
    
        private String id;
        private String name;
    
        public User() {
        }
    
        public User(String name) {
            this.name = name;
        }
    
        @DynamoDBHashKey
        @DynamoDBAutoGeneratedKey
        public String getId() {
            return id;
        }
    
        @DynamoDBAttribute
        public String getName() {
            return name;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
    }
    

    DynamoDB의 테이블 조작을 정의하는 추상 클래스입니다.

    UserRepository.java
    package com.example.repositories;
    
    import java.util.List;
    
    import org.socialsignin.spring.data.dynamodb.repository.EnableScan;
    import org.springframework.data.repository.CrudRepository;
    
    import com.example.model.User;
    
    @EnableScan
    public interface UserRepository extends CrudRepository<User, String> {
        List<User> findByName(String name);
    }
    

    빌드 및 실행



    위 리포지토리를 빌드하고
    실행하십시오.
    gradlew bootrun
    ./gradlew bootrun
    

    브라우저에서 다음에 액세스합니다.
    http://localhost:8080/init



    반환값이 없기 때문에 아무것도 나오지 않습니다.

    AWS 콘솔을 확인하면
    데이터가 등록되었음을 알 수 있습니다.



    3. 정리



    나는 의존 모듈의 버전에서 상당한 시간을 보냈다.
    템플릿 을 사용해 주셔서, 여러분 행복하게 해 주셨으면 합니다.
    코드의 지적도 주시면 다행입니다.

    좋은 웹페이지 즐겨찾기