SlideShare ist ein Scribd-Unternehmen logo
1 von 33
Downloaden Sie, um offline zu lesen
Spring Booted, But…
黃培棠 (中華電信企業客戶分公司)
Pei-Tang Huang @ Chunghwa Telecom Co., Ltd.
Spring Boot Recap
Spring Boot is a framework for Spring Framework
• Spring Framework gluing things together, wrapped them
up, and left a lot of options for you.
• Spring Boot make your life easier by making a
opinionated choice for you.
Spring Framework as Ingredients
http://blog.mimacom.com/introduction-to-spring-boot/
Spring Boot as Cake
http://blog.mimacom.com/introduction-to-spring-boot/
What If You Are Working In A Cake Factory…
By Marcel Ekkel from Hong Kong, Hong Kong (Cheese cAke paradise?)
[CC BY 2.0 (http://creativecommons.org/licenses/by/2.0)], via Wikimedia Commons
Or Something Like That…
Create Your Own Layer
All problems in computer science can be
solved by another level of indirection.
- David Wheeler
Making a Bootiful Library
Be even more opinionated!
• Provides default for most cases important to you.
• Automatically configure whenever possible.
Be polite!
• Default is only used to de-fault.
• Exposes properties for configuration.
• Conditional bypass auto configuration.
Here Comes The Compost
* {#} powered by
^/ /^ /^/ /y/ /^) /^/ /^/ 

=/= +
| /_ /_/ / / /-' /_/ `_> /
____,&.__~_ (c) Chunghwa Telecom Co., Ltd.
-------
Compost v0.2.0-SNAPSHOT // Spring Boot v1.4.1.RELEASE
2016-10-15 04:13:12.462 INFO 76431 --- [ restartedMain] com.cht.sample.Application : Starting Appli
2016-10-15 04:13:12.465 INFO 76431 --- [ restartedMain] com.cht.sample.Application : The following
2016-10-15 04:13:12.887 INFO 76431 --- [ restartedMain] ationConfigEmbeddedWebApplicationContext : Refreshing org
2016-10-15 04:13:13.662 INFO 76431 --- [ restartedMain] mpostSecurityConfigurationImportSelector : "cht.security.
2016-10-15 04:13:14.895 INFO 76431 --- [ restartedMain] o.s.b.f.xml.XmlBeanDefinitionReader : Loading XML be
2016-10-15 04:13:15.171 INFO 76431 --- [ restartedMain] o.s.b.f.s.DefaultListableBeanFactory : Overriding bea
2016-10-15 04:13:15.966 INFO 76431 --- [ restartedMain] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax
2016-10-15 04:13:16.099 INFO 76431 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'managerT
2016-10-15 04:13:16.142 INFO 76431 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'com.cht.
2016-10-15 04:13:16.245 INFO 76431 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.spri
2016-10-15 04:13:16.437 INFO 76431 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'objectPo
2016-10-15 04:13:16.443 INFO 76431 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.spri
2016-10-15 04:13:16.639 INFO 76431 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'cht.func
2016-10-15 04:13:16.643 INFO 76431 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'com.cht.
2016-10-15 04:13:16.672 INFO 76431 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'environm
2016-10-15 04:13:16.678 INFO 76431 --- [ restartedMain] .c.c.c.f.CompositeFunctionMappingService : Found followin
2016-10-15 04:13:16.678 WARN 76431 --- [ restartedMain] .c.c.c.f.CompositeFunctionMappingService : PropertiesFunc
2016-10-15 04:13:16.678 INFO 76431 --- [ restartedMain] .c.c.c.f.CompositeFunctionMappingService : Registered fun
2016-10-15 04:13:16.678 INFO 76431 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'function
2016-10-15 04:13:16.682 INFO 76431 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'com.cht.
2016-10-15 04:13:16.702 INFO 76431 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'methodSe
2016-10-15 04:13:16.719 INFO 76431 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.spri
Choose A Right Tool
Content assist will you a lot of time!
Spring Tool Suite™ v.s. IntelliJ® IDEA Ultimate
Weave Your Own Safety Net
You have less excuse to skip test!
https://spring.io/blog/2016/04/15/testing-improvements-in-spring-boot-1-4
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class MyWebIntegrationTests {
@Autowired
private TestRestTemplate restTemplate;
@Test
public void exampleTest() {
String body = restTemplate.getForObject("/", String.class);
assertThat(body).isEqualTo("Hello World");
}
}
You have an application serverYou have the IoC container
KnowingYourDependencies
com.example:demo:jar:0.0.1-SNAPSHOT
+- org.springframework.boot:spring-boot-starter:jar:1.4.1.RELEASE:compile
| +- org.springframework.boot:spring-boot:jar:1.4.1.RELEASE:compile
| | - org.springframework:spring-context:jar:4.3.3.RELEASE:compile
| | +- org.springframework:spring-aop:jar:4.3.3.RELEASE:compile
| | +- org.springframework:spring-beans:jar:4.3.3.RELEASE:compile
| | - org.springframework:spring-expression:jar:4.3.3.RELEASE:compile
| +- org.springframework.boot:spring-boot-autoconfigure:jar:1.4.1.RELEASE:compile
| +- org.springframework.boot:spring-boot-starter-logging:jar:1.4.1.RELEASE:compile
| | +- ch.qos.logback:logback-classic:jar:1.1.7:compile
| | | - ch.qos.logback:logback-core:jar:1.1.7:compile
| | +- org.slf4j:jcl-over-slf4j:jar:1.7.21:compile
| | +- org.slf4j:jul-to-slf4j:jar:1.7.21:compile
| | - org.slf4j:log4j-over-slf4j:jar:1.7.21:compile
| +- org.springframework:spring-core:jar:4.3.3.RELEASE:compile
| - org.yaml:snakeyaml:jar:1.17:runtime
- org.springframework.boot:spring-boot-starter-test:jar:1.4.1.RELEASE:test
+- org.springframework.boot:spring-boot-test:jar:1.4.1.RELEASE:test
+- org.springframework.boot:spring-boot-test-autoconfigure:jar:1.4.1.RELEASE:test
+- com.jayway.jsonpath:json-path:jar:2.2.0:test
| +- net.minidev:json-smart:jar:2.2.1:test
| | - net.minidev:accessors-smart:jar:1.1:test
| | - org.ow2.asm:asm:jar:5.0.3:test
| - org.slf4j:slf4j-api:jar:1.7.21:compile
+- junit:junit:jar:4.12:test
+- org.assertj:assertj-core:jar:2.5.0:test
+- org.mockito:mockito-core:jar:1.10.19:test
| - org.objenesis:objenesis:jar:2.1:test
+- org.hamcrest:hamcrest-core:jar:1.3:test
+- org.hamcrest:hamcrest-library:jar:1.3:test
+- org.skyscreamer:jsonassert:jar:1.3.0:test
| - org.json:json:jar:20140107:test
- org.springframework:spring-test:jar:4.3.3.RELEASE:test
Bill Of Materials
Keep library versions in ONE place
• spring-boot-dependencies
• io.spring.platform:platform-bom
Declare dependencies without <version>:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
Versioning Matters
Spring Project Versioning
{number}.{release_type}
{number} => {major}.{minor}.{micro}
Semantic Versioning
MAJOR.MINOR.PATCH
https://github.com/spring-projects/spring-build-gradle/wiki/Spring-project-versioning
No breaking changes at this level??
Release Train
Grouping individual projects into one entity.
spring-data-releasetrain
• Arora, Baggage, Codd, Dijkstra, Evans, Fowler,
Gosling, Ingalls
spring-cloud-dependencies
• Angel, Britxon, Camden
spring-cloud-stream-dependencies
• 1.0, Brooklyn
Define Your Own BOM
Except referring to the BOM, no dependencies
version should be used in projects.
Define properties for version, unless:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.8.RELEASE</version>
</parent>
<properties>
<spring-boot.version>1.4.1.RELEASE</spring-boot.version>
</properties>
Maven, Maven?!
Mystic version number 2.1.1?
--- maven-dependency-plugin:2.8:tree (default-cli) @ compost-case-web ---
com.cht.compost:compost-case-web:jar:0.2.0-SNAPSHOT
+- com.cht.commons:cht-commons-web:jar:0.3.0-SNAPSHOT:compile
| +- ...
| +- org.webjars:jquery:jar:2.1.1:compile (version managed from 1.11.0-1)
| +- org.webjars:angular-ui-utils:jar:0.1.0-1:compile
| | +- ...
| | - (org.webjars:jquery:jar:2.1.1:compile –
| | version managed from 1.6.2; omitted for duplicate)
| +- org.webjars:ng-grid:jar:2.0.11:compile
| | +- ...
| | - (org.webjars:jquery:jar:2.1.1:compile –
| | version managed from 1.8.3; omitted for duplicate)
| +- org.webjars:bootstrap:jar:3.2.0:compile
| | - (org.webjars:jquery:jar:2.1.1:compile –
| | version managed from 1.11.1; omitted for duplicate)
- ...
Keep a CHANGELOG
Don’t let your friends dump git logs into changelog
http://keepachangelog.com/en/0.3.0/
# Change Log
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/)
and this project adheres to [Semantic Versioning](http://semver.org/).
## [Unreleased]
### Added
- zh-CN and zh-TW translations from @tianshuo.
- tr-TR translation from @karalamalar.
### Changed
- Start versioning based on the current English version at 0.3.0 to help
translation authors keep things up-to-date.
## [0.3.0] - 2015-12-03
...
Meta-Annotations and Composed Annotations
Annotations on annotation everywhere
https://github.com/spring-projects/spring-framework/wiki/Spring-Annotation-Programming-Model
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = @Filter(
type = FilterType.CUSTOM,
classes = TypeExcludeFilter.class))
public @interface SpringBootApplication {
@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
Define @ConfigurationProperties
Whenever Possible
It’s type-safe, IDE-friendly.
And more expressive than:
@lombok.Data
@Component
@ConfigurationProperties(prefix = "connection")
public class ConnectionProperties {
private String username = "anonymous";
@NotNull
private InetAddress remoteAddress;
}
@Value("${connection.username:anonymous}")
Name Your Property Seriously
There are only two hard things in
Computer Science: cache invalidation
and naming things.
- Phil Karlton
Renaming Your Property
Just like refactoring method names.
@Deprecated
@DeprecatedConfigurationProperty(
reason =
"Property deprecated in Jackson 2.7",
replacement =
"spring.jackson.default-property-inclusion")
public Include getSerializationInclusion() {
return getDefaultPropertyInclusion();
}
AutoConfiguration
META-INF/spring.factories
Nothing special but @Configuration.
Serves as fallback after normal @Configurations
been processed.
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=
com.example.autoconfigure.MyAutoConfiguration
@ConditionalOn*
Eliminating all @Configurations will not work.
Use built-in annotations where possible:
@ConditionalOnBean
@ConditionalOnClass
@ConditionalOnMissingBean
@ConditionalOnMissingClass
@ConditionalOnProperty
…
@Profile
Define profiles for properties,
not for @Configurations or @Beans.
1. You can modify or override properties more easily.
2. You can always define property like my.feature-for-
the-profile.enabled to achieve the same goal.
3. ProfileCondition is not a SpringBootCondition.
@Orders Matter
Hints for Spring Boot.
• @AutoConfigureAfter
• @AutoConfigureBefore
Take built-in AutoConfiguration as Anchor
• Override built-in configuration by invalidate its Condition.
• Register beans and pass them into auto configuration.
• Refine Spring Boot auto configured beans.
Learning From Spring Boot
Spring Boot is an Expert at using libraries
But you still have to know them with <3
• Not every operation is idempotent or cumulative,
WebSecurityConfigurerAdapter for example.
Doing Well as A Monolithic
Package as WAR
POM.xml
<packaging>war</packaging>
@SpringBootApplication
public class Application
extends SpringBootServletInitializer
implements WebApplicationInitializer {
...
}
JBoss EAP
JBoss EAP v6.0 – 6.2
• Have to remove embedded server.
JBoss EAP v6.x
• spring.jmx.enabled=false
• server.servlet-path=/*
• http://stackoverflow.com/a/1939642
• Multipart request charset encoding value is wrong.
• Have to downgrade JPA and Hibernate.
JBoss EAP v7
• Trying…
Oracle WebLogic Server
WebLogic 11g and below
• Not supported.
WebLogic 12c
• Filter registration logic is WRONG!
• https://github.com/spring-projects/spring-boot/issues/2862#issuecomment-99461807
• Have to remove embedded server.
• Have to downgrade JPA and Hibernate.
• Have to specify <wls:prefer-application-packages/> in weblogic.xml.
IBM WebSphere Application Server
WebSphere AS v8.5.5
• Have to remove embedded server.
• Have to downgrade JPA and Hibernate.
From Spring Framework
To Spring Boot
1. Create intermediate project incorporating Spring
Boot.
2. Remove functions duplicated to Spring Boot.
3. Pull up @Configuration as AutoConfiguration.
4. Extract application properties.
放飯!

Weitere ähnliche Inhalte

Was ist angesagt?

Spring Boot and REST API
Spring Boot and REST APISpring Boot and REST API
Spring Boot and REST API07.pallav
 
Why PCF is the best platform for Spring Boot
Why PCF is the best platform for Spring BootWhy PCF is the best platform for Spring Boot
Why PCF is the best platform for Spring BootToshiaki Maki
 
Java REST API Framework Comparison - UberConf 2021
Java REST API Framework Comparison - UberConf 2021Java REST API Framework Comparison - UberConf 2021
Java REST API Framework Comparison - UberConf 2021Matt Raible
 
From Spring Boot 2.2 to Spring Boot 2.3 #jsug
From Spring Boot 2.2 to Spring Boot 2.3 #jsugFrom Spring Boot 2.2 to Spring Boot 2.3 #jsug
From Spring Boot 2.2 to Spring Boot 2.3 #jsugToshiaki Maki
 
CodeIgniter PHP MVC Framework
CodeIgniter PHP MVC FrameworkCodeIgniter PHP MVC Framework
CodeIgniter PHP MVC FrameworkBo-Yi Wu
 
Introduction to Spring WebFlux #jsug #sf_a1
Introduction to Spring WebFlux #jsug #sf_a1Introduction to Spring WebFlux #jsug #sf_a1
Introduction to Spring WebFlux #jsug #sf_a1Toshiaki Maki
 
Spring Boot & WebSocket
Spring Boot & WebSocketSpring Boot & WebSocket
Spring Boot & WebSocketMing-Ying Wu
 
Spring Boot Actuator
Spring Boot ActuatorSpring Boot Actuator
Spring Boot ActuatorRowell Belen
 
How to customize Spring Boot?
How to customize Spring Boot?How to customize Spring Boot?
How to customize Spring Boot?GilWon Oh
 
Managing your Docker image continuously with Concourse CI
Managing your Docker image continuously with Concourse CIManaging your Docker image continuously with Concourse CI
Managing your Docker image continuously with Concourse CIToshiaki Maki
 
So I Wrote a Manifest
So I Wrote a ManifestSo I Wrote a Manifest
So I Wrote a ManifestPuppet
 
Spring Boot & Actuators
Spring Boot & ActuatorsSpring Boot & Actuators
Spring Boot & ActuatorsVMware Tanzu
 
HotPush with Ionic 2 and CodePush
HotPush with Ionic 2 and CodePushHotPush with Ionic 2 and CodePush
HotPush with Ionic 2 and CodePushEvan Schultz
 
Deploying Symfony | symfony.cat
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.catPablo Godel
 
Automatisation in development and testing - within budget
Automatisation in development and testing - within budgetAutomatisation in development and testing - within budget
Automatisation in development and testing - within budgetDavid Lukac
 
REST APIs with Spring
REST APIs with SpringREST APIs with Spring
REST APIs with SpringJoshua Long
 
Service Worker - Reliability bits
Service Worker - Reliability bitsService Worker - Reliability bits
Service Worker - Reliability bitsjungkees
 

Was ist angesagt? (20)

Spring boot
Spring bootSpring boot
Spring boot
 
Spring Boot and REST API
Spring Boot and REST APISpring Boot and REST API
Spring Boot and REST API
 
Why PCF is the best platform for Spring Boot
Why PCF is the best platform for Spring BootWhy PCF is the best platform for Spring Boot
Why PCF is the best platform for Spring Boot
 
Xke spring boot
Xke spring bootXke spring boot
Xke spring boot
 
Ionic2
Ionic2Ionic2
Ionic2
 
Java REST API Framework Comparison - UberConf 2021
Java REST API Framework Comparison - UberConf 2021Java REST API Framework Comparison - UberConf 2021
Java REST API Framework Comparison - UberConf 2021
 
From Spring Boot 2.2 to Spring Boot 2.3 #jsug
From Spring Boot 2.2 to Spring Boot 2.3 #jsugFrom Spring Boot 2.2 to Spring Boot 2.3 #jsug
From Spring Boot 2.2 to Spring Boot 2.3 #jsug
 
CodeIgniter PHP MVC Framework
CodeIgniter PHP MVC FrameworkCodeIgniter PHP MVC Framework
CodeIgniter PHP MVC Framework
 
Introduction to Spring WebFlux #jsug #sf_a1
Introduction to Spring WebFlux #jsug #sf_a1Introduction to Spring WebFlux #jsug #sf_a1
Introduction to Spring WebFlux #jsug #sf_a1
 
Spring Boot & WebSocket
Spring Boot & WebSocketSpring Boot & WebSocket
Spring Boot & WebSocket
 
Spring Boot Actuator
Spring Boot ActuatorSpring Boot Actuator
Spring Boot Actuator
 
How to customize Spring Boot?
How to customize Spring Boot?How to customize Spring Boot?
How to customize Spring Boot?
 
Managing your Docker image continuously with Concourse CI
Managing your Docker image continuously with Concourse CIManaging your Docker image continuously with Concourse CI
Managing your Docker image continuously with Concourse CI
 
So I Wrote a Manifest
So I Wrote a ManifestSo I Wrote a Manifest
So I Wrote a Manifest
 
Spring Boot & Actuators
Spring Boot & ActuatorsSpring Boot & Actuators
Spring Boot & Actuators
 
HotPush with Ionic 2 and CodePush
HotPush with Ionic 2 and CodePushHotPush with Ionic 2 and CodePush
HotPush with Ionic 2 and CodePush
 
Deploying Symfony | symfony.cat
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.cat
 
Automatisation in development and testing - within budget
Automatisation in development and testing - within budgetAutomatisation in development and testing - within budget
Automatisation in development and testing - within budget
 
REST APIs with Spring
REST APIs with SpringREST APIs with Spring
REST APIs with Spring
 
Service Worker - Reliability bits
Service Worker - Reliability bitsService Worker - Reliability bits
Service Worker - Reliability bits
 

Andere mochten auch

From Java Stream to Java DataFrame
From Java Stream to Java DataFrameFrom Java Stream to Java DataFrame
From Java Stream to Java DataFrameChen-en Lu
 
CHUNGHWA TELECOM CO., LTD. FORM 20-F ANNUAL REPORT FISCAL YEAR ENDED DECEMBE...
CHUNGHWA TELECOM CO., LTD. FORM 20-F ANNUAL REPORT  FISCAL YEAR ENDED DECEMBE...CHUNGHWA TELECOM CO., LTD. FORM 20-F ANNUAL REPORT  FISCAL YEAR ENDED DECEMBE...
CHUNGHWA TELECOM CO., LTD. FORM 20-F ANNUAL REPORT FISCAL YEAR ENDED DECEMBE...Mr Nyak
 
IPv6 Progress and Challenge in Chunghwa Telecom
IPv6 Progress and Challenge in Chunghwa TelecomIPv6 Progress and Challenge in Chunghwa Telecom
IPv6 Progress and Challenge in Chunghwa TelecomAPNIC
 
Clients developing_chunghwa telecom
Clients developing_chunghwa telecomClients developing_chunghwa telecom
Clients developing_chunghwa telecomPaul Yang
 
Adv420 chunghwa telecom
Adv420 chunghwa telecomAdv420 chunghwa telecom
Adv420 chunghwa telecomShuo-Jen Pi
 
Nodes bearing grudges
Nodes bearing grudgesNodes bearing grudges
Nodes bearing grudgesPaul Yang
 
CHT IPv6 Measurement and Deployment
CHT IPv6 Measurement and DeploymentCHT IPv6 Measurement and Deployment
CHT IPv6 Measurement and DeploymentAPNIC
 
中華電信智慧家庭系統功能說明
中華電信智慧家庭系統功能說明中華電信智慧家庭系統功能說明
中華電信智慧家庭系統功能說明Tom Chiu
 
2014 оны Харилцаа Холбооны Салбарын нэгдсэн мэдээлэл
2014 оны Харилцаа Холбооны Салбарын нэгдсэн мэдээлэл2014 оны Харилцаа Холбооны Салбарын нэгдсэн мэдээлэл
2014 оны Харилцаа Холбооны Салбарын нэгдсэн мэдээлэлMr Nyak
 
Electronic governance steps in the right direction?
Electronic governance   steps in the right direction?Electronic governance   steps in the right direction?
Electronic governance steps in the right direction?Bozhidar Bozhanov
 
Design Patterns這樣學就會了:入門班 Day1 教材
Design Patterns這樣學就會了:入門班 Day1 教材Design Patterns這樣學就會了:入門班 Day1 教材
Design Patterns這樣學就會了:入門班 Day1 教材teddysoft
 
張忠謀自傳
張忠謀自傳張忠謀自傳
張忠謀自傳5045033
 
2013 資訊產業人才需求與面試技巧解析
2013 資訊產業人才需求與面試技巧解析 2013 資訊產業人才需求與面試技巧解析
2013 資訊產業人才需求與面試技巧解析 Christina Hsu
 
My Resume 我的個人履歷
My Resume 我的個人履歷My Resume 我的個人履歷
My Resume 我的個人履歷Fred Wang
 
那些 Functional Programming 教我的事
那些 Functional Programming 教我的事那些 Functional Programming 教我的事
那些 Functional Programming 教我的事Wen-Tien Chang
 

Andere mochten auch (18)

From Java Stream to Java DataFrame
From Java Stream to Java DataFrameFrom Java Stream to Java DataFrame
From Java Stream to Java DataFrame
 
CHUNGHWA TELECOM CO., LTD. FORM 20-F ANNUAL REPORT FISCAL YEAR ENDED DECEMBE...
CHUNGHWA TELECOM CO., LTD. FORM 20-F ANNUAL REPORT  FISCAL YEAR ENDED DECEMBE...CHUNGHWA TELECOM CO., LTD. FORM 20-F ANNUAL REPORT  FISCAL YEAR ENDED DECEMBE...
CHUNGHWA TELECOM CO., LTD. FORM 20-F ANNUAL REPORT FISCAL YEAR ENDED DECEMBE...
 
IPv6 Progress and Challenge in Chunghwa Telecom
IPv6 Progress and Challenge in Chunghwa TelecomIPv6 Progress and Challenge in Chunghwa Telecom
IPv6 Progress and Challenge in Chunghwa Telecom
 
Clients developing_chunghwa telecom
Clients developing_chunghwa telecomClients developing_chunghwa telecom
Clients developing_chunghwa telecom
 
Adv420 chunghwa telecom
Adv420 chunghwa telecomAdv420 chunghwa telecom
Adv420 chunghwa telecom
 
Spring Boot Update
Spring Boot UpdateSpring Boot Update
Spring Boot Update
 
Nodes bearing grudges
Nodes bearing grudgesNodes bearing grudges
Nodes bearing grudges
 
CHT IPv6 Measurement and Deployment
CHT IPv6 Measurement and DeploymentCHT IPv6 Measurement and Deployment
CHT IPv6 Measurement and Deployment
 
中華電信智慧家庭系統功能說明
中華電信智慧家庭系統功能說明中華電信智慧家庭系統功能說明
中華電信智慧家庭系統功能說明
 
2014 оны Харилцаа Холбооны Салбарын нэгдсэн мэдээлэл
2014 оны Харилцаа Холбооны Салбарын нэгдсэн мэдээлэл2014 оны Харилцаа Холбооны Салбарын нэгдсэн мэдээлэл
2014 оны Харилцаа Холбооны Салбарын нэгдсэн мэдээлэл
 
Electronic governance steps in the right direction?
Electronic governance   steps in the right direction?Electronic governance   steps in the right direction?
Electronic governance steps in the right direction?
 
Spring MVC Basics
Spring MVC BasicsSpring MVC Basics
Spring MVC Basics
 
Design Patterns這樣學就會了:入門班 Day1 教材
Design Patterns這樣學就會了:入門班 Day1 教材Design Patterns這樣學就會了:入門班 Day1 教材
Design Patterns這樣學就會了:入門班 Day1 教材
 
張忠謀自傳
張忠謀自傳張忠謀自傳
張忠謀自傳
 
2013 資訊產業人才需求與面試技巧解析
2013 資訊產業人才需求與面試技巧解析 2013 資訊產業人才需求與面試技巧解析
2013 資訊產業人才需求與面試技巧解析
 
My Resume 我的個人履歷
My Resume 我的個人履歷My Resume 我的個人履歷
My Resume 我的個人履歷
 
那些 Functional Programming 教我的事
那些 Functional Programming 教我的事那些 Functional Programming 教我的事
那些 Functional Programming 教我的事
 
吳明展的履歷 My Resume 2009 (ppt)
吳明展的履歷 My Resume 2009 (ppt)吳明展的履歷 My Resume 2009 (ppt)
吳明展的履歷 My Resume 2009 (ppt)
 

Ähnlich wie Spring Booted, But... @JCConf 16', Taiwan

NDC 2011 - Let me introduce my Moncai
NDC 2011 - Let me introduce my MoncaiNDC 2011 - Let me introduce my Moncai
NDC 2011 - Let me introduce my Moncaimoncai
 
Puppet Camp Melbourne Nov 2014 - A Build Engineering Team’s Journey of Infras...
Puppet Camp Melbourne Nov 2014 - A Build Engineering Team’s Journey of Infras...Puppet Camp Melbourne Nov 2014 - A Build Engineering Team’s Journey of Infras...
Puppet Camp Melbourne Nov 2014 - A Build Engineering Team’s Journey of Infras...Peter Leschev
 
Frontend Workflow
Frontend WorkflowFrontend Workflow
Frontend WorkflowDelphiCon
 
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017MarcinStachniuk
 
Modern Release Engineering in a Nutshell - Why Researchers should Care!
Modern Release Engineering in a Nutshell - Why Researchers should Care!Modern Release Engineering in a Nutshell - Why Researchers should Care!
Modern Release Engineering in a Nutshell - Why Researchers should Care!Bram Adams
 
Concourse bosh orchestration cloud foundry
Concourse bosh orchestration cloud foundryConcourse bosh orchestration cloud foundry
Concourse bosh orchestration cloud foundrySrinivasaHelavar
 
Serverless in production, an experience report (FullStack 2018)
Serverless in production, an experience report (FullStack 2018)Serverless in production, an experience report (FullStack 2018)
Serverless in production, an experience report (FullStack 2018)Yan Cui
 
Laurentiu macovei meteor. a better way of building apps
Laurentiu macovei   meteor. a better way of building appsLaurentiu macovei   meteor. a better way of building apps
Laurentiu macovei meteor. a better way of building appsCodecamp Romania
 
Scaling mobile testing on AWS: Emulators all the way down
Scaling mobile testing on AWS: Emulators all the way downScaling mobile testing on AWS: Emulators all the way down
Scaling mobile testing on AWS: Emulators all the way downKim Moir
 
Install Concourse CI with BOSH
Install Concourse CI with BOSHInstall Concourse CI with BOSH
Install Concourse CI with BOSHToshiaki Maki
 
CSU33012-J-springboot(3) (1).pdf
CSU33012-J-springboot(3) (1).pdfCSU33012-J-springboot(3) (1).pdf
CSU33012-J-springboot(3) (1).pdfRicky Garg
 
CSU33012-J-springboot(3).pdf
CSU33012-J-springboot(3).pdfCSU33012-J-springboot(3).pdf
CSU33012-J-springboot(3).pdfRicky Garg
 
Desarrollo web backend: Spring Boot, MongoDB y Azure
Desarrollo web backend: Spring Boot, MongoDB y AzureDesarrollo web backend: Spring Boot, MongoDB y Azure
Desarrollo web backend: Spring Boot, MongoDB y AzurePatxi Gortázar
 
Ignacy Kowalczyk
Ignacy KowalczykIgnacy Kowalczyk
Ignacy KowalczykCodeFest
 
Package a PyApp as a Flatpak Package: An HTTP Server for Example @ PyCon APAC...
Package a PyApp as a Flatpak Package: An HTTP Server for Example @ PyCon APAC...Package a PyApp as a Flatpak Package: An HTTP Server for Example @ PyCon APAC...
Package a PyApp as a Flatpak Package: An HTTP Server for Example @ PyCon APAC...Jian-Hong Pan
 
Free The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own DomainFree The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own DomainKen Collins
 
#vBrownBag OpenStack - Review & Kickoff for Phase 2
#vBrownBag OpenStack - Review & Kickoff for Phase 2#vBrownBag OpenStack - Review & Kickoff for Phase 2
#vBrownBag OpenStack - Review & Kickoff for Phase 2ProfessionalVMware
 
Serverless in Production, an experience report (AWS UG South Wales)
Serverless in Production, an experience report (AWS UG South Wales)Serverless in Production, an experience report (AWS UG South Wales)
Serverless in Production, an experience report (AWS UG South Wales)Yan Cui
 
Building a Spring Boot 2 Application - Ask the Audience! (from Voxxed Days Vi...
Building a Spring Boot 2 Application - Ask the Audience! (from Voxxed Days Vi...Building a Spring Boot 2 Application - Ask the Audience! (from Voxxed Days Vi...
Building a Spring Boot 2 Application - Ask the Audience! (from Voxxed Days Vi...🎤 Hanno Embregts 🎸
 
Building a Spring Boot 2 Application - Ask the Audience! (from Voxxed Days Vi...
Building a Spring Boot 2 Application - Ask the Audience! (from Voxxed Days Vi...Building a Spring Boot 2 Application - Ask the Audience! (from Voxxed Days Vi...
Building a Spring Boot 2 Application - Ask the Audience! (from Voxxed Days Vi...RianneEmbregts
 

Ähnlich wie Spring Booted, But... @JCConf 16', Taiwan (20)

NDC 2011 - Let me introduce my Moncai
NDC 2011 - Let me introduce my MoncaiNDC 2011 - Let me introduce my Moncai
NDC 2011 - Let me introduce my Moncai
 
Puppet Camp Melbourne Nov 2014 - A Build Engineering Team’s Journey of Infras...
Puppet Camp Melbourne Nov 2014 - A Build Engineering Team’s Journey of Infras...Puppet Camp Melbourne Nov 2014 - A Build Engineering Team’s Journey of Infras...
Puppet Camp Melbourne Nov 2014 - A Build Engineering Team’s Journey of Infras...
 
Frontend Workflow
Frontend WorkflowFrontend Workflow
Frontend Workflow
 
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
 
Modern Release Engineering in a Nutshell - Why Researchers should Care!
Modern Release Engineering in a Nutshell - Why Researchers should Care!Modern Release Engineering in a Nutshell - Why Researchers should Care!
Modern Release Engineering in a Nutshell - Why Researchers should Care!
 
Concourse bosh orchestration cloud foundry
Concourse bosh orchestration cloud foundryConcourse bosh orchestration cloud foundry
Concourse bosh orchestration cloud foundry
 
Serverless in production, an experience report (FullStack 2018)
Serverless in production, an experience report (FullStack 2018)Serverless in production, an experience report (FullStack 2018)
Serverless in production, an experience report (FullStack 2018)
 
Laurentiu macovei meteor. a better way of building apps
Laurentiu macovei   meteor. a better way of building appsLaurentiu macovei   meteor. a better way of building apps
Laurentiu macovei meteor. a better way of building apps
 
Scaling mobile testing on AWS: Emulators all the way down
Scaling mobile testing on AWS: Emulators all the way downScaling mobile testing on AWS: Emulators all the way down
Scaling mobile testing on AWS: Emulators all the way down
 
Install Concourse CI with BOSH
Install Concourse CI with BOSHInstall Concourse CI with BOSH
Install Concourse CI with BOSH
 
CSU33012-J-springboot(3) (1).pdf
CSU33012-J-springboot(3) (1).pdfCSU33012-J-springboot(3) (1).pdf
CSU33012-J-springboot(3) (1).pdf
 
CSU33012-J-springboot(3).pdf
CSU33012-J-springboot(3).pdfCSU33012-J-springboot(3).pdf
CSU33012-J-springboot(3).pdf
 
Desarrollo web backend: Spring Boot, MongoDB y Azure
Desarrollo web backend: Spring Boot, MongoDB y AzureDesarrollo web backend: Spring Boot, MongoDB y Azure
Desarrollo web backend: Spring Boot, MongoDB y Azure
 
Ignacy Kowalczyk
Ignacy KowalczykIgnacy Kowalczyk
Ignacy Kowalczyk
 
Package a PyApp as a Flatpak Package: An HTTP Server for Example @ PyCon APAC...
Package a PyApp as a Flatpak Package: An HTTP Server for Example @ PyCon APAC...Package a PyApp as a Flatpak Package: An HTTP Server for Example @ PyCon APAC...
Package a PyApp as a Flatpak Package: An HTTP Server for Example @ PyCon APAC...
 
Free The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own DomainFree The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own Domain
 
#vBrownBag OpenStack - Review & Kickoff for Phase 2
#vBrownBag OpenStack - Review & Kickoff for Phase 2#vBrownBag OpenStack - Review & Kickoff for Phase 2
#vBrownBag OpenStack - Review & Kickoff for Phase 2
 
Serverless in Production, an experience report (AWS UG South Wales)
Serverless in Production, an experience report (AWS UG South Wales)Serverless in Production, an experience report (AWS UG South Wales)
Serverless in Production, an experience report (AWS UG South Wales)
 
Building a Spring Boot 2 Application - Ask the Audience! (from Voxxed Days Vi...
Building a Spring Boot 2 Application - Ask the Audience! (from Voxxed Days Vi...Building a Spring Boot 2 Application - Ask the Audience! (from Voxxed Days Vi...
Building a Spring Boot 2 Application - Ask the Audience! (from Voxxed Days Vi...
 
Building a Spring Boot 2 Application - Ask the Audience! (from Voxxed Days Vi...
Building a Spring Boot 2 Application - Ask the Audience! (from Voxxed Days Vi...Building a Spring Boot 2 Application - Ask the Audience! (from Voxxed Days Vi...
Building a Spring Boot 2 Application - Ask the Audience! (from Voxxed Days Vi...
 

Kürzlich hochgeladen

Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
Active Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdfActive Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdfCionsystems
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
Test Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendTest Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendArshad QA
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️anilsa9823
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
Clustering techniques data mining book ....
Clustering techniques data mining book ....Clustering techniques data mining book ....
Clustering techniques data mining book ....ShaimaaMohamedGalal
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 

Kürzlich hochgeladen (20)

Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Active Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdfActive Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdf
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
Test Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendTest Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and Backend
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Clustering techniques data mining book ....
Clustering techniques data mining book ....Clustering techniques data mining book ....
Clustering techniques data mining book ....
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 

Spring Booted, But... @JCConf 16', Taiwan

  • 1. Spring Booted, But… 黃培棠 (中華電信企業客戶分公司) Pei-Tang Huang @ Chunghwa Telecom Co., Ltd.
  • 2. Spring Boot Recap Spring Boot is a framework for Spring Framework • Spring Framework gluing things together, wrapped them up, and left a lot of options for you. • Spring Boot make your life easier by making a opinionated choice for you.
  • 3. Spring Framework as Ingredients http://blog.mimacom.com/introduction-to-spring-boot/
  • 4. Spring Boot as Cake http://blog.mimacom.com/introduction-to-spring-boot/
  • 5. What If You Are Working In A Cake Factory… By Marcel Ekkel from Hong Kong, Hong Kong (Cheese cAke paradise?) [CC BY 2.0 (http://creativecommons.org/licenses/by/2.0)], via Wikimedia Commons
  • 7. Create Your Own Layer All problems in computer science can be solved by another level of indirection. - David Wheeler
  • 8. Making a Bootiful Library Be even more opinionated! • Provides default for most cases important to you. • Automatically configure whenever possible. Be polite! • Default is only used to de-fault. • Exposes properties for configuration. • Conditional bypass auto configuration.
  • 9. Here Comes The Compost * {#} powered by ^/ /^ /^/ /y/ /^) /^/ /^/ =/= + | /_ /_/ / / /-' /_/ `_> / ____,&.__~_ (c) Chunghwa Telecom Co., Ltd. ------- Compost v0.2.0-SNAPSHOT // Spring Boot v1.4.1.RELEASE 2016-10-15 04:13:12.462 INFO 76431 --- [ restartedMain] com.cht.sample.Application : Starting Appli 2016-10-15 04:13:12.465 INFO 76431 --- [ restartedMain] com.cht.sample.Application : The following 2016-10-15 04:13:12.887 INFO 76431 --- [ restartedMain] ationConfigEmbeddedWebApplicationContext : Refreshing org 2016-10-15 04:13:13.662 INFO 76431 --- [ restartedMain] mpostSecurityConfigurationImportSelector : "cht.security. 2016-10-15 04:13:14.895 INFO 76431 --- [ restartedMain] o.s.b.f.xml.XmlBeanDefinitionReader : Loading XML be 2016-10-15 04:13:15.171 INFO 76431 --- [ restartedMain] o.s.b.f.s.DefaultListableBeanFactory : Overriding bea 2016-10-15 04:13:15.966 INFO 76431 --- [ restartedMain] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax 2016-10-15 04:13:16.099 INFO 76431 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'managerT 2016-10-15 04:13:16.142 INFO 76431 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'com.cht. 2016-10-15 04:13:16.245 INFO 76431 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.spri 2016-10-15 04:13:16.437 INFO 76431 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'objectPo 2016-10-15 04:13:16.443 INFO 76431 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.spri 2016-10-15 04:13:16.639 INFO 76431 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'cht.func 2016-10-15 04:13:16.643 INFO 76431 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'com.cht. 2016-10-15 04:13:16.672 INFO 76431 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'environm 2016-10-15 04:13:16.678 INFO 76431 --- [ restartedMain] .c.c.c.f.CompositeFunctionMappingService : Found followin 2016-10-15 04:13:16.678 WARN 76431 --- [ restartedMain] .c.c.c.f.CompositeFunctionMappingService : PropertiesFunc 2016-10-15 04:13:16.678 INFO 76431 --- [ restartedMain] .c.c.c.f.CompositeFunctionMappingService : Registered fun 2016-10-15 04:13:16.678 INFO 76431 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'function 2016-10-15 04:13:16.682 INFO 76431 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'com.cht. 2016-10-15 04:13:16.702 INFO 76431 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'methodSe 2016-10-15 04:13:16.719 INFO 76431 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.spri
  • 10. Choose A Right Tool Content assist will you a lot of time! Spring Tool Suite™ v.s. IntelliJ® IDEA Ultimate
  • 11. Weave Your Own Safety Net You have less excuse to skip test! https://spring.io/blog/2016/04/15/testing-improvements-in-spring-boot-1-4 @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) public class MyWebIntegrationTests { @Autowired private TestRestTemplate restTemplate; @Test public void exampleTest() { String body = restTemplate.getForObject("/", String.class); assertThat(body).isEqualTo("Hello World"); } } You have an application serverYou have the IoC container
  • 12. KnowingYourDependencies com.example:demo:jar:0.0.1-SNAPSHOT +- org.springframework.boot:spring-boot-starter:jar:1.4.1.RELEASE:compile | +- org.springframework.boot:spring-boot:jar:1.4.1.RELEASE:compile | | - org.springframework:spring-context:jar:4.3.3.RELEASE:compile | | +- org.springframework:spring-aop:jar:4.3.3.RELEASE:compile | | +- org.springframework:spring-beans:jar:4.3.3.RELEASE:compile | | - org.springframework:spring-expression:jar:4.3.3.RELEASE:compile | +- org.springframework.boot:spring-boot-autoconfigure:jar:1.4.1.RELEASE:compile | +- org.springframework.boot:spring-boot-starter-logging:jar:1.4.1.RELEASE:compile | | +- ch.qos.logback:logback-classic:jar:1.1.7:compile | | | - ch.qos.logback:logback-core:jar:1.1.7:compile | | +- org.slf4j:jcl-over-slf4j:jar:1.7.21:compile | | +- org.slf4j:jul-to-slf4j:jar:1.7.21:compile | | - org.slf4j:log4j-over-slf4j:jar:1.7.21:compile | +- org.springframework:spring-core:jar:4.3.3.RELEASE:compile | - org.yaml:snakeyaml:jar:1.17:runtime - org.springframework.boot:spring-boot-starter-test:jar:1.4.1.RELEASE:test +- org.springframework.boot:spring-boot-test:jar:1.4.1.RELEASE:test +- org.springframework.boot:spring-boot-test-autoconfigure:jar:1.4.1.RELEASE:test +- com.jayway.jsonpath:json-path:jar:2.2.0:test | +- net.minidev:json-smart:jar:2.2.1:test | | - net.minidev:accessors-smart:jar:1.1:test | | - org.ow2.asm:asm:jar:5.0.3:test | - org.slf4j:slf4j-api:jar:1.7.21:compile +- junit:junit:jar:4.12:test +- org.assertj:assertj-core:jar:2.5.0:test +- org.mockito:mockito-core:jar:1.10.19:test | - org.objenesis:objenesis:jar:2.1:test +- org.hamcrest:hamcrest-core:jar:1.3:test +- org.hamcrest:hamcrest-library:jar:1.3:test +- org.skyscreamer:jsonassert:jar:1.3.0:test | - org.json:json:jar:20140107:test - org.springframework:spring-test:jar:4.3.3.RELEASE:test
  • 13. Bill Of Materials Keep library versions in ONE place • spring-boot-dependencies • io.spring.platform:platform-bom Declare dependencies without <version>: <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </dependency>
  • 14. Versioning Matters Spring Project Versioning {number}.{release_type} {number} => {major}.{minor}.{micro} Semantic Versioning MAJOR.MINOR.PATCH https://github.com/spring-projects/spring-build-gradle/wiki/Spring-project-versioning No breaking changes at this level??
  • 15. Release Train Grouping individual projects into one entity. spring-data-releasetrain • Arora, Baggage, Codd, Dijkstra, Evans, Fowler, Gosling, Ingalls spring-cloud-dependencies • Angel, Britxon, Camden spring-cloud-stream-dependencies • 1.0, Brooklyn
  • 16. Define Your Own BOM Except referring to the BOM, no dependencies version should be used in projects. Define properties for version, unless: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.8.RELEASE</version> </parent> <properties> <spring-boot.version>1.4.1.RELEASE</spring-boot.version> </properties>
  • 17. Maven, Maven?! Mystic version number 2.1.1? --- maven-dependency-plugin:2.8:tree (default-cli) @ compost-case-web --- com.cht.compost:compost-case-web:jar:0.2.0-SNAPSHOT +- com.cht.commons:cht-commons-web:jar:0.3.0-SNAPSHOT:compile | +- ... | +- org.webjars:jquery:jar:2.1.1:compile (version managed from 1.11.0-1) | +- org.webjars:angular-ui-utils:jar:0.1.0-1:compile | | +- ... | | - (org.webjars:jquery:jar:2.1.1:compile – | | version managed from 1.6.2; omitted for duplicate) | +- org.webjars:ng-grid:jar:2.0.11:compile | | +- ... | | - (org.webjars:jquery:jar:2.1.1:compile – | | version managed from 1.8.3; omitted for duplicate) | +- org.webjars:bootstrap:jar:3.2.0:compile | | - (org.webjars:jquery:jar:2.1.1:compile – | | version managed from 1.11.1; omitted for duplicate) - ...
  • 18. Keep a CHANGELOG Don’t let your friends dump git logs into changelog http://keepachangelog.com/en/0.3.0/ # Change Log All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] ### Added - zh-CN and zh-TW translations from @tianshuo. - tr-TR translation from @karalamalar. ### Changed - Start versioning based on the current English version at 0.3.0 to help translation authors keep things up-to-date. ## [0.3.0] - 2015-12-03 ...
  • 19. Meta-Annotations and Composed Annotations Annotations on annotation everywhere https://github.com/spring-projects/spring-framework/wiki/Spring-Annotation-Programming-Model @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters = @Filter( type = FilterType.CUSTOM, classes = TypeExcludeFilter.class)) public @interface SpringBootApplication { @AutoConfigurationPackage @Import(EnableAutoConfigurationImportSelector.class) public @interface EnableAutoConfiguration {
  • 20. Define @ConfigurationProperties Whenever Possible It’s type-safe, IDE-friendly. And more expressive than: @lombok.Data @Component @ConfigurationProperties(prefix = "connection") public class ConnectionProperties { private String username = "anonymous"; @NotNull private InetAddress remoteAddress; } @Value("${connection.username:anonymous}")
  • 21. Name Your Property Seriously There are only two hard things in Computer Science: cache invalidation and naming things. - Phil Karlton
  • 22. Renaming Your Property Just like refactoring method names. @Deprecated @DeprecatedConfigurationProperty( reason = "Property deprecated in Jackson 2.7", replacement = "spring.jackson.default-property-inclusion") public Include getSerializationInclusion() { return getDefaultPropertyInclusion(); }
  • 23. AutoConfiguration META-INF/spring.factories Nothing special but @Configuration. Serves as fallback after normal @Configurations been processed. # Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfiguration= com.example.autoconfigure.MyAutoConfiguration
  • 24. @ConditionalOn* Eliminating all @Configurations will not work. Use built-in annotations where possible: @ConditionalOnBean @ConditionalOnClass @ConditionalOnMissingBean @ConditionalOnMissingClass @ConditionalOnProperty …
  • 25. @Profile Define profiles for properties, not for @Configurations or @Beans. 1. You can modify or override properties more easily. 2. You can always define property like my.feature-for- the-profile.enabled to achieve the same goal. 3. ProfileCondition is not a SpringBootCondition.
  • 26. @Orders Matter Hints for Spring Boot. • @AutoConfigureAfter • @AutoConfigureBefore Take built-in AutoConfiguration as Anchor • Override built-in configuration by invalidate its Condition. • Register beans and pass them into auto configuration. • Refine Spring Boot auto configured beans.
  • 27. Learning From Spring Boot Spring Boot is an Expert at using libraries But you still have to know them with <3 • Not every operation is idempotent or cumulative, WebSecurityConfigurerAdapter for example.
  • 28. Doing Well as A Monolithic Package as WAR POM.xml <packaging>war</packaging> @SpringBootApplication public class Application extends SpringBootServletInitializer implements WebApplicationInitializer { ... }
  • 29. JBoss EAP JBoss EAP v6.0 – 6.2 • Have to remove embedded server. JBoss EAP v6.x • spring.jmx.enabled=false • server.servlet-path=/* • http://stackoverflow.com/a/1939642 • Multipart request charset encoding value is wrong. • Have to downgrade JPA and Hibernate. JBoss EAP v7 • Trying…
  • 30. Oracle WebLogic Server WebLogic 11g and below • Not supported. WebLogic 12c • Filter registration logic is WRONG! • https://github.com/spring-projects/spring-boot/issues/2862#issuecomment-99461807 • Have to remove embedded server. • Have to downgrade JPA and Hibernate. • Have to specify <wls:prefer-application-packages/> in weblogic.xml.
  • 31. IBM WebSphere Application Server WebSphere AS v8.5.5 • Have to remove embedded server. • Have to downgrade JPA and Hibernate.
  • 32. From Spring Framework To Spring Boot 1. Create intermediate project incorporating Spring Boot. 2. Remove functions duplicated to Spring Boot. 3. Pull up @Configuration as AutoConfiguration. 4. Extract application properties.