Challenge Engineer Life !

エンジニア人生を楽しみたい!仕事や趣味で学んだ技術的なことを書いていくブログです。

Spring BootのAutoConfigureには実はSendGridが含まれている!

この記事は「SendGrid Advent Calendar 2016」の5日目の記事です。
昨日は @ayakomuro さんの「First time using SendGrid」でした。
明日は公式ブログさんですw

Spring Bootの勢い

私は仕事で長らくJava EEを使ってきたのですが、もちろん、常にSpring Frameworkの存在は気になっていました。特にSpring Bootが出て以降、周囲で良い評判を耳にする機会がさらに増え、浮気心が沸いてます。そういった中、先月「Spring Day 2016」に参加したのですが、人の多さやイベントの盛り上がり方、多くの有名企業が発表するセッションなどを目の当たりにして「うぉー」ってなりました(^^;

そんなわけで、最近、改めてコツコツとSpring Bootを触り始めています。ちなみに私みたいなSpring Boot初心者は、最初に以下の本を読むのが良いです。色々と手を動かしながら学べます。薄いけど内容濃くて、持ち運び便利なのも好きな所です。

ちなみに自分はこちらも買ってコツコツ読んでいる所です(^^;

Spring徹底入門 Spring FrameworkによるJavaアプリケーション開発
株式会社NTTデータ
翔泳社
売り上げランキング: 12,616

Spring Boot with NetBeans

自分はJava EEやってたこともあって、IDEはNetBeans派なのですが、以下のプラグイン

plugins.netbeans.org

を使うと

f:id:kikutaro777:20161204231555j:plain

f:id:kikutaro777:20161204231649j:plain

こんな感じでNetBeansからもSpring Initializrでプロジェクトの雛形作成することができて便利です。普段Java EEでNetBeans触ってる方は是非一度お試しを(^^;

SendGridのAutoConfigure

では本題へ。

Spring BootにはAutoConfigureというものがあってSpringが提供してる機能やその他ライブラリなどを簡単に使えるようになっているとのことです。AutoConfigureについては以下の情報がかなり詳しく、実際アノテーションを追っていきながら読んでみると非常に面白かったです。

qiita.com

上記解説の中にAutoConfigureの一覧がありますが、よくみると…

……

おぉ、今日のAdvent CalendarのテーマであるSendGridが!(わざとらしい

f:id:kikutaro777:20161205173837j:plain

GutHubだとここで確認できます。

f:id:kikutaro777:20161205180733j:plain

それにしても、眺めてみると有名なものがたくさん並んでいますね(^^;

f:id:kikutaro777:20161204224834j:plain

couchbase,flyway,mongoなどのDB関連や、freemarker,mustache,thymeleafなどのテンプレートエンジン、hazelcastやkafka,solrなどなど…これらと一緒に並んでいるのをみて、個人的には胸熱です。

Mandrill(MailChimp)などはないですしw

ということで、Spring Bootから簡単にSendGridを利用したメール送信をすることができます。@Beanなどが不要で、application.propertiesかapplication.ymlにAPI Keyを記述するだけで@AutoWiredにてDIされます。

application.properties

spring.sendgrid.apiKey = #SendGridで取得したAPI Keyを指定

または

application.yml

spring:
    sendgrid:
        apiKey : #SendGridで取得したAPI Keyを指定

依存性にSendGridから提供されているJavaライブラリを追加します。

<dependency>
    <groupId>com.sendgrid</groupId>
    <artifactId>sendgrid-java</artifactId>
    <version>3.1.0</version>
</dependency>

あとは、サンプルと合わせて以下のような感じに。今回はRest APIで「/send」を指定したらメールが飛ぶようなサンプルです。

package com.example;

import com.sendgrid.Content;
import com.sendgrid.Email;
import com.sendgrid.Mail;
import com.sendgrid.Method;
import com.sendgrid.Request;
import com.sendgrid.Response;
import com.sendgrid.SendGrid;
import java.io.IOException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SendGridController {
    
    @Autowired
    private SendGrid sendGrid;
    
    @GetMapping("send")
    public Response send() {
        Email from = new Email("test@example.com");
        String subject = "Hello World from the SendGrid Java Library!";
        Email to = new Email("test@example.com");
        Content content = new Content("text/plain", "Hello, Email!");
        Mail mail = new Mail(from, subject, to, content);

        Request request = new Request();
        Response ret = null;
        try {
            request.method = Method.POST;
            request.endpoint = "mail/send";
            request.body = mail.build();
            ret = sendGrid.api(request);
        } catch (IOException ex) {
            //TODO:例外処理
        }
        return ret;
    }
}

mainはテンプレのまま。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootSendGridApplication {

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

SendGridのアカウントを取得して、API Keyを発行していることを前提に書きましたが、Keyの発行自体は非常に簡単です。

APIキーの管理 - ドキュメント | SendGrid
APIキー認証でセキュリティを強化しよう | SendGridブログ

Spring Bootを使ったサービス開発で「メールサーバ構築めんどくさいなぁ」とか「気軽にメール送れるサービスないかなぁ」と考えている方は是非一度お試し頂きたいなーと思います(^^)

サービスを動かす環境としてCloud Foundryも手軽です!

SendGrid x Spring BootをPivotal Web Services(Cloud Foundry)で試す - BLOG.IK.AM
Pivotal Web ServicesからのSendGrid利用 | SendGridブログ

Happy Sending!

にほんブログ村 IT技術ブログへ
にほんブログ村 にほんブログ村 IT技術ブログ Javaへ
にほんブログ村