SlideShare a Scribd company logo
Centralized Application Configuration 
with Spring and Apache ZooKeeper 
By Ryan Gardner, Dealer.com 
© 2014 SpringOne 2GX. All rights reserved. Do not distribute without permission.
How do you configure your applications? 
2 
http://b.socrative.com/login/student/ 
config2gx
Who is Dealer.com? 
We make software that car dealers use 
to fulfill their digital marketing vision. 
3
The Remote Configuration Project 
4
Some ways we had configured our applications 
• Hardcoded values in code 
• Properties file – per environment or merged 
• Host files for database 
• JNDI context files 
5
Motivating factors 
• Developer Efficiency 
• Redeploying an application just to change a configuration is a drag 
• Having to edit N config files whenever a single application changed is a 
hassle 
• Security Compliance 
• Limit access to production databases 
• Auditing and approval process for configuration changes 
• Systems Engineering 
• Can’t make certain changes without involving developers 
6
Framework Development – Guns n Roses style 
"Welcome to the jungle" 
Thanks. 
"We've got fun and games" 
Cool. 
"You're in the jungle" 
We've established this 
"You're gonna die!" 
Wait what? 
https://twitter.com/OhNoSheTwitnt/status/469838190141255680 
7
High Level Overview 
8
Three main components 
9
10
Key Concepts in the Remote Configuration 
Configuration 
A set of properties or values necessary to create an object. 
Examples: 
Database configuration, FTP endpoint configuration, 
HTTP Proxy Factory Bean Configuration, 
11
Tripoli – editing a configuration 
12
Separation of environments 
• We edit our configurations in one spot, but applications are only 
able to retrieve configurations for the environment they are 
running in 
• Secrets – such as passwords or encryption keys – are encrypted 
with an environment-specific key 
• Tripoli has all the keys, each environment will only have a key specific to it 
13
Configuration inheritance – avoiding copy & paste 
By Environment 
• Configuration can be set at a global level 
and overridden at each environment 
By Path 
• Nodes added with /’s in the name will inherit data from nodes 
above them. 
• /remoting/core-services/UserLocator inherits values from 
/remoting/core-services 
14
Key Concepts in the Remote Configuration 
Bindings 
Identifying which configurations an application uses, and what 
the application wants to call them 
Example: An application that needs to talk to a certain database, look up users 
from a remote service, and send data to a remote SFTP site would have bindings 
such as: 
jdbc/user-database is bound to the configuration called user-database-config 
15
Tripoli – editing bindings 
16
Creating objects, not properties* 
• Configure once – use everywhere 
• Avoid having to copy-and-paste boilerplate setup code 
* properties are supported too 
17
Behind the Scenes 
18
Apache Zookeeper 
• Hierarchical data registers 
• Designed for high-throughput, low-latency, highly-available 
• Nodes in zookeeper are called “znodes” 
• Each path can stored data 
• Designed for storing small amounts of data in the znodes 
(KB, not MB) 
• For more info: 
• https://cwiki.apache.org/confluence/display/ZOOKEEPER/ProjectDescriptio 
n 
19
Where do we store this data? 
20 
• Versioned configuration in ZooKeeper as JSON 
• In ZooKeeper znodes: 
• /bindings/<binding name> 
overrides: 
• /bindings/<habitat>/<datacenter>/<binding name> 
• /configurations/<configuration name>/
Talking to ZooKeeper 
• Use Curator framework 
• We use ACLs in ZooKeeper ensure apps can’t read data for 
other environments 
• We use a SASL config file on the machines to provide the 
ZooKeeper credentials 
21
Exhibitor – makes managing ZooKeeper easier 
22
How do the objects get created? 
• Two classes for each remotely-configurable object, 
the config and the creator 
• Configs use bean-validation annotations and a special annotation 
on the config-field to explain what the config field does. 
• This populates the tool-tips in the browser window and is used to ensure 
that only valid entries are put into the fields 
23
An example config class 
24 
@ConfigCategory("ftp”) 
public class SpringIntegrationSftpSessionFactoryConfig extends Config { 
@Required 
@ConfigField(description = "The host name of the SFTP server.”) 
private String host; 
@Port 
@ConfigField(description = "The port of the SFTP server. Defaults to 22.”) 
private Integer port; 
…
A config class (continued) 
25 
@Required 
@Password 
@ConfigField(description = "The private key used to establish the SFTP 
connection.”) 
private ConfigPassword privateKey; 
@Password 
@ConfigField(description = "The passphrase for the private key. Defaults to 
empty string.”) 
private ConfigPassword privateKeyPassphrase;
Creators take the config and return an object 
26 
public class ExampleObjectCreator extends 
ObjectCreator<SomeConfig,ExampleObject> { 
@Override 
public ExampleObject create(SomeConfig) { 
// do whatever is needed to create the object 
return new ExampleObject(); 
} 
}
Kinds of creators we have made 
• Database connection (various connection pools) 
• Mongo connection pools 
• RPC remoting proxies (Spring HTTP Invoker, etc) 
• REST resources 
• Redis connections 
• Properties / System properties 
• FTP and SFTP connections 
• Executor services 
• RabbitMQ 
• SOLR 
• ElasticSearch 
• … more 
27
How do apps use this? 
28
First pass – XML namespace parser 
29 
<beans … xmlns:remote-config=“http://www.dealer.com/schema/remote-config” 
…> 
<remote-config:lookup id="dataSource" name=”jdbc/my-datasource" /> 
<remote-config:remote-config-property-source id="myProps" 
name="properties/my-props" /> 
</beans>
Second pass – Auto-config with XML 
30 
<beans … xmlns:remote-config=“http://www.dealer.com/schema/remote-config” 
…> 
… 
<remote-config:auto-create /> 
… 
</beans>
Third pass - @EnableRemoteConfig 
31 
@EnableRemoteConfig 
public class ApplicationConfig { 
// insert tweetable app here. 
}
Accessing properties 
32
Integrating remote properties into spring 
• We create a PropertySource 
• And we create a PropertySourcesPlaceholderConfigurer 
33
Using properties via @Value 
34 
@Bean 
public SomeBean someBean (@Value(“${some.value}”) someValue) { 
return new SomeBean(someValue) 
} 
… 
@Value(“${some.remote.property.value}”) 
private String someValue;
Deeper dive – demo & 
look at some of the code 
35
Future plans & extensions for this 
36
Questions? 
37
38 
Learn More. Stay Connected 
Tweet: “#s2gx talk about zookeeper blew my mind! 
Thanks @ryebrye and @springcentral” 
@springcentral | spring.io/video

More Related Content

KEY
Exhibitor Introduction
PPTX
So we're running Apache ZooKeeper. Now What? By Camille Fournier
PDF
zookeeperProgrammers
PDF
Apache ZooKeeper TechTuesday
PDF
Introduction to ZooKeeper - TriHUG May 22, 2012
PPTX
Meetup on Apache Zookeeper
KEY
Curator intro
PDF
Zookeeper In Action
Exhibitor Introduction
So we're running Apache ZooKeeper. Now What? By Camille Fournier
zookeeperProgrammers
Apache ZooKeeper TechTuesday
Introduction to ZooKeeper - TriHUG May 22, 2012
Meetup on Apache Zookeeper
Curator intro
Zookeeper In Action

What's hot (20)

PPT
Zookeeper Introduce
PPTX
Apache zookeeper seminar_trinh_viet_dung_03_2016
PDF
ZooKeeper - wait free protocol for coordinating processes
PDF
[오픈소스컨설팅] EFK Stack 소개와 설치 방법
PPTX
Winter is coming? Not if ZooKeeper is there!
PPTX
Introduction to Apache ZooKeeper
PDF
Distributed system coordination by zookeeper and introduction to kazoo python...
PDF
How to Run Solr on Docker and Why
PPT
Python Deployment with Fabric
PDF
Ansible not only for Dummies
PPTX
Running High Performance & Fault-tolerant Elasticsearch Clusters on Docker
PPTX
Introduction to apache zoo keeper
PDF
Software development practices in python
PDF
Supercharging Content Delivery with Varnish
PDF
Apache Zookeeper
PDF
Setup 3 Node Kafka Cluster on AWS - Hands On
PDF
Experiences from Running Masterless Puppet - PuppetConf 2014
PDF
Australian OpenStack User Group August 2012: Chef for OpenStack
PDF
Puppet Camp Charlotte 2015: Exporting Resources: There and Back Again
PPTX
Developing distributed applications with Akka and Akka Cluster
Zookeeper Introduce
Apache zookeeper seminar_trinh_viet_dung_03_2016
ZooKeeper - wait free protocol for coordinating processes
[오픈소스컨설팅] EFK Stack 소개와 설치 방법
Winter is coming? Not if ZooKeeper is there!
Introduction to Apache ZooKeeper
Distributed system coordination by zookeeper and introduction to kazoo python...
How to Run Solr on Docker and Why
Python Deployment with Fabric
Ansible not only for Dummies
Running High Performance & Fault-tolerant Elasticsearch Clusters on Docker
Introduction to apache zoo keeper
Software development practices in python
Supercharging Content Delivery with Varnish
Apache Zookeeper
Setup 3 Node Kafka Cluster on AWS - Hands On
Experiences from Running Masterless Puppet - PuppetConf 2014
Australian OpenStack User Group August 2012: Chef for OpenStack
Puppet Camp Charlotte 2015: Exporting Resources: There and Back Again
Developing distributed applications with Akka and Akka Cluster
Ad

Viewers also liked (18)

PDF
Dynamic Reconfiguration of Apache ZooKeeper
PDF
Resource Handling in Spring MVC 4.1
PDF
Taming Pythons with ZooKeeper (Pyconfi edition)
PPTX
Distributed Applications with Apache Zookeeper
PDF
Comparing ZooKeeper and Consul
PDF
Apache ZooKeeper
PPT
Spring Boot with Quartz
PDF
Taming Pythons with ZooKeeper
PDF
ZooKeeper Futures
PPTX
ZooKeeper (and other things)
PDF
Zookeeper
PDF
ZooKeeper and Embedded ZooKeeper Support for IBM InfoSphere Streams V4.0
PPTX
Getting Started with Spring Boot
PDF
Overview of Zookeeper, Helix and Kafka (Oakjug)
PDF
Jcconf 2016 zookeeper
PDF
Zookeeper
PDF
Apache Zookeeper 分布式服务框架
PDF
Spring Boot
Dynamic Reconfiguration of Apache ZooKeeper
Resource Handling in Spring MVC 4.1
Taming Pythons with ZooKeeper (Pyconfi edition)
Distributed Applications with Apache Zookeeper
Comparing ZooKeeper and Consul
Apache ZooKeeper
Spring Boot with Quartz
Taming Pythons with ZooKeeper
ZooKeeper Futures
ZooKeeper (and other things)
Zookeeper
ZooKeeper and Embedded ZooKeeper Support for IBM InfoSphere Streams V4.0
Getting Started with Spring Boot
Overview of Zookeeper, Helix and Kafka (Oakjug)
Jcconf 2016 zookeeper
Zookeeper
Apache Zookeeper 分布式服务框架
Spring Boot
Ad

Similar to Centralized Application Configuration with Spring and Apache Zookeeper (20)

PDF
AAI-3218 Production Deployment Best Practices for WebSphere Liberty Profile
PDF
Cloud Best Practices
PDF
dokumen.tips_rediscovering-spring-with-spring-boot1 (1).pdf
PDF
dokumen.tips_rediscovering-spring-with-spring-boot1.pdf
PDF
Rediscovering Spring with Spring Boot(1)
PDF
quickguide-einnovator-8-spring-cloud
PPT
Spring 3.1: a Walking Tour
KEY
Multi Client Development with Spring
PPTX
Spring @configuration - So Long Spring XMLs
PDF
Introduction to Spring Framework
PDF
Scalarium and CouchDB
PPTX
TFI2014 Session I - State of SDN - Karen “Shelly” Cadora
ODP
Microservices Patterns and Anti-Patterns
PDF
From Spring Boot 2.2 to Spring Boot 2.3 #jsug
PDF
Spring 3.1 in a Nutshell
PPTX
Spring 3.1 to 3.2 in a Nutshell - Spring I/O 2012
PDF
The Lazy Developer's Guide to Cloud Foundry - Holly Cummins
PPTX
Spring Basics
PDF
Externalized Distributed Configuration Management with Spring Cloud Config-Se...
KEY
Multi client Development with Spring
AAI-3218 Production Deployment Best Practices for WebSphere Liberty Profile
Cloud Best Practices
dokumen.tips_rediscovering-spring-with-spring-boot1 (1).pdf
dokumen.tips_rediscovering-spring-with-spring-boot1.pdf
Rediscovering Spring with Spring Boot(1)
quickguide-einnovator-8-spring-cloud
Spring 3.1: a Walking Tour
Multi Client Development with Spring
Spring @configuration - So Long Spring XMLs
Introduction to Spring Framework
Scalarium and CouchDB
TFI2014 Session I - State of SDN - Karen “Shelly” Cadora
Microservices Patterns and Anti-Patterns
From Spring Boot 2.2 to Spring Boot 2.3 #jsug
Spring 3.1 in a Nutshell
Spring 3.1 to 3.2 in a Nutshell - Spring I/O 2012
The Lazy Developer's Guide to Cloud Foundry - Holly Cummins
Spring Basics
Externalized Distributed Configuration Management with Spring Cloud Config-Se...
Multi client Development with Spring

Recently uploaded (20)

PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PDF
Electronic commerce courselecture one. Pdf
PDF
A comparative analysis of optical character recognition models for extracting...
PPTX
Machine Learning_overview_presentation.pptx
PPTX
1. Introduction to Computer Programming.pptx
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Accuracy of neural networks in brain wave diagnosis of schizophrenia
PPTX
Big Data Technologies - Introduction.pptx
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PPTX
Tartificialntelligence_presentation.pptx
PDF
NewMind AI Weekly Chronicles - August'25-Week II
PDF
Unlocking AI with Model Context Protocol (MCP)
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PPTX
Programs and apps: productivity, graphics, security and other tools
Mobile App Security Testing_ A Comprehensive Guide.pdf
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
gpt5_lecture_notes_comprehensive_20250812015547.pdf
Electronic commerce courselecture one. Pdf
A comparative analysis of optical character recognition models for extracting...
Machine Learning_overview_presentation.pptx
1. Introduction to Computer Programming.pptx
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Accuracy of neural networks in brain wave diagnosis of schizophrenia
Big Data Technologies - Introduction.pptx
20250228 LYD VKU AI Blended-Learning.pptx
Tartificialntelligence_presentation.pptx
NewMind AI Weekly Chronicles - August'25-Week II
Unlocking AI with Model Context Protocol (MCP)
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Dropbox Q2 2025 Financial Results & Investor Presentation
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Diabetes mellitus diagnosis method based random forest with bat algorithm
Assigned Numbers - 2025 - Bluetooth® Document
Programs and apps: productivity, graphics, security and other tools

Centralized Application Configuration with Spring and Apache Zookeeper

  • 1. Centralized Application Configuration with Spring and Apache ZooKeeper By Ryan Gardner, Dealer.com © 2014 SpringOne 2GX. All rights reserved. Do not distribute without permission.
  • 2. How do you configure your applications? 2 http://b.socrative.com/login/student/ config2gx
  • 3. Who is Dealer.com? We make software that car dealers use to fulfill their digital marketing vision. 3
  • 5. Some ways we had configured our applications • Hardcoded values in code • Properties file – per environment or merged • Host files for database • JNDI context files 5
  • 6. Motivating factors • Developer Efficiency • Redeploying an application just to change a configuration is a drag • Having to edit N config files whenever a single application changed is a hassle • Security Compliance • Limit access to production databases • Auditing and approval process for configuration changes • Systems Engineering • Can’t make certain changes without involving developers 6
  • 7. Framework Development – Guns n Roses style "Welcome to the jungle" Thanks. "We've got fun and games" Cool. "You're in the jungle" We've established this "You're gonna die!" Wait what? https://twitter.com/OhNoSheTwitnt/status/469838190141255680 7
  • 10. 10
  • 11. Key Concepts in the Remote Configuration Configuration A set of properties or values necessary to create an object. Examples: Database configuration, FTP endpoint configuration, HTTP Proxy Factory Bean Configuration, 11
  • 12. Tripoli – editing a configuration 12
  • 13. Separation of environments • We edit our configurations in one spot, but applications are only able to retrieve configurations for the environment they are running in • Secrets – such as passwords or encryption keys – are encrypted with an environment-specific key • Tripoli has all the keys, each environment will only have a key specific to it 13
  • 14. Configuration inheritance – avoiding copy & paste By Environment • Configuration can be set at a global level and overridden at each environment By Path • Nodes added with /’s in the name will inherit data from nodes above them. • /remoting/core-services/UserLocator inherits values from /remoting/core-services 14
  • 15. Key Concepts in the Remote Configuration Bindings Identifying which configurations an application uses, and what the application wants to call them Example: An application that needs to talk to a certain database, look up users from a remote service, and send data to a remote SFTP site would have bindings such as: jdbc/user-database is bound to the configuration called user-database-config 15
  • 16. Tripoli – editing bindings 16
  • 17. Creating objects, not properties* • Configure once – use everywhere • Avoid having to copy-and-paste boilerplate setup code * properties are supported too 17
  • 19. Apache Zookeeper • Hierarchical data registers • Designed for high-throughput, low-latency, highly-available • Nodes in zookeeper are called “znodes” • Each path can stored data • Designed for storing small amounts of data in the znodes (KB, not MB) • For more info: • https://cwiki.apache.org/confluence/display/ZOOKEEPER/ProjectDescriptio n 19
  • 20. Where do we store this data? 20 • Versioned configuration in ZooKeeper as JSON • In ZooKeeper znodes: • /bindings/<binding name> overrides: • /bindings/<habitat>/<datacenter>/<binding name> • /configurations/<configuration name>/
  • 21. Talking to ZooKeeper • Use Curator framework • We use ACLs in ZooKeeper ensure apps can’t read data for other environments • We use a SASL config file on the machines to provide the ZooKeeper credentials 21
  • 22. Exhibitor – makes managing ZooKeeper easier 22
  • 23. How do the objects get created? • Two classes for each remotely-configurable object, the config and the creator • Configs use bean-validation annotations and a special annotation on the config-field to explain what the config field does. • This populates the tool-tips in the browser window and is used to ensure that only valid entries are put into the fields 23
  • 24. An example config class 24 @ConfigCategory("ftp”) public class SpringIntegrationSftpSessionFactoryConfig extends Config { @Required @ConfigField(description = "The host name of the SFTP server.”) private String host; @Port @ConfigField(description = "The port of the SFTP server. Defaults to 22.”) private Integer port; …
  • 25. A config class (continued) 25 @Required @Password @ConfigField(description = "The private key used to establish the SFTP connection.”) private ConfigPassword privateKey; @Password @ConfigField(description = "The passphrase for the private key. Defaults to empty string.”) private ConfigPassword privateKeyPassphrase;
  • 26. Creators take the config and return an object 26 public class ExampleObjectCreator extends ObjectCreator<SomeConfig,ExampleObject> { @Override public ExampleObject create(SomeConfig) { // do whatever is needed to create the object return new ExampleObject(); } }
  • 27. Kinds of creators we have made • Database connection (various connection pools) • Mongo connection pools • RPC remoting proxies (Spring HTTP Invoker, etc) • REST resources • Redis connections • Properties / System properties • FTP and SFTP connections • Executor services • RabbitMQ • SOLR • ElasticSearch • … more 27
  • 28. How do apps use this? 28
  • 29. First pass – XML namespace parser 29 <beans … xmlns:remote-config=“http://www.dealer.com/schema/remote-config” …> <remote-config:lookup id="dataSource" name=”jdbc/my-datasource" /> <remote-config:remote-config-property-source id="myProps" name="properties/my-props" /> </beans>
  • 30. Second pass – Auto-config with XML 30 <beans … xmlns:remote-config=“http://www.dealer.com/schema/remote-config” …> … <remote-config:auto-create /> … </beans>
  • 31. Third pass - @EnableRemoteConfig 31 @EnableRemoteConfig public class ApplicationConfig { // insert tweetable app here. }
  • 33. Integrating remote properties into spring • We create a PropertySource • And we create a PropertySourcesPlaceholderConfigurer 33
  • 34. Using properties via @Value 34 @Bean public SomeBean someBean (@Value(“${some.value}”) someValue) { return new SomeBean(someValue) } … @Value(“${some.remote.property.value}”) private String someValue;
  • 35. Deeper dive – demo & look at some of the code 35
  • 36. Future plans & extensions for this 36
  • 38. 38 Learn More. Stay Connected Tweet: “#s2gx talk about zookeeper blew my mind! Thanks @ryebrye and @springcentral” @springcentral | spring.io/video

Editor's Notes

  • #4: Websites Advertising Inventory management Analytics CRM (and more)
  • #5: There is a slide shown at the keynotes -
  • #8: There are often surprises as you develop things – you think you are on the right path but then… wooops.
  • #18: How many people have ever started a project, realized they needed a certain data source – so they went to another project that they had opened and then copied the configuration out of it and pasted it into the new one.
  • #21: Apache Zookeeper. Good project. Horible logo. “ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services. “
  • #31: Simplify cruft – eliminate duplicate entry… but… still XML
  • #32: We can now create tweetable apps that run in any of our environments and use the proper datasources or service endpoints for that environment.
  • #34: Transparently use @Value annotated properties in your classes.
  • #36: Look at property sources configurer. Point out bean definitions vs beans. Look at a creator or two.