SlideShare a Scribd company logo
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
1
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸
▸
2
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸
▸ 

▸
▸
▸
3
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
4
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸
▸
▸
▸
5
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸ 

▸ 

▸
▸
▸
6
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸
▸
▸ 

▸
▸
7
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
8
1. Core 2. Web
3. Data4. Security
5. Test
6. Boot
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
9
1. Core 2. Web
3. Data4. Security
5. Test
6. Boot
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸
▸
▸
▸ @NonNull / @Nullable
10
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸ 



▸ 😖
11
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸
▸
▸
12
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸
▸
13
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
requires
14
module	my.app	{	
		requires	spring.jdbc;	
		requires	spring.webmvc;	
		requires	spring.context;	
}
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸
▸
▸
▸
▸
15※SpringOne 2017 Spring Framework 5.0 on JDK 8 & 9
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸
▸
▸
▸
16
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸
▸
▸ 

▸
17
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
18
#
#Mon Jan 29 13:18:40 JST 2018
com.example.web.controller.TodoController=org.s
pringframework.stereotype.Component
com.example.persistence.repository.TodoReposito
ryImpl=org.springframework.stereotype.Component
com.example.service.TodoServiceImpl=org.springf
ramework.stereotype.Component
com.example.web.config.MvcConfig=org.springfram
ework.stereotype.Component
com.example.persistence.config.PersistenceConfi
g=org.springframework.stereotype.Component
com.example.service.config.ServiceConfig=org.sp
ringframework.stereotype.Component
▸ Bean
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
19
▸
https://twitter.com/snicoll/status/957893939054415872
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
@NonNull/@Nullable
▸
▸
▸
▸
▸
▸
20
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
21
1. Core 2. Web
3. Data4. Security
5. Test
6. Boot
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸
▸ WebMvcConfigurerAdapter
▸
▸
22
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸ PushBuilder
▸
▸ 

23
@GetMapping("/push")
public String push(PushBuilder pushBuilder) {
// …
}
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸ @Email @NotEmpty @NotBlank 	
▸
▸ @Past @Future
▸
▸ List<@Size(min = 3) String>

24
GlassFish 



Java EE 8 

