Muranack.log

プログラミング、絵、ゲームの話やその他雑記

Maven+Springboot+TomcatでWebAPIがどうのこうの。

仕事で使うネタのメモ。

  1. eclipseでMaenプロジェクトを新規作成
  2. archtypeの選択は無視
  3. アーティファクトIDとグループIDにそれっぽい名前を入れて、パッケージ名を指定したら完了
  4. pom.xmlをこう(↓)する
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>mavenSpringBootApi</groupId>
  <artifactId>mavenSpringBootApi</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>mavenSpringBootApi Maven Webapp</name>
    <url>http://maven.apache.org</url>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.0.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
    </dependencies>

    <properties>
      <java.version>1.8</java.version>
    </properties>

    <build>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <configuration>
            <source>${java.version}</source>
            <target>${java.version}</target>
          </configuration>
        </plugin>
      </plugins>
      <finalName>mavenSpringBootApi</finalName>
    </build>
</project>
  1. プロジェクトのsrc/main/sourceにソースパッケージを追加  名前はその時のあれそれで。

  2. Mainメソッドを持つクラスを作る

package mvnsbWebApi.logic;

public class mvnapiMain {

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.builder.SpringApplicationBuilder;
    import org.springframework.boot.context.web.SpringBootServletInitializer;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;

    @SpringBootApplication
    @RestController
    public class App extends SpringBootServletInitializer {

        public static void main(String[] args) {
            SpringApplication.run(App.class, args);
        }

        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
            return application.sources(App.class);
        }

        @RequestMapping(value = "nagap", method = RequestMethod.GET)
        public String getSomething() {
            return "something";
        }

        @RequestMapping("/service")
        @ResponseBody
        public List<String> top() {
            List<String> list = new ArrayList<String>();
            list.add("巴御前");
            list.add("イシュタル");
            list.add("エミヤ");
            list.add("カラミティ・ジェーン");
            list.add("ナイチンゲール・サンタ");
            return list;
        }
    }
}
  1. pom.xml を右クリック >> 実行 >> Maven clean >> Maven install
  2. target ディレクトリに、つけた名前のwarファイルが作られてるはず
  3. ここでtomcatの出番。「TomcatMaven ビルド時に設定した Java のバージョンと同じであることが前提」らしいので、Java-1.8ならマーケットプレイスTomcat plugin9.1.2を拾ってインストール
    f:id:MuraGin:20191205015832p:plain
    market place tomcat plugin
  4. target ディレクトリ配下に .war ファイルを Tomcat インストールディレクトリ配下の webapp ディレクトリにコピー  Tomcat を起動すると、勝手に展開されてwar ファイルと同じフォルダが出来上がるらしい
  5. マーケットプレイスSTSを検索して、SpringTool Suiteをインストール
  6. lombok.jarをダウンロードしてダブルクリッコ
  7. eclipseの配置場所を指定してInstall
  8. lombok.jarは終わり
  9. Mainクラス実装
@SpringBootApplication
@RestController
@RequestMapping("/api")
public class mvnapiMain extends SpringBootServletInitializer {

    public static void main(String args[]) {
        SpringApplication.run(mvnapiMain.class, args);
    }
}
  1. Entityクラス実装
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
 
import lombok.Data;
 
@Entity
@Data
public class Whisky {
  @Id
  @GeneratedValue
  private Long id;
   
  @NotNull
  @Size(min = 1, max = 255)
  private String name;
   
  @NotNull
  @Min(0)
  private Long price;
}
  1. Respository実装
package com.sample.repository;
 
import com.sample.entity.Whisky;
import org.springframework.data.jpa.repository.JpaRepository;
 
public interface WhiskyRepository extends JpaRepository<Whisky, Long> {
  
}

1パラは型、2パラはプライマリキーの型

  1. Serviceクラス実装
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import com.sample.entity.Whisky;
import com.sample.repository.WhiskyRepository;
 
import java.util.List;
 
@Service
@Transactional
public class WhiskyService {
  @Autowired
  WhiskyRepository whiskyRepository;
   
  public List<Whisky> findAll() {
    return whiskyRepository.findAll(new Sort(Sort.Direction.ASC, "id"));
  }
   
  public Whisky save(Whisky whisky) {
    return whiskyRepository.save(whisky);
  }
   
  public void delete(Long id) {
    whiskyRepository.delete(id);
  }
   
  public Whisky find(Long id) {
        return whiskyRepository.findOne(id);
    }
}
  1. Controller実装 ↓の7 dev.classmethod.jp

  2. 実装が終わったら、実行→SpringBootアプリケーション で起動