spring boot 1.3 news #渋谷java

63
Spring Boot 1.3 News earlier than anywhere else Shibuya-Java 2015-08-01 @making (Toshiaki Maki)

Upload: toshiaki-maki

Post on 17-Aug-2015

2.634 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: Spring Boot 1.3 News #渋谷Java

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

About me

• @making

• Spring enthusiast/contributor

Page 3: Spring Boot 1.3 News #渋谷Java

Spring Boot

http://blog.pivotal.io/pivotal-cloud-foundry/features/mapping-the-cloud-native-journey

Page 4: Spring Boot 1.3 News #渋谷Java

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

Spring Boot 1.3!

will be released @ 2015-09Current version is 1.3.0.RC2

Page 6: Spring Boot 1.3 News #渋谷Java

Quick Start with Spring Initializer w/ STS

Page 7: Spring Boot 1.3 News #渋谷Java

Quick Start with Spring Initializer w/ STS

Page 8: Spring Boot 1.3 News #渋谷Java

Quick Start with Spring Initializer w/ IDEA

Page 9: Spring Boot 1.3 News #渋谷Java

Quick Start with Spring Initializer w/ IDEA

Page 10: Spring Boot 1.3 News #渋谷Java

• 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

Today’s Demo Sources

https://github.com/making/demo-spring-boot-1.3

Page 12: Spring Boot 1.3 News #渋谷Java

• Spring 4.2 Support

• New AutoConfigures

• Non-functionalities

• DevOps

Highlights of Spring Boot 1.3

Page 13: Spring Boot 1.3 News #渋谷Java

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

• Spring 4.2 Support

• New AutoConfigures

• Non-functionalities

• DevOps

Highlights of Spring Boot 1.3

Page 15: Spring Boot 1.3 News #渋谷Java

New AutoConfigures• Cache

•OAuth2

• Spring Session

• jOOQ

• EmbeddedMongoDB

Page 16: Spring Boot 1.3 News #渋谷Java

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

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

Cache@CacheConfig(cacheNames = "weather") @Service class WeatherService { @Cacheable public String getWeather(String where) { // Access OpenWeatherMap API; } }

Page 19: Spring Boot 1.3 News #渋谷Java

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

Cache

Page 21: Spring Boot 1.3 News #渋谷Java

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

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

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

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

OAuth2$ curl localhost:8080{ "error": "unauthorized", "error_description": "Full authentication is required to access this resource"}

Page 26: Spring Boot 1.3 News #渋谷Java

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

OAuth2

$ curl -H "Authorization: Bearer 43a001d3-862f-4f02-a60f-b04d0988c24c" localhost:8080Hello World!

Page 28: Spring Boot 1.3 News #渋谷Java

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

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

OAuth2 SSO

Page 31: Spring Boot 1.3 News #渋谷Java

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

OAuth2 SSO

Page 33: Spring Boot 1.3 News #渋谷Java

jOOQAutoConfigure for jOOQ

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jooq</artifactId> </dependency>

Page 34: Spring Boot 1.3 News #渋谷Java

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

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

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

Spring Session

$ java -jar demo.jar --server.port=8080

$ java -jar demo.jar --server.port=8081

Page 38: Spring Boot 1.3 News #渋谷Java

Spring Session

Page 39: Spring Boot 1.3 News #渋谷Java

Spring Session

Page 40: Spring Boot 1.3 News #渋谷Java

Spring Session

Page 41: Spring Boot 1.3 News #渋谷Java

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

• Spring 4.2 Support

• New AutoConfigures

• Non-functionalities

• DevOps

Highlights of Spring Boot 1.3

Page 43: Spring Boot 1.3 News #渋谷Java

Non-functionalities

• OpenTSDB Metrics Writer

• StatsD Metrics Writer

• New Healthcheck

Page 44: Spring Boot 1.3 News #渋谷Java

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

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

StatsD Metrics Writer

StatsD + Graphite + Grafana

https://github.com/kamon-io/docker-grafana-graphite

Page 47: Spring Boot 1.3 News #渋谷Java

New Health Check

• Elasticsearch

• Email

• JMS

Page 48: Spring Boot 1.3 News #渋谷Java

Highlights of Spring Boot 1.3

• Spring 4.2 Support

• New AutoConfigures

• Non-functionalities

• DevOps

Page 49: Spring Boot 1.3 News #渋谷Java

DevOps

• Ascii Color Banner

• Systemd Service

• DevTools

Page 50: Spring Boot 1.3 News #渋谷Java

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

Ascii Color Banner

Page 52: Spring Boot 1.3 News #渋谷Java

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

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

DevTools• Disabling template cache

• Auto restart Class Loader

• Live reload browser

• Remote debug & restart

Page 55: Spring Boot 1.3 News #渋谷Java

DevTools

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId></dependency>

Page 56: Spring Boot 1.3 News #渋谷Java

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

spring.thymeleaf.cache=falsespring.freemarker.cache=falsespring.groovy.template.cache=falsespring.velocity.cache=falsespring.mustache.cache=false

No longer needed!!

Disabling template cache

Page 58: Spring Boot 1.3 News #渋谷Java

Auto restart Class Loader

Demohttps://blog.ik.am/#/entries/349

Page 59: Spring Boot 1.3 News #渋谷Java

Live reload browser

Demo

Page 60: Spring Boot 1.3 News #渋谷Java

Remote debug & restart

https://www.youtube.com/watch?v=A70NMxV13TI

Page 61: Spring Boot 1.3 News #渋谷Java

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

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

Announce!!

• JJUG LT Festival!!

• 2015-08-10(Mon.)19:00 - 21:00

https://jjug.doorkeeper.jp/events/28181