-Bean Validation 2.0 -
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
@Configuration
public class MvcConfig implements WebMvcConfigurer {
// …
}
@Configuration
public class MvcConfig extends WebMvcConfigurerAdapter {
// …
}
WebMvcConfigurerAdapter
25
▸ WebMvcConfigurer
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
@PostMapping
public String post(HelloForm helloForm) {
// …
}
26
public class HelloForm {
private final String message;
public HelloForm(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
final
getter 

(setter )


(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸ -parameters 

▸ -parameters
▸ 😅
27
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸
@DateTimeFormat
▸
▸
▸
▸
▸
28
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸ MaxUploadSizeExceededException
▸
▸ ResponseStatusException
▸
▸ ExceptionHandler
▸ RedirectAttribute
29
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
30
1. Core 2. Web
3. Data4. Security
5. Test
6. Boot
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸
31
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸ Optional
▸
32
public interface CrudRepository<T, ID>
extends Repository<T, ID> {
// Iterable<S> save(Iterable<S> entities)
<S extends T> Iterable<S> saveAll(Iterable<S> entities);
// T find(ID id)
Optional<T> findById(ID id);
// …
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
33
//
Iterable<T> findAllById(Iterable<ID> ids);
// boolean exists(ID id)
boolean existsById(ID id);
// void delete(ID id)
void deleteById(ID id);
// void delete(Iterable<? extends T> entities)
void deleteAll(Iterable<? extends T> entities);
//
}
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸ JdbcTemplate
▸
34
public interface EmployeeRepository
extends CrudRepository<Employee, Long> {
// SQL
@Query("SELECT ... FROM employee WHERE ...")
List<Employee> findByHogeHoge(...);
// CrudRepository
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸
▸
▸
35
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
36
1. Core 2. Web
3. Data4. Security
5. Test
6. Boot
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸ DelegatingPasswordEncoder
37
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸
38
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸
▸
▸
▸
▸
39
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
40
@EnableWebSecurity
public class SecurityConfig
extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) {
http.authorizeRequest()
.anyRequest().authenticated();
http.oauth2Login();
}
// omitted
※ 

https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#jc-oauth2login-javaconfig-wo-boot
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
DelegatingPasswordEncoder
▸ PasswordEncoder
DelegatingPasswordEncoder
41
@EnableWebSecurity
public class SecurityConfig
extends WebSecurityConfigurerAdapter {
@Override
protected void configure(
AuthenticationManagerBuilder auth)
auth.inMemoryAuthentication()
.withUser("…").password("…").roles("…").and()
.withUser("…").password("…").roles("…");
}
// omitted
Delegating

PasswordEncoder

(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
DelegatingPasswordEncoder
▸ 

PasswordEncoder
42
Delegating

Password

Encoder
BCrypt

Password

Encoder
Pbkdf2

Password

Encoder
NoOp

Password

Encoder
{bcrypt}$2a$10$…
{pbkdf2}5d623b44…
{noop}password
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸ 

PasswordEncoder
▸
▸ PasswordEncoder
43
DelegatingPasswordEncoder
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
44
1. Core 2. Web
3. Data4. Security
5. Test
6. Boot
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
45
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸ SpringExtension
▸
46
@ExtendWith(SpringExtension.class)
@ContextConfiguration(
classes = HelloTestConfig.class)
public class HelloTest {
@Autowired HelloService service;
// …
}
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸ SpringExtension 

ParameterResolver
47
@ExtendWith(SpringExtension.class)
@ContextConfiguration(
classes = HelloTestConfig.class)
public class HelloTest {
@Test
void test(@Autowired HelloService service) {
// …
}
}
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸ @SpringJUnitConfig
▸ = @ExtendWith(SpringExtension.class) 

+ @ContextConfiguration
▸ @SpringJUnitWebConfig
▸ = @ExtendWith(SpringExtension.class)

+ @ContextConfiguration + @WebAppConfiguration
▸ @EnabledIf / @DisabledIf
▸
48
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
49
1. Core 2. Web
3. Data4. Security
5. Test
6. Boot
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸
▸
▸
▸
50
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸ 



▸
▸ 



51
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸ 

▸ 

▸ 





52
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
-parameters
▸
▸ 😅
▸
▸
53
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸
54
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸


▸


55
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸
▸ WebSecurityConfigurerAdapter
56
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸ /actuator
▸ /info /health
▸
57
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸ 

58
# /shutdown
management.endpoint.< >.enabled=true
#
management.endpoints.web.exposure.include=< >
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
59
@Configuration
public class SecurityConfig
extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http)
throws Exception {
http.httpBasic();
http.authorizeRequests()
.requestMatchers(EndpointRequest.toAnyEndpoint())
.hasRole(" ")
.anyRequest().authenticated();
}
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸ server.context-path

server.servlet.context-path
60
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸
▸
61
<!— —>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-properties-migrator</artifactId>
<scope>runtime</scope>
</dependency>
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
62
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸
▸
63
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
64
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
65
Core JDK 8 JDK 9/10
Web HTTP/2 Bean Validation 2.0
Data Repository API
Security OAuth 2.0 DelegatingPasswordEncoder
Test JUnit 5
Boot JDK 8/9 Actuator
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
66
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸
▸
▸
▸
▸
▸
▸
▸
▸
▸
▸
67
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸
▸
▸
▸
▸
▸
▸
▸
▸
68
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸
▸
▸
▸
▸
▸
▸
▸
▸
▸
▸
69
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
▸
▸
▸
▸
70
(C) CASAREAL, Inc. All rights reserved.
#jjug_ccc #ccc_e3
▸
71

More Related Content

What's hot

怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
土岐 孝平
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
 
Java EE 8新機能解説 -Bean Validation 2.0編-
Java EE 8新機能解説 -Bean Validation 2.0編-Java EE 8新機能解説 -Bean Validation 2.0編-
Java EE 8新機能解説 -Bean Validation 2.0編-
Masatoshi Tada
 
今さら聞けないDiとspring
今さら聞けないDiとspring今さら聞けないDiとspring
今さら聞けないDiとspring
土岐 孝平
 
ドメイン駆動設計(DDD)の実践Part2
ドメイン駆動設計(DDD)の実践Part2ドメイン駆動設計(DDD)の実践Part2
ドメイン駆動設計(DDD)の実践Part2
増田 亨
 
バイナリアンを目指して For a binaryen
バイナリアンを目指して For a binaryenバイナリアンを目指して For a binaryen
バイナリアンを目指して For a binaryen
Eyes, JAPAN
 
やってはいけない空振りDelete
やってはいけない空振りDeleteやってはいけない空振りDelete
やってはいけない空振りDelete
Yu Yamada
 
はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)
Masatoshi Tada
 
Spring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のことSpring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のこと
心 谷本
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
泰 増田
 
What's new in Spring Batch 5
What's new in Spring Batch 5What's new in Spring Batch 5
What's new in Spring Batch 5
ikeyat
 
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Ryosuke Uchitate
 
Spring Boot ユーザの方のための Quarkus 入門
Spring Boot ユーザの方のための Quarkus 入門Spring Boot ユーザの方のための Quarkus 入門
Spring Boot ユーザの方のための Quarkus 入門
tsukasamannen
 
JSRとJEPとJBSの見方や調べ方について
JSRとJEPとJBSの見方や調べ方についてJSRとJEPとJBSの見方や調べ方について
JSRとJEPとJBSの見方や調べ方について
Aya Ebata
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
 
とにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みるとにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みる
Masatoshi Tada
 

What's hot (20)

怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
Java EE 8新機能解説 -Bean Validation 2.0編-
Java EE 8新機能解説 -Bean Validation 2.0編-Java EE 8新機能解説 -Bean Validation 2.0編-
Java EE 8新機能解説 -Bean Validation 2.0編-
 
今さら聞けないDiとspring
今さら聞けないDiとspring今さら聞けないDiとspring
今さら聞けないDiとspring
 
ドメイン駆動設計(DDD)の実践Part2
ドメイン駆動設計(DDD)の実践Part2ドメイン駆動設計(DDD)の実践Part2
ドメイン駆動設計(DDD)の実践Part2
 
バイナリアンを目指して For a binaryen
バイナリアンを目指して For a binaryenバイナリアンを目指して For a binaryen
バイナリアンを目指して For a binaryen
 
やってはいけない空振りDelete
やってはいけない空振りDeleteやってはいけない空振りDelete
やってはいけない空振りDelete
 
はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)
 
Spring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のことSpring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のこと
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
What's new in Spring Batch 5
What's new in Spring Batch 5What's new in Spring Batch 5
What's new in Spring Batch 5
 
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
 
Spring Boot ユーザの方のための Quarkus 入門
Spring Boot ユーザの方のための Quarkus 入門Spring Boot ユーザの方のための Quarkus 入門
Spring Boot ユーザの方のための Quarkus 入門
 
JSRとJEPとJBSの見方や調べ方について
JSRとJEPとJBSの見方や調べ方についてJSRとJEPとJBSの見方や調べ方について
JSRとJEPとJBSの見方や調べ方について
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
 
とにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みるとにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みる
 

Similar to ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説

Getting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with ThymeleafGetting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with Thymeleaf
Masatoshi Tada
 
JSUG SpringOne 2017報告会
JSUG SpringOne 2017報告会JSUG SpringOne 2017報告会
JSUG SpringOne 2017報告会
Masatoshi Tada
 
2022 SF Summit - Improving Developer Experience with CDK
2022 SF Summit - Improving Developer Experience with CDK2022 SF Summit - Improving Developer Experience with CDK
2022 SF Summit - Improving Developer Experience with CDK
Casey Lee
 
Bang-Bang, you have been hacked - Yonatan Levin, KolGene
Bang-Bang, you have been hacked - Yonatan Levin, KolGeneBang-Bang, you have been hacked - Yonatan Levin, KolGene
Bang-Bang, you have been hacked - Yonatan Levin, KolGene
DroidConTLV
 
Java EEでもOAuth 2.0!~そしてPayara Micro on Cloud Foundryで遊ぶ~
Java EEでもOAuth 2.0!~そしてPayara Micro on Cloud Foundryで遊ぶ~Java EEでもOAuth 2.0!~そしてPayara Micro on Cloud Foundryで遊ぶ~
Java EEでもOAuth 2.0!~そしてPayara Micro on Cloud Foundryで遊ぶ~
Masatoshi Tada
 
Cloud native java script apps
Cloud native java script appsCloud native java script apps
Cloud native java script apps
Gary Sieling
 
Kotlin初體驗
Kotlin初體驗Kotlin初體驗
Kotlin初體驗
哲偉 楊
 
Test Automation Using Googletest
Test Automation Using GoogletestTest Automation Using Googletest
Test Automation Using Googletest
Mohammed_Publications
 
Make Testing Groovy
Make Testing GroovyMake Testing Groovy
Make Testing Groovy
Paul King
 
Test First, Refresh Second: Web App TDD in Grails
Test First, Refresh Second: Web App TDD in GrailsTest First, Refresh Second: Web App TDD in Grails
Test First, Refresh Second: Web App TDD in Grails
Tim Berglund
 
Neo4j Stored Procedure Training Part 2
Neo4j Stored Procedure Training Part 2Neo4j Stored Procedure Training Part 2
Neo4j Stored Procedure Training Part 2
Max De Marzi
 
JEEConf 2017 - How to find deadlock not getting into it
JEEConf 2017 - How to find deadlock not getting into itJEEConf 2017 - How to find deadlock not getting into it
JEEConf 2017 - How to find deadlock not getting into it
Nikita Koval
 
Test First Refresh Second: Test-Driven Development in Grails
Test First Refresh Second: Test-Driven Development in GrailsTest First Refresh Second: Test-Driven Development in Grails
Test First Refresh Second: Test-Driven Development in Grails
Tim Berglund
 
Aaron Bedra - Effective Software Security Teams
Aaron Bedra - Effective Software Security TeamsAaron Bedra - Effective Software Security Teams
Aaron Bedra - Effective Software Security Teams
centralohioissa
 
Hey Relational Developer, Let's Go Crazy (Patrick McFadin, DataStax) | Cassan...
Hey Relational Developer, Let's Go Crazy (Patrick McFadin, DataStax) | Cassan...Hey Relational Developer, Let's Go Crazy (Patrick McFadin, DataStax) | Cassan...
Hey Relational Developer, Let's Go Crazy (Patrick McFadin, DataStax) | Cassan...
DataStax
 
Tieto tdd from-dreams_to_reality_s.narkevicius_v.pozdniakov_2013 (1)
Tieto tdd from-dreams_to_reality_s.narkevicius_v.pozdniakov_2013 (1)Tieto tdd from-dreams_to_reality_s.narkevicius_v.pozdniakov_2013 (1)
Tieto tdd from-dreams_to_reality_s.narkevicius_v.pozdniakov_2013 (1)Agile Lietuva
 
guice-servlet
guice-servletguice-servlet
guice-servlet
Masaaki Yonebayashi
 
Automated Testing with CMake, CTest and CDash
Automated Testing with CMake, CTest and CDashAutomated Testing with CMake, CTest and CDash
Automated Testing with CMake, CTest and CDash
Richard Thomson
 
Java9を迎えた今こそ!Java本格(再)入門
Java9を迎えた今こそ!Java本格(再)入門Java9を迎えた今こそ!Java本格(再)入門
Java9を迎えた今こそ!Java本格(再)入門
Takuya Okada
 
Keeping Your Kubernetes Cluster Secure
Keeping Your Kubernetes Cluster SecureKeeping Your Kubernetes Cluster Secure
Keeping Your Kubernetes Cluster Secure
Gene Gotimer
 

Similar to ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説 (20)

Getting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with ThymeleafGetting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with Thymeleaf
 
JSUG SpringOne 2017報告会
JSUG SpringOne 2017報告会JSUG SpringOne 2017報告会
JSUG SpringOne 2017報告会
 
2022 SF Summit - Improving Developer Experience with CDK
2022 SF Summit - Improving Developer Experience with CDK2022 SF Summit - Improving Developer Experience with CDK
2022 SF Summit - Improving Developer Experience with CDK
 
Bang-Bang, you have been hacked - Yonatan Levin, KolGene
Bang-Bang, you have been hacked - Yonatan Levin, KolGeneBang-Bang, you have been hacked - Yonatan Levin, KolGene
Bang-Bang, you have been hacked - Yonatan Levin, KolGene
 
Java EEでもOAuth 2.0!~そしてPayara Micro on Cloud Foundryで遊ぶ~
Java EEでもOAuth 2.0!~そしてPayara Micro on Cloud Foundryで遊ぶ~Java EEでもOAuth 2.0!~そしてPayara Micro on Cloud Foundryで遊ぶ~
Java EEでもOAuth 2.0!~そしてPayara Micro on Cloud Foundryで遊ぶ~
 
Cloud native java script apps
Cloud native java script appsCloud native java script apps
Cloud native java script apps
 
Kotlin初體驗
Kotlin初體驗Kotlin初體驗
Kotlin初體驗
 
Test Automation Using Googletest
Test Automation Using GoogletestTest Automation Using Googletest
Test Automation Using Googletest
 
Make Testing Groovy
Make Testing GroovyMake Testing Groovy
Make Testing Groovy
 
Test First, Refresh Second: Web App TDD in Grails
Test First, Refresh Second: Web App TDD in GrailsTest First, Refresh Second: Web App TDD in Grails
Test First, Refresh Second: Web App TDD in Grails
 
Neo4j Stored Procedure Training Part 2
Neo4j Stored Procedure Training Part 2Neo4j Stored Procedure Training Part 2
Neo4j Stored Procedure Training Part 2
 
JEEConf 2017 - How to find deadlock not getting into it
JEEConf 2017 - How to find deadlock not getting into itJEEConf 2017 - How to find deadlock not getting into it
JEEConf 2017 - How to find deadlock not getting into it
 
Test First Refresh Second: Test-Driven Development in Grails
Test First Refresh Second: Test-Driven Development in GrailsTest First Refresh Second: Test-Driven Development in Grails
Test First Refresh Second: Test-Driven Development in Grails
 
Aaron Bedra - Effective Software Security Teams
Aaron Bedra - Effective Software Security TeamsAaron Bedra - Effective Software Security Teams
Aaron Bedra - Effective Software Security Teams
 
Hey Relational Developer, Let's Go Crazy (Patrick McFadin, DataStax) | Cassan...
Hey Relational Developer, Let's Go Crazy (Patrick McFadin, DataStax) | Cassan...Hey Relational Developer, Let's Go Crazy (Patrick McFadin, DataStax) | Cassan...
Hey Relational Developer, Let's Go Crazy (Patrick McFadin, DataStax) | Cassan...
 
Tieto tdd from-dreams_to_reality_s.narkevicius_v.pozdniakov_2013 (1)
Tieto tdd from-dreams_to_reality_s.narkevicius_v.pozdniakov_2013 (1)Tieto tdd from-dreams_to_reality_s.narkevicius_v.pozdniakov_2013 (1)
Tieto tdd from-dreams_to_reality_s.narkevicius_v.pozdniakov_2013 (1)
 
guice-servlet
guice-servletguice-servlet
guice-servlet
 
Automated Testing with CMake, CTest and CDash
Automated Testing with CMake, CTest and CDashAutomated Testing with CMake, CTest and CDash
Automated Testing with CMake, CTest and CDash
 
Java9を迎えた今こそ!Java本格(再)入門
Java9を迎えた今こそ!Java本格(再)入門Java9を迎えた今こそ!Java本格(再)入門
Java9を迎えた今こそ!Java本格(再)入門
 
Keeping Your Kubernetes Cluster Secure
Keeping Your Kubernetes Cluster SecureKeeping Your Kubernetes Cluster Secure
Keeping Your Kubernetes Cluster Secure
 

More from Masatoshi Tada

基礎からのOAuth 2.0とSpring Security 5.1による実装
基礎からのOAuth 2.0とSpring Security 5.1による実装基礎からのOAuth 2.0とSpring Security 5.1による実装
基礎からのOAuth 2.0とSpring Security 5.1による実装
Masatoshi Tada
 
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 FallJava EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 Fall
Masatoshi Tada
 
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Masatoshi Tada
 
NetBeansでかんたんJava EE ○分間クッキング! #kuwaccho lt
NetBeansでかんたんJava EE ○分間クッキング! #kuwaccho ltNetBeansでかんたんJava EE ○分間クッキング! #kuwaccho lt
NetBeansでかんたんJava EE ○分間クッキング! #kuwaccho lt
Masatoshi Tada
 
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2Masatoshi Tada
 
JPAの同時実行制御とロック20140518 #ccc_r15 #jjug_ccc
JPAの同時実行制御とロック20140518 #ccc_r15 #jjug_cccJPAの同時実行制御とロック20140518 #ccc_r15 #jjug_ccc
JPAの同時実行制御とロック20140518 #ccc_r15 #jjug_cccMasatoshi Tada
 

More from Masatoshi Tada (6)

基礎からのOAuth 2.0とSpring Security 5.1による実装
基礎からのOAuth 2.0とSpring Security 5.1による実装基礎からのOAuth 2.0とSpring Security 5.1による実装
基礎からのOAuth 2.0とSpring Security 5.1による実装
 
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 FallJava EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 Fall
 
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
 
NetBeansでかんたんJava EE ○分間クッキング! #kuwaccho lt
NetBeansでかんたんJava EE ○分間クッキング! #kuwaccho ltNetBeansでかんたんJava EE ○分間クッキング! #kuwaccho lt
NetBeansでかんたんJava EE ○分間クッキング! #kuwaccho lt
 
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
 
JPAの同時実行制御とロック20140518 #ccc_r15 #jjug_ccc
JPAの同時実行制御とロック20140518 #ccc_r15 #jjug_cccJPAの同時実行制御とロック20140518 #ccc_r15 #jjug_ccc
JPAの同時実行制御とロック20140518 #ccc_r15 #jjug_ccc
 

Recently uploaded

UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
Elena Simperl
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Thierry Lestable
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
DianaGray10
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
Generating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using SmithyGenerating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using Smithy
g2nightmarescribd
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
Cheryl Hung
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
Sri Ambati
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
UiPathCommunity
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Thijs Feryn
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Product School
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
Product School
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
Elena Simperl
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Product School
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 

Recently uploaded (20)

UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
Generating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using SmithyGenerating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using Smithy
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 

ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説

