Mais conteúdo relacionado Semelhante a どこよりも早い Spring Boot 1.2 解説 #渋谷Java (20) Mais de Toshiaki Maki (20) どこよりも早い Spring Boot 1.2 解説 #渋谷Java2. 自己紹介
• @making
• http://blog.ik.am
• 公私ともにSpringヘビーユーザー
• 日本Javaユーザーグループ幹事
7. Spring Boot復習
• Springを使って簡単にモダンな
アプリケーションを開発するた
めの仕組み
•AutoConfigure + 組み込みサー
バーが特徴
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. 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メソッドでアプリ実行
13. jarを実行
$ java -jar target/jggug-helloworld-1.0.0-
SNAPSHOT.jar
14. プロパティを変更して実行
$ java -jar target/jggug-helloworld-1.0.0-
SNAPSHOT.jar --server.port=8888
--(プロパティ名)=(プロパティ値)
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
21. Servlet 3.1対応
• Servletのバージョンが3.0から3.1へ
• 組み込みサーバーのバージョンアップ
• Tomcat 8
• Jetty 9
• Undertow (New!!)
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>
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. 受信
@Component
public class GreetingMessageProcessor {
@JmsListener(destination = "greetings")
public void processGreet(Greeting greeting){
System.out.println("received " + greeting);
}
}
26. JTA対応
• JTA Transaction Managerでグローバルトラ
ンザクションのAutoConfigure対応
• Atomikos
• Bitronix
• Java EEコンテナ上のもの
• 例えばspring-boot-starter-jta-atomikos
を依存関係に追加すれば自動設定
http://qiita.com/making@github/items/f7939fcdb5199bd4834e サンプル
27. JTA対応
• JTA Transaction Managerでグローバルトラ
ンザクションのAutoConfigure対応
• Atomikos
• Bitronix
本当に必要?
• Java EEコンテナ上のもの
• 例えばspring-boot-starter-jta-atomikos
を依存関係に追加すれば自動設定
http://qiita.com/making@github/items/f7939fcdb5199bd4834e サンプル
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. Java標準でいけます
@Named
@Path("/")
public class HelloEndpoint {
@Inject
HelloService helloService;
!
@GET
public String hello(@QueryParam("name")String name){
return helloService.hello(name);
}
}
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. 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テスト
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. @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. 宣言的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. いつも通り起動
$ 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. いつも通り起動
$ 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)
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. @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;
}
50. How to contribute
CLA(Contributor License Agreement)
に署名して、
Githubでissue/pull req!
https://github.com/spring-projects/spring-boot/blob/master/CONTRIBUTING.adoc
51. まとめ
はじめよう
Spring Boot!
• Spring 4.1対応
• @SpringBootApplication
• Servlet 3.1対応
• JMS対応
• JTA対応
• JAX-RS(Jersey)対応
• Email送信対応
• 宣言的SSL対応http://bit.ly/hajiboot