Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
どこよりも早い 
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...
package com.example; 
! 
import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure...
ログ 
組込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送信対...
Spring 4.1対応 
•ベースが4.0から4.1へ 
• spring-boot-starter-parentの 
versionを1.2系にするだけで 
アップデートされる
Spring 4.1の詳細はJSUGの資料で 
http://bit.ly/spring41
@SpringBootApplication 
Before 
@EnableAutoConfiguration 
@ComponentScan 
@Configuration 
public class App { 
public stati...
@SpringBootApplication 
After 
@SpringBootApplication 
public class App { 
public static void main(String[] args) { 
Sprin...
Servlet 3.1対応 
• Servletのバージョンが3.0から3.1へ 
• 組み込みサーバーのバージョンアップ 
• Tomcat 8 
• Jetty 9 
• Undertow (New!!)
組み込みサーバー変更 
<dependency> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-starter-web</artifactId> 
<...
JMS対応 
• JMS関連のAutoConfigure追加 
• 組み込みHornetQ、ActiveMQサポート 
• 例えばspring-boot-starter-hornetq 
を依存関係に追加すれば自動 
設定
@SpringBootApplication 
@RestController 
送信 
public class App { 
@Autowired 
JmsTemplate jmsTemplate; 
@RequestMapping("/"...
受信 
@Component 
public class GreetingMessageProcessor { 
@JmsListener(destination = "greetings") 
public void processGreet...
JTA対応 
• JTA Transaction Managerでグローバルトラ 
ンザクションのAutoConfigure対応 
• Atomikos 
• Bitronix 
• Java EEコンテナ上のもの 
• 例えばspring-b...
JTA対応 
• JTA Transaction Managerでグローバルトラ 
ンザクションのAutoConfigure対応 
• Atomikos 
• Bitronix 
本当に必要? 
• Java EEコンテナ上のもの 
• 例えば...
Jersey(JAX-RS)対応 
• Spring BootはSpring MVC専用 
機ではない! 
•MVCフレームワークは入れ替え 
可能 
• Jersey正式サポート!
Jersey(JAX-RS)対応 
<dependency> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-starter-web</artifact...
Java標準でいけます 
@Named 
@Path("/") 
public class HelloEndpoint { 
@Inject 
HelloService helloService; 
! 
@GET 
public String...
Jerseyを即始めたい人向け 
Maven Archetype作りましたhttp://bit.ly/hajiboot-jersey 
$ mvn archetype:generate -B - 
DarchetypeGroupId=am.ik...
Jerseyを即始めたい人向け 
Maven Archetype作りましたhttp://bit.ly/hajiboot-jersey 
$ mvn archetype:generate -B - 
DarchetypeGroupId=am.ik...
Jerseyを即始めたい人向け 
Maven Archetype作りましたhttp://bit.ly/hajiboot-jersey 
$ mvn archetype:generate -B - 
DarchetypeGroupId=am.ik...
Jerseyを即始めたい人向け 
Maven Archetype作りましたhttp://bit.ly/hajiboot-jersey 
アプリケーション即実行 
$ mvn archetype:generate -B - 
Darchetype...
Jerseyを即始めたい人向け 
Maven Archetype作りましたhttp://bit.ly/hajiboot-jersey 
アプリケーション即実行 
$ mvn archetype:generate -B - 
Darchetype...
Email送信サポート 
• Email送信用のMailSenderの 
AutoConfigure 
• spring-boot-starter-mail 
を依存関係に追加すれば自動設定
@SpringBootApplication 
@RestController 
public class App { 
@Autowired 
MailSender mailSender; 
@RequestMapping("/") 
voi...
@SpringBootApplication 
@RestController 
spring: 
public mail: 
class App { 
@Autowired 
MailSender mailSender; 
@RequestM...
宣言的SSL対応 
• 設定ファイル(application.yml)に 
設定を書くだけで簡単SSL対応 
$ keytool -genkeypair -alias mytestkey -keyalg RSA -dname 
"CN=Web ...
いつも通り起動 
$ mvn spring-boot:run 
… (略) 
2014-12-13 12:07:47.833 INFO --- [mple.App.main()] 
s.b.c.e.t.TomcatEmbeddedServlet...
いつも通り起動 
$ mvn spring-boot:run 
… (略) 
2014-12-13 12:07:47.833 INFO --- [mple.App.main()] 
s.b.c.e.t.TomcatEmbeddedServlet...
@makingのContribute
@makingのContribute(1/2) 
No More CharacterEncodingFilter!! 
@Bean 
@Order(Ordered.HIGHEST_PRECEDENCE) 
CharacterEncodingFi...
@makingのContribute(1/2) 
No More CharacterEncodingFilter!! 
@Bean 
@Order(Ordered.HIGHEST_PRECEDENCE) 
CharacterEncodingFi...
@makingのContribute(2/2) 
Spring Boot Actuatorで得られる環境情報
@makingのContribute(2/2) 
Spring Boot Actuatorで得られる環境情報 
_人人人人人人_ 
> だだ漏れ < 
‾Y^Y^Y^Y^Y‾
提案 
Suffixか正規表現でサニタイズするパターンを指定できる 
endpoints: 
configprops: 
keys-to-sanitize: password,secret,key 
env: 
keys-to-sanitize...
議論の末
endpoints.env.keys-to-sanitize=java.*
How to contribute 
CLA(Contributor License Agreement) 
に署名して、 
Githubでissue/pull req! 
https://github.com/spring-projects/...
まとめ 
はじめよう 
Spring Boot! 
• Spring 4.1対応 
• @SpringBootApplication 
• Servlet 3.1対応 
• JMS対応 
• JTA対応 
• JAX-RS(Jersey)対応 ...
Prochain SlideShare
Chargement dans…5
×

どこよりも早い Spring Boot 1.2 解説 #渋谷Java

12 789 vues

Publié le

どこよりも早い Spring Boot 1.2 解説 #渋谷Java

Publié dans : Technologie
  • Identifiez-vous pour voir les commentaires

どこよりも早い Spring Boot 1.2 解説 #渋谷Java

  1. 1. どこよりも早い Spring Boot 1.2 解説 第九回 #渋谷Java 2014-12-14 Toshiaki Maki (@making)
  2. 2. 自己紹介 • @making • http://blog.ik.am • 公私ともにSpringヘビーユーザー • 日本Javaユーザーグループ幹事
  3. 3. 祝「はじめてのSpring Boot」出版 http://bit.ly/hajiboot
  4. 4. 一昨日1.2.0リリース!
  5. 5. コンテンツ •Spring Boot復習 •Spring Boot 1.2の新機能 •@makingのContribute
  6. 6. Spring Bootの復習
  7. 7. Spring Boot復習 • Springを使って簡単にモダンな アプリケーションを開発するた めの仕組み •AutoConfigure + 組み込みサー バーが特徴
  8. 8. <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> この設定を追加 するだけ
  9. 9. 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 @EnableAutoConfiguration public class App { ! @RequestMapping("/") String home() { return "Hello World!"; } ! public static void main(String[] args) { SpringApplication.run(App.class, args); } } 魔法のアノテーション mainメソッドでアプリ実行
  10. 10. ログ 組込Tomcatが起動した
  11. 11. ログ 組込Tomcatが起動した
  12. 12. 実行可能jarを作成 $ mvn package
  13. 13. jarを実行 $ java -jar target/jggug-helloworld-1.0.0- SNAPSHOT.jar
  14. 14. プロパティを変更して実行 $ java -jar target/jggug-helloworld-1.0.0- SNAPSHOT.jar --server.port=8888 --(プロパティ名)=(プロパティ値)
  15. 15. Spring Boot 1.2の新機能
  16. 16. 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
  17. 17. Spring 4.1対応 •ベースが4.0から4.1へ • spring-boot-starter-parentの versionを1.2系にするだけで アップデートされる
  18. 18. Spring 4.1の詳細はJSUGの資料で http://bit.ly/spring41
  19. 19. @SpringBootApplication Before @EnableAutoConfiguration @ComponentScan @Configuration public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } }
  20. 20. @SpringBootApplication After @SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } }
  21. 21. Servlet 3.1対応 • Servletのバージョンが3.0から3.1へ • 組み込みサーバーのバージョンアップ • Tomcat 8 • Jetty 9 • Undertow (New!!)
  22. 22. 組み込みサーバー変更 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> • ベースのServletバージョンが3.0から 3.1へ • 組み込みサーバーもバージョンアップ • Tomcat 8 • Jetty 9 • Undertow (New!!) <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>
  23. 23. JMS対応 • JMS関連のAutoConfigure追加 • 組み込みHornetQ、ActiveMQサポート • 例えばspring-boot-starter-hornetq を依存関係に追加すれば自動 設定
  24. 24. @SpringBootApplication @RestController 送信 public 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); } }
  25. 25. 受信 @Component public class GreetingMessageProcessor { @JmsListener(destination = "greetings") public void processGreet(Greeting greeting){ System.out.println("received " + greeting); } }
  26. 26. JTA対応 • JTA Transaction Managerでグローバルトラ ンザクションのAutoConfigure対応 • Atomikos • Bitronix • Java EEコンテナ上のもの • 例えばspring-boot-starter-jta-atomikos を依存関係に追加すれば自動設定 http://qiita.com/making@github/items/f7939fcdb5199bd4834e サンプル
  27. 27. JTA対応 • JTA Transaction Managerでグローバルトラ ンザクションのAutoConfigure対応 • Atomikos • Bitronix 本当に必要? • Java EEコンテナ上のもの • 例えばspring-boot-starter-jta-atomikos を依存関係に追加すれば自動設定 http://qiita.com/making@github/items/f7939fcdb5199bd4834e サンプル
  28. 28. Jersey(JAX-RS)対応 • Spring BootはSpring MVC専用 機ではない! •MVCフレームワークは入れ替え 可能 • Jersey正式サポート!
  29. 29. 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>
  30. 30. Java標準でいけます @Named @Path("/") public class HelloEndpoint { @Inject HelloService helloService; ! @GET public String hello(@QueryParam("name")String name){ return helloService.hello(name); } }
  31. 31. Jerseyを即始めたい人向け Maven Archetype作りましたhttp://bit.ly/hajiboot-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
  32. 32. Jerseyを即始めたい人向け Maven Archetype作りましたhttp://bit.ly/hajiboot-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
  33. 33. Jerseyを即始めたい人向け Maven Archetype作りましたhttp://bit.ly/hajiboot-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 $ mvn spring-boot:run $ mvn test
  34. 34. Jerseyを即始めたい人向け Maven Archetype作りましたhttp://bit.ly/hajiboot-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 $ mvn spring-boot:run $ mvn test
  35. 35. Jerseyを即始めたい人向け Maven Archetype作りましたhttp://bit.ly/hajiboot-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 $ mvn spring-boot:run $ mvn test 組み込みサーバーでE2Eテスト
  36. 36. Email送信サポート • Email送信用のMailSenderの AutoConfigure • spring-boot-starter-mail を依存関係に追加すれば自動設定
  37. 37. @SpringBootApplication @RestController public 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); } }
  38. 38. @SpringBootApplication @RestController spring: public mail: class App { @Autowired MailSender mailSender; @RequestMapping("/") void hello() { host: smtp.gmail.com port: 587 username: Gmailアカウント password: Gmailパスワード properties: mail.smtp: SimpleMailMessage mailMessage = new SimpleMailMessage(); // … mailSender.send(mailMessage); } public static auth: void main(true String[] args) { SpringApplication.starttls.run(enable: App.class, true args); } }
  39. 39. 宣言的SSL対応 • 設定ファイル(application.yml)に 設定を書くだけで簡単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 server: port: 8443 ssl: key-store: server.jks key-store-password: letmein key-password: changeme
  40. 40. いつも通り起動 $ 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/https 2014-12-13 12:07:47.836 INFO --- [mple.App.main()] com.example.App : Started App in 5.322 seconds (JVM running for 10.02)
  41. 41. いつも通り起動 $ 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/https 2014-12-13 12:07:47.836 INFO --- [mple.App.main()] com.example.App : Started App in 5.322 seconds (JVM running for 10.02)
  42. 42. @makingのContribute
  43. 43. @makingのContribute(1/2) No More CharacterEncodingFilter!! @Bean @Order(Ordered.HIGHEST_PRECEDENCE) CharacterEncodingFilter characterEncodingFilter() { CharacterEncodingFilter filter = new CharacterEncodingFilter(); filter.setEncoding("UTF-8"); filter.setForceEncoding(true); return filter; }
  44. 44. @makingのContribute(1/2) No More CharacterEncodingFilter!! @Bean @Order(Ordered.HIGHEST_PRECEDENCE) CharacterEncodingFilter characterEncodingFilter() { CharacterEncodingFilter filter = AutoConfigure対象に! (日本人歓喜!) new CharacterEncodingFilter(); filter.setEncoding("UTF-8"); filter.setForceEncoding(true); return filter; }
  45. 45. @makingのContribute(2/2) Spring Boot Actuatorで得られる環境情報
  46. 46. @makingのContribute(2/2) Spring Boot Actuatorで得られる環境情報 _人人人人人人_ > だだ漏れ < ‾Y^Y^Y^Y^Y‾
  47. 47. 提案 Suffixか正規表現でサニタイズするパターンを指定できる endpoints: configprops: keys-to-sanitize: password,secret,key env: keys-to-sanitize: password,secret,key
  48. 48. 議論の末
  49. 49. endpoints.env.keys-to-sanitize=java.*
  50. 50. How to contribute CLA(Contributor License Agreement) に署名して、 Githubでissue/pull req! https://github.com/spring-projects/spring-boot/blob/master/CONTRIBUTING.adoc
  51. 51. まとめ はじめよう Spring Boot! • Spring 4.1対応 • @SpringBootApplication • Servlet 3.1対応 • JMS対応 • JTA対応 • JAX-RS(Jersey)対応 • Email送信対応 • 宣言的SSL対応http://bit.ly/hajiboot

×