spring boot 1.3 news #渋谷java
TRANSCRIPT
![Page 1: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/1.jpg)
Spring Boot 1.3 News earlier than anywhere else
Shibuya-Java 2015-08-01 @making (Toshiaki Maki)
![Page 2: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/2.jpg)
About me
• @making
• Spring enthusiast/contributor
![Page 3: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/3.jpg)
Spring Boot
http://blog.pivotal.io/pivotal-cloud-foundry/features/mapping-the-cloud-native-journey
![Page 4: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/4.jpg)
Spring Boot
http://blog.pivotal.io/pivotal-cloud-foundry/features/mapping-the-cloud-native-journey
1.4 M Downloads a month!!!
![Page 5: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/5.jpg)
Spring Boot 1.3!
will be released @ 2015-09Current version is 1.3.0.RC2
![Page 6: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/6.jpg)
Quick Start with Spring Initializer w/ STS
![Page 7: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/7.jpg)
Quick Start with Spring Initializer w/ STS
![Page 8: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/8.jpg)
Quick Start with Spring Initializer w/ IDEA
![Page 9: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/9.jpg)
Quick Start with Spring Initializer w/ IDEA
![Page 10: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/10.jpg)
• Spring 4.2 Support
• New AutoConfigures
• Non-functionalities
• DevOps
Highlights of Spring Boot 1.3
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-1.3-Release-Notes
![Page 11: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/11.jpg)
Today’s Demo Sources
https://github.com/making/demo-spring-boot-1.3
![Page 12: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/12.jpg)
• Spring 4.2 Support
• New AutoConfigures
• Non-functionalities
• DevOps
Highlights of Spring Boot 1.3
![Page 13: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/13.jpg)
Spring 4.2 Support• Server Sent Event (SSE)
• Cross Origin Resource Sharing (CORS)
• ScriptEngineView
• CompletableFuture
• and so on…Released Yesterday!
https://spring.io/blog/2015/07/31/spring-framework-4-2-goes-ga
![Page 14: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/14.jpg)
• Spring 4.2 Support
• New AutoConfigures
• Non-functionalities
• DevOps
Highlights of Spring Boot 1.3
![Page 15: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/15.jpg)
New AutoConfigures• Cache
•OAuth2
• Spring Session
• jOOQ
• EmbeddedMongoDB
![Page 16: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/16.jpg)
CacheAutoConfigure for Spring Cache Abstraction
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
![Page 17: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/17.jpg)
Cache@EnableCaching @SpringBootApplication @RestController public class Demo { @Autowired WeatherService service; @RequestMapping String hello() { long start = System.currentTimeMillis(); String result = service.getWeather("Tokyo"); long elapsed = System.currentTimeMillis() - start; return result + " took " + elapsed + " [ms]"; } public static void main(String[] args) { SpringApplication.run(Demo.class, args); } }
![Page 18: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/18.jpg)
Cache@CacheConfig(cacheNames = "weather") @Service class WeatherService { @Cacheable public String getWeather(String where) { // Access OpenWeatherMap API; } }
![Page 19: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/19.jpg)
Cache@CacheDefaults(cacheName = "weather") @Service class WeatherService { @CacheResult public String getWeather(String where) { // Access OpenWeatherMap API; } } Standard JCache API
is also available
![Page 20: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/20.jpg)
Cache
![Page 21: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/21.jpg)
Cache Managers•ConcurrentHashMap •EhCache •Hazelcast •Infinispan •JCache (JSR 107) •Redis •Guava
See Samples https://github.com/making/demo-spring-boot-1.3
https://blog.ik.am/#/entries/339
![Page 22: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/22.jpg)
OAuth2AutoConfigure for Spring Security OAuth2
<dependency> <groupId>org.springframework.security.oauth</groupId> <artifactId>spring-security-oauth2</artifactId> </dependency>
![Page 23: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/23.jpg)
OAuth2@SpringBootApplication
@RestControllerpublic class Demo { @RequestMapping("/") String hello() { return "Hello World!"; } public static void main(String[] args) { SpringApplication.run(Demo.class, args); }}
![Page 24: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/24.jpg)
OAuth2@SpringBootApplication@EnableAuthorizationServer@EnableResourceServer@RestControllerpublic class Demo { @RequestMapping("/") String hello() { return "Hello World!"; } public static void main(String[] args) { SpringApplication.run(Demo.class, args); }}
security.user.name=usersecurity.user.password=passwordsecurity.oauth2.client.client-id=foosecurity.oauth2.client.client-secret=bar
![Page 25: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/25.jpg)
OAuth2$ curl localhost:8080{ "error": "unauthorized", "error_description": "Full authentication is required to access this resource"}
![Page 26: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/26.jpg)
OAuth2
$ curl foo:bar@localhost:8080/oauth/token -d grant_type=password -d username=user -d password=password -d scope=read{ "access_token": "43a001d3-862f-4f02-a60f-b04d0988c24c", "token_type": "bearer", "refresh_token": "e4af4aac-eb8e-423b-b3a9-a73ba0f81fd1", "expires_in": 43199, "scope": "read"}
Client ID/Secret Resource Owner’s username/password
![Page 27: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/27.jpg)
OAuth2
$ curl -H "Authorization: Bearer 43a001d3-862f-4f02-a60f-b04d0988c24c" localhost:8080Hello World!
![Page 28: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/28.jpg)
OAuth2 SSO@SpringBootApplication@EnableOAuthSso@RestControllerpublic class Demo { @RequestMapping("/") String hello(OAuth2Authentication auth) { return "Hello " + auth.getName(); } public static void main(String[] args) { SpringApplication.run(Demo.class, args); }}
![Page 29: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/29.jpg)
OAuth2 SSOsecurity.oauth2.client.client-id=5f6623be1882438a166a security.oauth2.client.client-secret=fb38ecb19304645292ace4e3cfc8ba3102c44dc8security.oauth2.client.access-token-uri=https://github.com/login/oauth/access_token security.oauth2.client.user-authorization-uri=https://github.com/login/oauth/authorize security.oauth2.client.client-authentication-scheme=form security.oauth2.resource.user-info-uri=https://api.github.com/user security.oauth2.resource.prefer-token-info=false
![Page 30: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/30.jpg)
OAuth2 SSO
![Page 31: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/31.jpg)
OAuth2 SSOsecurity.oauth2.client.client-id=746653690954-hheiimv40v167fp6f26g security.oauth2.client.client-secret=jo7Ee9oHJY2i9DeOWHXuMcD- security.oauth2.client.access-token-uri=https://www.googleapis.com/oauth2/v3/token security.oauth2.client.user-authorization-uri=https://accounts.google.com/o/oauth2/auth security.oauth2.client.client-authentication-scheme=form security.oauth2.client.scope=profile,email security.oauth2.resource.user-info-uri=https://www.googleapis.com/plus/v1/people/me security.oauth2.resource.prefer-token-info=false
Goole+ API is also available!!
![Page 32: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/32.jpg)
OAuth2 SSO
![Page 33: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/33.jpg)
jOOQAutoConfigure for jOOQ
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jooq</artifactId> </dependency>
![Page 34: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/34.jpg)
jOOQ@Repository public class CustomerRepository { @Autowired DSLContext dslContext; public List<Customer> findAll() { return dslContext.select() .from(CUSTOMERS) .orderBy(CUSTOMERS.FIRST_NAME.asc()) .fetchInto(Customer.class); } }
AutoConfigured
Exception Handler, TransactionManager… are also configured
![Page 35: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/35.jpg)
Spring SessionAutoConfigure for Spring Session
<dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session</artifactId> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> </dependency>
![Page 36: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/36.jpg)
Spring Session@SpringBootApplication@RestControllerpublic class Demo { @Value("${server.port:8080}") int port;
@RequestMapping("/") String hello(HttpSession session) { return "port=" + port + ", id=" + session.getId(); } public static void main(String[] args) { SpringApplication.run(Demo.class, args); }}
Nothing special!
![Page 37: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/37.jpg)
Spring Session
$ java -jar demo.jar --server.port=8080
$ java -jar demo.jar --server.port=8081
![Page 38: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/38.jpg)
Spring Session
![Page 39: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/39.jpg)
Spring Session
![Page 40: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/40.jpg)
Spring Session
![Page 41: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/41.jpg)
EmbeddedMongoDBAutoConfigure for Embedded Mongo
<dependency> <groupId>de.flapdoodle.embed</groupId> <artifactId>de.flapdoodle.embed.mongo</artifactId> </dependency>
Automatically used
![Page 42: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/42.jpg)
• Spring 4.2 Support
• New AutoConfigures
• Non-functionalities
• DevOps
Highlights of Spring Boot 1.3
![Page 43: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/43.jpg)
Non-functionalities
• OpenTSDB Metrics Writer
• StatsD Metrics Writer
• New Healthcheck
![Page 44: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/44.jpg)
OpenTSDB Metrics Writer
@Bean@ExportMetricWriter@ConfigurationProperties("metrics.export")MetricWriter metricWriter() { return new OpenTsdbMetricWriter();}
metrics.export.url=http://localhost:4242/api/put
Export metrics to
![Page 45: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/45.jpg)
StatsD Metrics Writer
Export metrics to StatsD
@Bean @ExportMetricWriter MetricWriter metricWriter(@Value("${statsd.prefix}") String prefix, @Value("${statsd.host}") String host, @Value("${statsd.port}") int port) { return new StatsdMetricWriter(prefix, host, port); }
statsd.prefix=demostatsd.host=localhoststatsd.port=8125
![Page 46: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/46.jpg)
StatsD Metrics Writer
StatsD + Graphite + Grafana
https://github.com/kamon-io/docker-grafana-graphite
![Page 47: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/47.jpg)
New Health Check
• Elasticsearch
• JMS
![Page 48: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/48.jpg)
Highlights of Spring Boot 1.3
• Spring 4.2 Support
• New AutoConfigures
• Non-functionalities
• DevOps
![Page 49: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/49.jpg)
DevOps
• Ascii Color Banner
• Systemd Service
• DevTools
![Page 50: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/50.jpg)
Ascii Color Banner${AnsiColor.BRIGHT_GREEN}My Application${AnsiColor.BRIGHT_YELLOW}Hello!!${AnsiColor.DEFAULT}
src/main/resources/banner.txt
![Page 51: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/51.jpg)
Ascii Color Banner
![Page 52: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/52.jpg)
Systemd Service
$ mvn package$ cp target/*.jar /var/demo/demo
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <executable>true</executable> </configuration> </plugin>
![Page 53: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/53.jpg)
Systemd Service
$ systemctl start demo$ systemctl enable demo
[Unit]Description=demoAfter=syslog.target[Service]ExecStart=/var/demo/demo[Install]WantedBy=multi-user.target
/etc/systemd/system/demo.service
![Page 54: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/54.jpg)
DevTools• Disabling template cache
• Auto restart Class Loader
• Live reload browser
• Remote debug & restart
![Page 55: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/55.jpg)
DevTools
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId></dependency>
![Page 56: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/56.jpg)
Disabling template cache
spring.thymeleaf.cache=falsespring.freemarker.cache=falsespring.groovy.template.cache=falsespring.velocity.cache=falsespring.mustache.cache=false
![Page 57: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/57.jpg)
spring.thymeleaf.cache=falsespring.freemarker.cache=falsespring.groovy.template.cache=falsespring.velocity.cache=falsespring.mustache.cache=false
No longer needed!!
Disabling template cache
![Page 59: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/59.jpg)
Live reload browser
Demo
![Page 60: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/60.jpg)
Remote debug & restart
https://www.youtube.com/watch?v=A70NMxV13TI
![Page 61: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/61.jpg)
Wrap UpSpring 4.2
• Server-Sent Events • CORS • ScriptEngineView • CompletableFuture
New AutoConfigures • Cache • OAuth2 • Spring Session • jOOQ
Non-functionalities • OpenTSDB Metrics • StatsD Metrics • New Healthcheck
DevOps • Ascii Color Banner • Systemd Service • DevTools
![Page 62: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/62.jpg)
Announce!!
• Spring in Summer
• 2015-08-28(Fri.)09:30 - 18:30
• GranTokyo South Towerhttps://jsug.doorkeeper.jp/events/27682
Largest Spring Event in Japan!!
![Page 63: Spring Boot 1.3 News #渋谷Java](https://reader031.vdocuments.site/reader031/viewer/2022020106/55d108a8bb61eb941a8b45fb/html5/thumbnails/63.jpg)
Announce!!
• JJUG LT Festival!!
• 2015-08-10(Mon.)19:00 - 21:00
https://jjug.doorkeeper.jp/events/28181