どこよりも早い spring boot 1.2 解説 #渋谷java

Post on 12-Jul-2015

5.512 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

どこよりも早い Spring Boot 1.2 解説

第九回 #渋谷Java 2014-12-14 Toshiaki Maki (@making)

自己紹介

• @making

• http://blog.ik.am

•公私ともにSpringヘビーユーザー

•日本Javaユーザーグループ幹事

祝「はじめてのSpring Boot」出版

http://bit.ly/hajiboot

一昨日1.2.0リリース!

コンテンツ

•Spring Boot復習

•Spring Boot 1.2の新機能

•@makingのContribute

Spring Bootの復習

Spring Boot復習• Springを使って簡単にモダンなアプリケーションを開発するための仕組み

• AutoConfigure + 組み込みサーバーが特徴

<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.1.9.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-test</artifactId> <scope>test</scope> </dependency></dependencies><build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins></build><properties> <java.version>1.8</java.version></properties>

この設定を追加するだけ

package com.example;!import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;!@RestController@EnableAutoConfigurationpublic class App {! @RequestMapping("/") String home() { return "Hello World!"; }! public static void main(String[] args) { SpringApplication.run(App.class, args); }}

魔法のアノテーション

mainメソッドでアプリ実行

ログ

組込Tomcatが起動した

ログ

組込Tomcatが起動した

実行可能jarを作成

$ mvn package

jarを実行

$ java -jar target/jggug-helloworld-1.0.0-SNAPSHOT.jar

プロパティを変更して実行

$ java -jar target/jggug-helloworld-1.0.0-SNAPSHOT.jar --server.port=8888

--(プロパティ名)=(プロパティ値)

Spring Boot 1.2の新機能

1.2での主なアップデート• Spring 4.1対応

• @SpringBootApplication • Servlet 3.1対応

• JMS対応

• JTA対応

• JAX-RS(Jersey)対応

• Email送信対応

• 宣言的SSL対応https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-1.2-Release-Notes

等々

Spring 4.1対応•ベースが4.0から4.1へ

•spring-boot-starter-parentのversionを1.2系にするだけでアップデートされる

Spring 4.1の詳細はJSUGの資料でhttp://bit.ly/spring41

@SpringBootApplicationBefore

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

@SpringBootApplicationAfter

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

Servlet 3.1対応

• Servletのバージョンが3.0から3.1へ •組み込みサーバーのバージョンアップ

• Tomcat 8 • Jetty 9 • Undertow (New!!)

組み込みサーバー変更•ベースのServletバージョンが3.0から

3.1へ •組み込みサーバーもバージョンアップ

• Tomcat 8 • Jetty 9 • Undertow (New!!)

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-undertow</artifactId></dependency>

JMS対応• JMS関連のAutoConfigure追加

•組み込みHornetQ、ActiveMQサポート

•例えばspring-boot-starter-hornetqを依存関係に追加すれば自動設定

@SpringBootApplication@RestControllerpublic class App { @Autowired JmsTemplate jmsTemplate; @RequestMapping("/") void hello(@RequestParam String name) { Greeting greeting = new Greeting(name); jmsTemplate.convertAndSend("greetings", greeting); } public static void main(String[] args) { SpringApplication.run(App.class, args); }}

送信

@Componentpublic class GreetingMessageProcessor { @JmsListener(destination = "greetings") public void processGreet(Greeting greeting){ System.out.println("received " + greeting); }}

受信

JTA対応• JTA Transaction ManagerでグローバルトランザクションのAutoConfigure対応

• Atomikos • Bitronix • Java EEコンテナ上のもの

•例えばspring-boot-starter-jta-atomikosを依存関係に追加すれば自動設定

http://qiita.com/making@github/items/f7939fcdb5199bd4834e サンプル

JTA対応• JTA Transaction ManagerでグローバルトランザクションのAutoConfigure対応

• Atomikos • Bitronix • Java EEコンテナ上のもの

•例えばspring-boot-starter-jta-atomikosを依存関係に追加すれば自動設定

http://qiita.com/making@github/items/f7939fcdb5199bd4834e サンプル

本当に必要?

Jersey(JAX-RS)対応• Spring BootはSpring MVC専用機ではない!

• MVCフレームワークは入れ替え可能

• Jersey正式サポート!

Jersey(JAX-RS)対応<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> </exclusion> </exclusions></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jersey</artifactId></dependency>

Java標準でいけます@Named@Path("/")public class HelloEndpoint { @Inject HelloService helloService;! @GET public String hello(@QueryParam("name")String name){ return helloService.hello(name); }}

Jerseyを即始めたい人向け

$ mvn archetype:generate -B -DarchetypeGroupId=am.ik.archetype -DarchetypeArtifactId=spring-boot-jersey-blank-archetype -DarchetypeVersion=1.0.1 -DgroupId=com.example -DartifactId=hajiboot -Dversion=1.0.0-SNAPSHOT

Maven Archetype作りました http://bit.ly/hajiboot-jersey

Jerseyを即始めたい人向け

$ mvn archetype:generate -B -DarchetypeGroupId=am.ik.archetype -DarchetypeArtifactId=spring-boot-jersey-blank-archetype -DarchetypeVersion=1.0.1 -DgroupId=com.example -DartifactId=hajiboot -Dversion=1.0.0-SNAPSHOT