  • 1. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 1
  • 2. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ ▸ 2
  • 3. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ ▸ 
 ▸ ▸ ▸ 3
  • 4. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ 4
  • 5. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ ▸ ▸ ▸ 5
  • 6. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ 
 ▸ 
 ▸ ▸ ▸ 6
  • 7. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ ▸ ▸ 
 ▸ ▸ 7
  • 8. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 8 1. Core 2. Web 3. Data4. Security 5. Test 6. Boot
  • 9. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 9 1. Core 2. Web 3. Data4. Security 5. Test 6. Boot
  • 10. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ ▸ ▸ ▸ @NonNull / @Nullable 10
  • 11. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ 
 
 ▸ 😖 11
  • 12. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ ▸ ▸ 12
  • 13. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ ▸ 13
  • 14. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ requires 14 module my.app { requires spring.jdbc; requires spring.webmvc; requires spring.context; }
  • 15. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ ▸ ▸ ▸ ▸ 15※SpringOne 2017 Spring Framework 5.0 on JDK 8 & 9
  • 16. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ ▸ ▸ ▸ 16
  • 17. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ ▸ ▸ 
 ▸ 17
  • 18. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 18 # #Mon Jan 29 13:18:40 JST 2018 com.example.web.controller.TodoController=org.s pringframework.stereotype.Component com.example.persistence.repository.TodoReposito ryImpl=org.springframework.stereotype.Component com.example.service.TodoServiceImpl=org.springf ramework.stereotype.Component com.example.web.config.MvcConfig=org.springfram ework.stereotype.Component com.example.persistence.config.PersistenceConfi g=org.springframework.stereotype.Component com.example.service.config.ServiceConfig=org.sp ringframework.stereotype.Component ▸ Bean
  • 19. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 19 ▸ https://twitter.com/snicoll/status/957893939054415872
  • 20. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 @NonNull/@Nullable ▸ ▸ ▸ ▸ ▸ ▸ 20
  • 21. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 21 1. Core 2. Web 3. Data4. Security 5. Test 6. Boot
  • 22. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ ▸ WebMvcConfigurerAdapter ▸ ▸ 22
  • 23. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ PushBuilder ▸ ▸ 
 23 @GetMapping("/push") public String push(PushBuilder pushBuilder) { // … }
  • 24. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ @Email @NotEmpty @NotBlank ▸ ▸ @Past @Future ▸ ▸ List<@Size(min = 3) String>
 24 GlassFish 
 
 Java EE 8 
 -Bean Validation 2.0 -
  • 25. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 @Configuration public class MvcConfig implements WebMvcConfigurer { // … } @Configuration public class MvcConfig extends WebMvcConfigurerAdapter { // … } WebMvcConfigurerAdapter 25 ▸ WebMvcConfigurer
  • 26. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 @PostMapping public String post(HelloForm helloForm) { // … } 26 public class HelloForm { private final String message; public HelloForm(String message) { this.message = message; } public String getMessage() { return message; } } final getter 
 (setter ) 

  • 27. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ -parameters 
 ▸ -parameters ▸ 😅 27
  • 28. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ @DateTimeFormat ▸ ▸ ▸ ▸ ▸ 28
  • 29. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ MaxUploadSizeExceededException ▸ ▸ ResponseStatusException ▸ ▸ ExceptionHandler ▸ RedirectAttribute 29
  • 30. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 30 1. Core 2. Web 3. Data4. Security 5. Test 6. Boot
  • 31. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ 31
  • 32. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ Optional ▸ 32 public interface CrudRepository<T, ID> extends Repository<T, ID> { // Iterable<S> save(Iterable<S> entities) <S extends T> Iterable<S> saveAll(Iterable<S> entities); // T find(ID id) Optional<T> findById(ID id); // …
  • 33. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 33 // Iterable<T> findAllById(Iterable<ID> ids); // boolean exists(ID id) boolean existsById(ID id); // void delete(ID id) void deleteById(ID id); // void delete(Iterable<? extends T> entities) void deleteAll(Iterable<? extends T> entities); // }
  • 34. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ JdbcTemplate ▸ 34 public interface EmployeeRepository extends CrudRepository<Employee, Long> { // SQL @Query("SELECT ... FROM employee WHERE ...") List<Employee> findByHogeHoge(...); // CrudRepository
  • 35. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ ▸ ▸ 35
  • 36. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 36 1. Core 2. Web 3. Data4. Security 5. Test 6. Boot
  • 37. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ DelegatingPasswordEncoder 37
  • 38. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ 38
  • 39. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ ▸ ▸ ▸ ▸ 39
  • 40. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 40 @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) { http.authorizeRequest() .anyRequest().authenticated(); http.oauth2Login(); } // omitted ※ 
 https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#jc-oauth2login-javaconfig-wo-boot
  • 41. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 DelegatingPasswordEncoder ▸ PasswordEncoder DelegatingPasswordEncoder 41 @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure( AuthenticationManagerBuilder auth) auth.inMemoryAuthentication() .withUser("…").password("…").roles("…").and() .withUser("…").password("…").roles("…"); } // omitted Delegating
 PasswordEncoder

  • 42. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 DelegatingPasswordEncoder ▸ 
 PasswordEncoder 42 Delegating
 Password
 Encoder BCrypt
 Password
 Encoder Pbkdf2
 Password
 Encoder NoOp
 Password
 Encoder {bcrypt}$2a$10$… {pbkdf2}5d623b44… {noop}password
  • 43. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ 
 PasswordEncoder ▸ ▸ PasswordEncoder 43 DelegatingPasswordEncoder
  • 44. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 44 1. Core 2. Web 3. Data4. Security 5. Test 6. Boot
  • 45. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ 45
  • 46. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ SpringExtension ▸ 46 @ExtendWith(SpringExtension.class) @ContextConfiguration( classes = HelloTestConfig.class) public class HelloTest { @Autowired HelloService service; // … }
  • 47. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ SpringExtension 
 ParameterResolver 47 @ExtendWith(SpringExtension.class) @ContextConfiguration( classes = HelloTestConfig.class) public class HelloTest { @Test void test(@Autowired HelloService service) { // … } }
  • 48. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ @SpringJUnitConfig ▸ = @ExtendWith(SpringExtension.class) 
 + @ContextConfiguration ▸ @SpringJUnitWebConfig ▸ = @ExtendWith(SpringExtension.class)
 + @ContextConfiguration + @WebAppConfiguration ▸ @EnabledIf / @DisabledIf ▸ 48
  • 49. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 49 1. Core 2. Web 3. Data4. Security 5. Test 6. Boot
  • 50. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ ▸ ▸ ▸ 50
  • 51. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ 
 
 ▸ ▸ 
 
 51
  • 52. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ 
 ▸ 
 ▸ 
 
 
 52
  • 53. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ -parameters ▸ ▸ 😅 ▸ ▸ 53
  • 54. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ 54
  • 55. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ 
 ▸ 
 55
  • 56. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ ▸ WebSecurityConfigurerAdapter 56
  • 57. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ /actuator ▸ /info /health ▸ 57
  • 58. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ 
 58 # /shutdown management.endpoint.< >.enabled=true # management.endpoints.web.exposure.include=< >
  • 59. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ 59 @Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.httpBasic(); http.authorizeRequests() .requestMatchers(EndpointRequest.toAnyEndpoint()) .hasRole(" ") .anyRequest().authenticated(); }
  • 60. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ server.context-path
 server.servlet.context-path 60
  • 61. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ ▸ 61 <!— —> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-properties-migrator</artifactId> <scope>runtime</scope> </dependency>
  • 62. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 62
  • 63. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ ▸ 63
  • 64. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 64
  • 65. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 65 Core JDK 8 JDK 9/10 Web HTTP/2 Bean Validation 2.0 Data Repository API Security OAuth 2.0 DelegatingPasswordEncoder Test JUnit 5 Boot JDK 8/9 Actuator
  • 66. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ 66
  • 67. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ ▸ ▸ ▸ ▸ ▸ ▸ ▸ ▸ ▸ ▸ 67
  • 68. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ ▸ ▸ ▸ ▸ ▸ ▸ ▸ ▸ 68
  • 69. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ ▸ ▸ ▸ ▸ ▸ ▸ ▸ ▸ ▸ ▸ 69
  • 70. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ ▸ ▸ ▸ ▸ 70
  • 71. (C) CASAREAL, Inc. All rights reserved. #jjug_ccc #ccc_e3 ▸ 71