どこよりも早い Spring Boot 1.2 解説 #渋谷Java
-
Upload
toshiaki-maki -
Category
Technology
-
view
5.513 -
download
4
Transcript of どこよりも早い Spring Boot 1.2 解説 #渋谷Java
![Page 1: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/1.jpg)
どこよりも早い Spring Boot 1.2 解説
第九回 #渋谷Java 2014-12-14 Toshiaki Maki (@making)
![Page 4: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/4.jpg)
一昨日1.2.0リリース!
![Page 5: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/5.jpg)
コンテンツ
•Spring Boot復習
•Spring Boot 1.2の新機能
•@makingのContribute
![Page 6: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/6.jpg)
Spring Bootの復習
![Page 7: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/7.jpg)
Spring Boot復習• Springを使って簡単にモダンなアプリケーションを開発するための仕組み
• AutoConfigure + 組み込みサーバーが特徴
![Page 8: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/8.jpg)
<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>
この設定を追加するだけ
![Page 9: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/9.jpg)
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メソッドでアプリ実行
![Page 10: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/10.jpg)
ログ
組込Tomcatが起動した
![Page 11: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/11.jpg)
ログ
組込Tomcatが起動した
![Page 12: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/12.jpg)
実行可能jarを作成
$ mvn package
![Page 13: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/13.jpg)
jarを実行
$ java -jar target/jggug-helloworld-1.0.0-SNAPSHOT.jar
![Page 14: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/14.jpg)
プロパティを変更して実行
$ java -jar target/jggug-helloworld-1.0.0-SNAPSHOT.jar --server.port=8888
--(プロパティ名)=(プロパティ値)
![Page 15: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/15.jpg)
Spring Boot 1.2の新機能
![Page 16: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/16.jpg)
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
等々
![Page 17: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/17.jpg)
Spring 4.1対応•ベースが4.0から4.1へ
•spring-boot-starter-parentのversionを1.2系にするだけでアップデートされる
![Page 19: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/19.jpg)
@SpringBootApplicationBefore
@EnableAutoConfiguration@ComponentScan@Configurationpublic class App { public static void main(String[] args) { SpringApplication.run(App.class, args); }}
![Page 20: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/20.jpg)
@SpringBootApplicationAfter
@SpringBootApplicationpublic class App { public static void main(String[] args) { SpringApplication.run(App.class, args); }}
![Page 21: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/21.jpg)
Servlet 3.1対応
• Servletのバージョンが3.0から3.1へ •組み込みサーバーのバージョンアップ
• Tomcat 8 • Jetty 9 • Undertow (New!!)
![Page 22: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/22.jpg)
組み込みサーバー変更•ベースの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>
![Page 23: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/23.jpg)
JMS対応• JMS関連のAutoConfigure追加
•組み込みHornetQ、ActiveMQサポート
•例えばspring-boot-starter-hornetqを依存関係に追加すれば自動設定
![Page 24: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/24.jpg)
@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); }}
送信
![Page 25: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/25.jpg)
@Componentpublic class GreetingMessageProcessor { @JmsListener(destination = "greetings") public void processGreet(Greeting greeting){ System.out.println("received " + greeting); }}
受信
![Page 26: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/26.jpg)
JTA対応• JTA Transaction ManagerでグローバルトランザクションのAutoConfigure対応
• Atomikos • Bitronix • Java EEコンテナ上のもの
•例えばspring-boot-starter-jta-atomikosを依存関係に追加すれば自動設定
http://qiita.com/making@github/items/f7939fcdb5199bd4834e サンプル
![Page 27: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/27.jpg)
JTA対応• JTA Transaction ManagerでグローバルトランザクションのAutoConfigure対応
• Atomikos • Bitronix • Java EEコンテナ上のもの
•例えばspring-boot-starter-jta-atomikosを依存関係に追加すれば自動設定
http://qiita.com/making@github/items/f7939fcdb5199bd4834e サンプル
本当に必要?
![Page 28: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/28.jpg)
Jersey(JAX-RS)対応• Spring BootはSpring MVC専用機ではない!
• MVCフレームワークは入れ替え可能
• Jersey正式サポート!
![Page 29: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/29.jpg)
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>
![Page 30: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/30.jpg)
Java標準でいけます@Named@Path("/")public class HelloEndpoint { @Inject HelloService helloService;! @GET public String hello(@QueryParam("name")String name){ return helloService.hello(name); }}
![Page 31: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/31.jpg)
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
![Page 32: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/32.jpg)
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
![Page 33: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/33.jpg)
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
![Page 34: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/34.jpg)
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
アプリケーション即実行
![Page 35: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/35.jpg)
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テスト
![Page 36: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/36.jpg)
Email送信サポート
• Email送信用のMailSenderのAutoConfigure
• spring-boot-starter-mailを依存関係に追加すれば自動設定
![Page 37: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/37.jpg)
@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); }}
![Page 38: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/38.jpg)
@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
![Page 39: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/39.jpg)
宣言的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
![Page 40: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/40.jpg)
いつも通り起動$ 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)
![Page 41: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/41.jpg)
いつも通り起動$ 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)
![Page 42: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/42.jpg)
@makingのContribute
![Page 43: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/43.jpg)
@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!!
![Page 44: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/44.jpg)
@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対象に! (日本人歓喜!)
![Page 45: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/45.jpg)
@makingのContribute(2/2)Spring Boot Actuatorで得られる環境情報
![Page 46: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/46.jpg)
@makingのContribute(2/2)Spring Boot Actuatorで得られる環境情報
_人人人人人人_ > だだ漏れ < ‾Y^Y^Y^Y^Y‾
![Page 47: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/47.jpg)
提案
endpoints: configprops: keys-to-sanitize: password,secret,key env: keys-to-sanitize: password,secret,key
Suffixか正規表現でサニタイズするパターンを指定できる
![Page 48: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/48.jpg)
議論の末
![Page 49: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/49.jpg)
endpoints.env.keys-to-sanitize=java.*
![Page 50: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/50.jpg)
How to contribute
https://github.com/spring-projects/spring-boot/blob/master/CONTRIBUTING.adoc
CLA(Contributor License Agreement) に署名して、
Githubでissue/pull req!
![Page 51: どこよりも早い Spring Boot 1.2 解説 #渋谷Java](https://reader030.fdocuments.net/reader030/viewer/2022013102/55a209ef1a28aba5368b4602/html5/thumbnails/51.jpg)
まとめ• Spring 4.1対応
• @SpringBootApplication • Servlet 3.1対応
• JMS対応
• JTA対応
• JAX-RS(Jersey)対応
• Email送信対応
• 宣言的SSL対応 http://bit.ly/hajiboot
はじめよう Spring Boot!