Maven Archetype作りました http://bit.ly/hajiboot-jersey

Jerseyを即始めたい人向け

$ mvn archetype:generate -B -DarchetypeGroupId=am.ik.archetype -DarchetypeArtifactId=spring-boot-jersey-blank-archetype -DarchetypeVersion=1.0.1 -DgroupId=com.example -DartifactId=hajiboot -Dversion=1.0.0-SNAPSHOT

Maven Archetype作りました http://bit.ly/hajiboot-jersey

$ mvn spring-boot:run$ mvn test

Jerseyを即始めたい人向け

$ mvn archetype:generate -B -DarchetypeGroupId=am.ik.archetype -DarchetypeArtifactId=spring-boot-jersey-blank-archetype -DarchetypeVersion=1.0.1 -DgroupId=com.example -DartifactId=hajiboot -Dversion=1.0.0-SNAPSHOT

Maven Archetype作りました http://bit.ly/hajiboot-jersey

$ mvn spring-boot:run$ mvn test

アプリケーション即実行

Jerseyを即始めたい人向け

$ mvn archetype:generate -B -DarchetypeGroupId=am.ik.archetype -DarchetypeArtifactId=spring-boot-jersey-blank-archetype -DarchetypeVersion=1.0.1 -DgroupId=com.example -DartifactId=hajiboot -Dversion=1.0.0-SNAPSHOT

Maven Archetype作りました http://bit.ly/hajiboot-jersey

$ mvn spring-boot:run$ mvn test

アプリケーション即実行

組み込みサーバーでE2Eテスト

Email送信サポート

• Email送信用のMailSenderのAutoConfigure

• spring-boot-starter-mailを依存関係に追加すれば自動設定

@SpringBootApplication@RestControllerpublic class App { @Autowired MailSender mailSender; @RequestMapping("/") void hello() { SimpleMailMessage mailMessage = new SimpleMailMessage(); // … mailSender.send(mailMessage); } public static void main(String[] args) { SpringApplication.run(App.class, args); }}

@SpringBootApplication@RestControllerpublic class App { @Autowired MailSender mailSender; @RequestMapping("/") void hello() { SimpleMailMessage mailMessage = new SimpleMailMessage(); // … mailSender.send(mailMessage); } public static void main(String[] args) { SpringApplication.run(App.class, args); }}

spring: mail: host: smtp.gmail.com port: 587 username: Gmailアカウント password: Gmailパスワード properties: mail.smtp: auth: true starttls.enable: true

宣言的SSL対応

$ keytool -genkeypair -alias mytestkey -keyalg RSA -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" -keypass changeme -keystore server.jks -storepass letmein

•設定ファイル(application.yml)に設定を書くだけで簡単SSL対応

server: port: 8443 ssl: key-store: server.jks key-store-password: letmein key-password: changeme

いつも通り起動$ mvn spring-boot:run… (略)2014-12-13 12:07:47.833 INFO --- [mple.App.main()] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8443/https2014-12-13 12:07:47.836 INFO --- [mple.App.main()] com.example.App : Started App in 5.322 seconds (JVM running for 10.02)

いつも通り起動$ mvn spring-boot:run… (略)2014-12-13 12:07:47.833 INFO --- [mple.App.main()] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8443/https2014-12-13 12:07:47.836 INFO --- [mple.App.main()] com.example.App : Started App in 5.322 seconds (JVM running for 10.02)

@makingのContribute

@makingのContribute(1/2)

@Bean@Order(Ordered.HIGHEST_PRECEDENCE)CharacterEncodingFilter characterEncodingFilter() { CharacterEncodingFilter filter = new CharacterEncodingFilter(); filter.setEncoding("UTF-8"); filter.setForceEncoding(true); return filter;}

No More CharacterEncodingFilter!!

@makingのContribute(1/2)

@Bean@Order(Ordered.HIGHEST_PRECEDENCE)CharacterEncodingFilter characterEncodingFilter() { CharacterEncodingFilter filter = new CharacterEncodingFilter(); filter.setEncoding("UTF-8"); filter.setForceEncoding(true); return filter;}

No More CharacterEncodingFilter!!

AutoConfigure対象に! (日本人歓喜!)

@makingのContribute(2/2)Spring Boot Actuatorで得られる環境情報

@makingのContribute(2/2)Spring Boot Actuatorで得られる環境情報

_人人人人人人_ > だだ漏れ < ‾Y^Y^Y^Y^Y‾

提案

endpoints: configprops: keys-to-sanitize: password,secret,key env: keys-to-sanitize: password,secret,key

Suffixか正規表現でサニタイズするパターンを指定できる

議論の末

endpoints.env.keys-to-sanitize=java.*

How to contribute

https://github.com/spring-projects/spring-boot/blob/master/CONTRIBUTING.adoc

CLA(Contributor License Agreement) に署名して、

Githubでissue/pull req!

まとめ• Spring 4.1対応

• @SpringBootApplication • Servlet 3.1対応

• JMS対応

• JTA対応

• JAX-RS(Jersey)対応

• Email送信対応

• 宣言的SSL対応 http://bit.ly/hajiboot

はじめよう Spring Boot!

top related