Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
どこよりも早い 
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)対応 ...
Nächste SlideShare
Wird geladen in …5
×

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

11.458 Aufrufe

Veröffentlicht am

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

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

どこよりも早い 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

×