100% found this document useful (3 votes)
114 views

Download Complete Learn Microservices with Spring Boot 3: A Practical Approach Using Event-Driven Architecture, Cloud-Native Patterns, and Containerization 3rd Edition Moisés Macero García PDF for All Chapters

Microservices

Uploaded by

scoutarvie0m
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (3 votes)
114 views

Download Complete Learn Microservices with Spring Boot 3: A Practical Approach Using Event-Driven Architecture, Cloud-Native Patterns, and Containerization 3rd Edition Moisés Macero García PDF for All Chapters

Microservices

Uploaded by

scoutarvie0m
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 41

Download the Full Version of ebook for Fast Typing at ebookmass.

com

Learn Microservices with Spring Boot 3: A


Practical Approach Using Event-Driven
Architecture, Cloud-Native Patterns, and
Containerization 3rd Edition Moisés Macero García
https://ebookmass.com/product/learn-microservices-with-
spring-boot-3-a-practical-approach-using-event-driven-
architecture-cloud-native-patterns-and-containerization-3rd-
edition-moises-macero-garcia/

OR CLICK BUTTON

DOWNLOAD NOW

Download More ebook Instantly Today - Get Yours Now at ebookmass.com


Recommended digital products (PDF, EPUB, MOBI) that
you can download immediately if you are interested.

Learn Microservices with Spring Boot 3 3rd / converted


Edition Moises Macero Garcia

https://ebookmass.com/product/learn-microservices-with-spring-
boot-3-3rd-converted-edition-moises-macero-garcia/

ebookmass.com

Beginning Spring Boot 3: Build Dynamic Cloud-Native Java


Applications and Microservices - Second Edition K. Siva
Prasad Reddy
https://ebookmass.com/product/beginning-spring-boot-3-build-dynamic-
cloud-native-java-applications-and-microservices-second-edition-k-
siva-prasad-reddy/
ebookmass.com

Practical Spring Cloud Function: Developing Cloud-Native


Functions for Multi-Cloud and Hybrid-Cloud Environments
1st Edition Banu Parasuraman
https://ebookmass.com/product/practical-spring-cloud-function-
developing-cloud-native-functions-for-multi-cloud-and-hybrid-cloud-
environments-1st-edition-banu-parasuraman-2/
ebookmass.com

Practical Spring Cloud Function: Developing Cloud-Native


Functions for Multi-Cloud and Hybrid-Cloud Environments
1st Edition Banu Parasuraman
https://ebookmass.com/product/practical-spring-cloud-function-
developing-cloud-native-functions-for-multi-cloud-and-hybrid-cloud-
environments-1st-edition-banu-parasuraman/
ebookmass.com
Hacking with Spring Boot 2.3: Reactive Edition

https://ebookmass.com/product/hacking-with-spring-boot-2-3-reactive-
edition/

ebookmass.com

Modern Enterprise Architecture: Using DevSecOps and Cloud-


Native in Large Enterprises 1st Edition Jeroen Mulder

https://ebookmass.com/product/modern-enterprise-architecture-using-
devsecops-and-cloud-native-in-large-enterprises-1st-edition-jeroen-
mulder/
ebookmass.com

Beginning Helidon: Building Cloud-Native Microservices and


Applications 1st Edition Dmitry Kornilov

https://ebookmass.com/product/beginning-helidon-building-cloud-native-
microservices-and-applications-1st-edition-dmitry-kornilov-2/

ebookmass.com

Beginning Helidon: Building Cloud-Native Microservices and


Applications 1st Edition Dmitry Kornilov

https://ebookmass.com/product/beginning-helidon-building-cloud-native-
microservices-and-applications-1st-edition-dmitry-kornilov/

ebookmass.com

Software Development with Go: Cloud-Native Programming


using Golang with Linux and Docker 1st Edition Nanik
Tolaram
https://ebookmass.com/product/software-development-with-go-cloud-
native-programming-using-golang-with-linux-and-docker-1st-edition-
nanik-tolaram/
ebookmass.com
Learn Microservices
with Spring Boot 3
A Practical Approach Using Event-Driven
Architecture, Cloud-Native Patterns, and
Containerization

Third Edition

Moisés Macero García
Tarun Telang
Learn Microservices
with Spring Boot 3
A Practical Approach Using
Event-­Driven Architecture,
Cloud-Native Patterns,
and Containerization
Third Edition

Moisés Macero García


Tarun Telang
Learn Microservices with Spring Boot 3: A Practical Approach Using Event-Driven
Architecture, Cloud-Native Patterns, and Containerization, Third Edition
Moisés Macero García Tarun Telang
New York, NY, USA Hyderabad, Telangana, India

ISBN-13 (pbk): 978-1-4842-9756-8 ISBN-13 (electronic): 978-1-4842-9757-5


https://doi.org/10.1007/978-1-4842-9757-5

Copyright © 2023 by Moisés Macero García and Tarun Telang


This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the
material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation,
broadcasting, reproduction on microfilms or in any other physical way, and transmission or information
storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now
known or hereafter developed.
Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with
every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an
editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the
trademark.
The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not
identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to
proprietary rights.
While the advice and information in this book are believed to be true and accurate at the date of publication,
neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or
omissions that may be made. The publisher makes no warranty, express or implied, with respect to the
material contained herein.
Managing Director, Apress Media LLC: Welmoed Spahr
Acquisitions Editor: Melissa Duffy
Development Editor: Laura Berendson
Coordinating Editor: Gryffin Winkler
Copy Editor: Kezia Endsley
Cover designed by eStudioCalamar
Cover image by Image by James DeMers on Pixabay (www.pixabay.com)
Distributed to the book trade worldwide by Apress Media, LLC, 1 New York Plaza, New York, NY 10004,
U.S.A. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail orders-ny@springer-sbm.com, or visit
www.springeronline.com. Apress Media, LLC is a California LLC and the sole member (owner) is Springer
Science + Business Media Finance Inc (SSBM Finance Inc). SSBM Finance Inc is a Delaware corporation.
For information on translations, please e-mail booktranslations@springernature.com; for reprint,
paperback, or audio rights, please e-mail bookpermissions@springernature.com.
Apress titles may be purchased in bulk for academic, corporate, or promotional use. eBook versions and
licenses are also available for most titles. For more information, reference our Print and eBook Bulk Sales
web page at http://www.apress.com/bulk-sales.
Any source code or other supplementary material referenced by the author in this book is available to
readers on GitHub (https://github.com/Apress). For more detailed information, please visit https://www.
apress.com/gp/services/source-code.
Paper in this product is recyclable
This book is dedicated to my grandparents, parents, wife Nikita, and
son Vihan. They have always been a source of inspiration and
encouragement to me. It’s also for all of the software and technology
creators who work hard to make our planet a better place to live.
—Tarun Telang
Table of Contents
About the Authors�������������������������������������������������������������������������������������������������� xiii

About the Technical Reviewer���������������������������������������������������������������������������������xv

Acknowledgments�������������������������������������������������������������������������������������������������xvii

About this Book������������������������������������������������������������������������������������������������������xix

Chapter 1: Setting the Scene������������������������������������������������������������������������������������ 1


Who Are You?�������������������������������������������������������������������������������������������������������������������������������� 3
How Is This Book Different from Other Books and Guides?���������������������������������������������������������� 5
Learning: An Incremental Process������������������������������������������������������������������������������������������� 5
Is This a Guide or a Book?������������������������������������������������������������������������������������������������������� 5
From Basics to Advanced Topics��������������������������������������������������������������������������������������������������� 6
Skeleton with Spring Boot, the Professional Way�������������������������������������������������������������������� 7
Test-Driven Development�������������������������������������������������������������������������������������������������������� 7
Microservices�������������������������������������������������������������������������������������������������������������������������� 7
Event-Driven Systems������������������������������������������������������������������������������������������������������������� 8
Nonfunctional Requirements��������������������������������������������������������������������������������������������������� 8
Online Content������������������������������������������������������������������������������������������������������������������������������ 9
Summary�������������������������������������������������������������������������������������������������������������������������������������� 9

Chapter 2: Basic Concepts�������������������������������������������������������������������������������������� 11


Spring����������������������������������������������������������������������������������������������������������������������������������������� 11
Spring Boot��������������������������������������������������������������������������������������������������������������������������������� 16
Lombok and Java������������������������������������������������������������������������������������������������������������������������ 18
Testing Basics����������������������������������������������������������������������������������������������������������������������������� 21
Test-Driven Development������������������������������������������������������������������������������������������������������ 21
Behavior-Driven Development����������������������������������������������������������������������������������������������� 22

v
Table of Contents

JUnit 5����������������������������������������������������������������������������������������������������������������������������������� 23
Mockito���������������������������������������������������������������������������������������������������������������������������������� 23
AssertJ���������������������������������������������������������������������������������������������������������������������������������� 27
Testing in Spring Boot����������������������������������������������������������������������������������������������������������������� 28
Logging��������������������������������������������������������������������������������������������������������������������������������������� 29
Summary and Achievements������������������������������������������������������������������������������������������������������ 30

Chapter 3: A Basic Spring Boot Application����������������������������������������������������������� 33


Setting Up the Development Environment���������������������������������������������������������������������������������� 34
Java Development Kit 17������������������������������������������������������������������������������������������������������� 34
Integrated Development Environment (IDE)��������������������������������������������������������������������������� 34
HTTPie����������������������������������������������������������������������������������������������������������������������������������� 35
POST Request������������������������������������������������������������������������������������������������������������������������ 36
cURL�������������������������������������������������������������������������������������������������������������������������������������� 36
The Skeleton Web App���������������������������������������������������������������������������������������������������������������� 36
Spring Boot Autoconfiguration���������������������������������������������������������������������������������������������������� 41
Three-Tier, Three-Layer Architecture������������������������������������������������������������������������������������������ 47
Modeling the Domain������������������������������������������������������������������������������������������������������������������ 50
Domain Definition and Domain-Driven Design���������������������������������������������������������������������� 50
Domain Classes��������������������������������������������������������������������������������������������������������������������� 52
Business Logic���������������������������������������������������������������������������������������������������������������������������� 55
What You Need���������������������������������������������������������������������������������������������������������������������� 55
Random Challenges��������������������������������������������������������������������������������������������������������������� 55
Attempt Verification��������������������������������������������������������������������������������������������������������������� 59
Presentation Layer���������������������������������������������������������������������������������������������������������������������� 64
REST�������������������������������������������������������������������������������������������������������������������������������������� 64
REST APIs with Spring Boot��������������������������������������������������������������������������������������������������� 65
Designing the APIs����������������������������������������������������������������������������������������������������������������� 66
Your First Controller��������������������������������������������������������������������������������������������������������������� 67
How Automatic Serialization Works��������������������������������������������������������������������������������������� 69
Testing Controllers with Spring Boot������������������������������������������������������������������������������������� 73
Summary and Achievements������������������������������������������������������������������������������������������������������ 86

vi
Table of Contents

Chapter 4: A Minimal Frontend with React������������������������������������������������������������� 89


A Quick Intro to React and Node������������������������������������������������������������������������������������������������� 90
Setting Up the Development Environment���������������������������������������������������������������������������������� 91
The React Skeleton��������������������������������������������������������������������������������������������������������������������� 92
A JavaScript Client���������������������������������������������������������������������������������������������������������������������� 94
The Challenge Component���������������������������������������������������������������������������������������������������������� 96
The Main Structure of a Component�������������������������������������������������������������������������������������� 99
Rendering���������������������������������������������������������������������������������������������������������������������������� 101
Integration with the App������������������������������������������������������������������������������������������������������ 104
Running the Frontend the First Time����������������������������������������������������������������������������������������� 105
Debugging��������������������������������������������������������������������������������������������������������������������������������� 105
Adding CORS Configuration to the Spring Boot App������������������������������������������������������������������ 107
Playing with the Application������������������������������������������������������������������������������������������������������ 108
Deploying the React App����������������������������������������������������������������������������������������������������������� 109
Summary and Achievements���������������������������������������������������������������������������������������������������� 112

Chapter 5: The Data Layer������������������������������������������������������������������������������������ 115


The Data Model������������������������������������������������������������������������������������������������������������������������� 117
Choosing a Database���������������������������������������������������������������������������������������������������������������� 119
SQL vs. NoSQL��������������������������������������������������������������������������������������������������������������������� 121
H2, Hibernate, and JPA�������������������������������������������������������������������������������������������������������� 122
Spring Boot Data JPA���������������������������������������������������������������������������������������������������������������� 123
Dependencies and Autoconfiguration���������������������������������������������������������������������������������� 123
Spring Boot Data JPA Technology Stack������������������������������������������������������������������������������ 128
Data Source (Auto)configuration����������������������������������������������������������������������������������������� 130
Entities�������������������������������������������������������������������������������������������������������������������������������������� 132
Repositories������������������������������������������������������������������������������������������������������������������������������ 137
Storing Users and Attempts������������������������������������������������������������������������������������������������������ 141
Displaying Last Attempts���������������������������������������������������������������������������������������������������������� 147
Service Layer����������������������������������������������������������������������������������������������������������������������� 147

vii
Table of Contents

Controller Layer������������������������������������������������������������������������������������������������������������������� 149


User Interface���������������������������������������������������������������������������������������������������������������������� 155
Playing with the New Feature��������������������������������������������������������������������������������������������������� 163
Summary and Achievements���������������������������������������������������������������������������������������������������� 165

Chapter 6: Starting with Microservices���������������������������������������������������������������� 169


The Small Monolith Approach��������������������������������������������������������������������������������������������������� 170
Why a Small Monolith?������������������������������������������������������������������������������������������������������������� 170
The Problems with Microservices from Day Zero���������������������������������������������������������������� 170
Small Monoliths Are for Small Teams���������������������������������������������������������������������������������� 171
Embracing Refactoring�������������������������������������������������������������������������������������������������������� 172
Planning the Small Monolith for a Future Split������������������������������������������������������������������������� 173
New Requirements and Gamification��������������������������������������������������������������������������������������� 174
Gamification: Points, Badges, and Leaderboards���������������������������������������������������������������� 175
Moving to Microservices����������������������������������������������������������������������������������������������������������� 176
Independent Workflows������������������������������������������������������������������������������������������������������� 177
Horizontal vs. Vertical Scalability���������������������������������������������������������������������������������������� 178
Fine-Grained Nonfunctional Requirements������������������������������������������������������������������������� 180
Other Advantages���������������������������������������������������������������������������������������������������������������� 180
Disadvantages��������������������������������������������������������������������������������������������������������������������� 181
Architecture Overview�������������������������������������������������������������������������������������������������������������� 183
Designing and Implementing the New Service������������������������������������������������������������������������� 185
Interfaces���������������������������������������������������������������������������������������������������������������������������� 186
The Spring Boot Skeleton for Gamification������������������������������������������������������������������������� 186
Domain�������������������������������������������������������������������������������������������������������������������������������� 187
Service�������������������������������������������������������������������������������������������������������������������������������� 192
Data������������������������������������������������������������������������������������������������������������������������������������� 204
Controller����������������������������������������������������������������������������������������������������������������������������� 207
Configuration����������������������������������������������������������������������������������������������������������������������� 209
Changes in Multiplication Microservice������������������������������������������������������������������������������ 211
UI����������������������������������������������������������������������������������������������������������������������������������������� 216
Playing with the System����������������������������������������������������������������������������������������������������������� 222

viii
Table of Contents

Fault Tolerance�������������������������������������������������������������������������������������������������������������������������� 224


The Challenges Ahead��������������������������������������������������������������������������������������������������������������� 226
Tight Coupling���������������������������������������������������������������������������������������������������������������������� 227
Synchronous Interfaces vs. Eventual Consistency�������������������������������������������������������������� 227
Transactions������������������������������������������������������������������������������������������������������������������������ 232
API Exposure������������������������������������������������������������������������������������������������������������������������ 234
Summary and Achievements���������������������������������������������������������������������������������������������������� 234

Chapter 7: Event-Driven Architectures����������������������������������������������������������������� 237


Core Concepts��������������������������������������������������������������������������������������������������������������������������� 238
The Message Broker������������������������������������������������������������������������������������������������������������ 238
Events and Messages���������������������������������������������������������������������������������������������������������� 242
Thinking in Events��������������������������������������������������������������������������������������������������������������� 242
Asynchronous Messaging���������������������������������������������������������������������������������������������������� 248
Reactive Systems���������������������������������������������������������������������������������������������������������������� 251
Pros and Cons of Going Event-Driven��������������������������������������������������������������������������������������� 252
Messaging Patterns������������������������������������������������������������������������������������������������������������������ 255
Publish-Subscribe��������������������������������������������������������������������������������������������������������������� 256
Work Queues����������������������������������������������������������������������������������������������������������������������� 256
Filtering������������������������������������������������������������������������������������������������������������������������������� 256
Data Durability��������������������������������������������������������������������������������������������������������������������� 256
Message Broker Protocols, Standards, and Tools��������������������������������������������������������������������� 257
AMQP and RabbitMQ����������������������������������������������������������������������������������������������������������������� 259
Overall Description�������������������������������������������������������������������������������������������������������������� 259
Exchange Types and Routing����������������������������������������������������������������������������������������������� 260
Message Acknowledgments and Rejection������������������������������������������������������������������������� 263
Setting Up RabbitMQ����������������������������������������������������������������������������������������������������������������� 264
Spring AMQP and Spring Boot�������������������������������������������������������������������������������������������������� 266
Solution Design������������������������������������������������������������������������������������������������������������������������� 266
Adding the AMQP Starter����������������������������������������������������������������������������������������������������� 269
Event Publishing from Multiplication����������������������������������������������������������������������������������� 270
Gamification as a Subscriber���������������������������������������������������������������������������������������������� 277

ix
Table of Contents

Analysis of Scenarios���������������������������������������������������������������������������������������������������������������� 286


Happy Flow�������������������������������������������������������������������������������������������������������������������������� 288
Gamification Becomes Unavailable������������������������������������������������������������������������������������� 296
The Message Broker Becomes Unavailable������������������������������������������������������������������������ 298
Transactionality������������������������������������������������������������������������������������������������������������������� 300
Scaling Up Microservices���������������������������������������������������������������������������������������������������� 303
Summary and Achievements���������������������������������������������������������������������������������������������������� 309

Chapter 8: Common Patterns in Microservice Architectures������������������������������� 313


Gateway������������������������������������������������������������������������������������������������������������������������������������ 314
Spring Cloud Gateway��������������������������������������������������������������������������������������������������������� 316
The Gateway Microservice�������������������������������������������������������������������������������������������������� 321
Changes in Other Projects��������������������������������������������������������������������������������������������������� 326
Running the Gateway Microservice������������������������������������������������������������������������������������� 327
Next Steps��������������������������������������������������������������������������������������������������������������������������� 329
Health���������������������������������������������������������������������������������������������������������������������������������������� 330
Spring Boot Actuator����������������������������������������������������������������������������������������������������������� 331
Including Actuator in Your Microservices���������������������������������������������������������������������������� 334
Service Discovery and Load Balancing������������������������������������������������������������������������������������� 337
Consul���������������������������������������������������������������������������������������������������������������������������������� 343
Spring Cloud Consul������������������������������������������������������������������������������������������������������������ 345
Spring Cloud Load Balancer������������������������������������������������������������������������������������������������ 354
Service Discovery and Load Balancing in the Gateway������������������������������������������������������� 358
Playing with Service Discovery and Load Balancing����������������������������������������������������������� 362
Configuration per Environment������������������������������������������������������������������������������������������������� 372
Configuration in Consul������������������������������������������������������������������������������������������������������� 375
Spring Cloud Consul Config������������������������������������������������������������������������������������������������� 376
Implementing Centralized Configuration����������������������������������������������������������������������������� 378
Centralized Configuration in Practice���������������������������������������������������������������������������������� 382

x
Table of Contents

Centralized Logs����������������������������������������������������������������������������������������������������������������������� 389


Log Aggregation Pattern������������������������������������������������������������������������������������������������������ 389
A Simple Solution for Log Centralization����������������������������������������������������������������������������� 391
Consuming Logs and Printing Them������������������������������������������������������������������������������������ 395
Distributed Tracing�������������������������������������������������������������������������������������������������������������������� 402
Spring Cloud Sleuth������������������������������������������������������������������������������������������������������������� 403
Implementing Distributed Tracing��������������������������������������������������������������������������������������� 405
Containerization������������������������������������������������������������������������������������������������������������������������ 407
Docker��������������������������������������������������������������������������������������������������������������������������������� 410
Spring Boot and Buildpacks������������������������������������������������������������������������������������������������ 413
Running Your System in Docker������������������������������������������������������������������������������������������ 415
Dockerizing Microservices�������������������������������������������������������������������������������������������������� 417
Dockerizing the UI��������������������������������������������������������������������������������������������������������������� 417
Dockerizing the Configuration Importer������������������������������������������������������������������������������ 418
Docker Compose����������������������������������������������������������������������������������������������������������������� 421
Scaling Up the System with Docker������������������������������������������������������������������������������������ 435
Sharing Docker Images������������������������������������������������������������������������������������������������������� 438
Platforms and Cloud-Native Microservices������������������������������������������������������������������������������� 442
Container Platforms������������������������������������������������������������������������������������������������������������� 442
Application Platforms���������������������������������������������������������������������������������������������������������� 444
Cloud Providers������������������������������������������������������������������������������������������������������������������� 444
Making a Decision��������������������������������������������������������������������������������������������������������������� 446
Cloud-Native Microservices������������������������������������������������������������������������������������������������ 447
Conclusions������������������������������������������������������������������������������������������������������������������������������� 447

Index��������������������������������������������������������������������������������������������������������������������� 451

xi
About the Authors
Moisés Macero García has been a software developer since he was a kid, when he
started playing around with BASIC on his ZX Spectrum. During his career, Moisés has
most often worked in development and architecture for small and large projects, and
for his own startups as well. He enjoys making software problems simple, and he likes
working in teams, where he can coach others as well as learn from them. Moisés is the
author of the blog thepracticaldeveloper.com, where he shares solutions to technical
challenges, guides, and his view on different ways of working in IT companies. He
also organizes workshops for companies that need a practical approach to software
engineering. In his free time, he enjoys traveling and hiking.

Tarun Telang is a seasoned and hands-on technologist


with a wealth of experience in designing and implementing
highly scalable software applications. With an impressive
career spanning over 18 years, Tarun has been a valuable
contributor to renowned companies such as Microsoft,
Oracle, Polycom, and SAP. He began his career as an
enterprise Java developer at SAP, where he honed his skills
in crafting distributed business applications tailored for
large enterprises. Through his dedication to continuous
learning and professional development, he became an
Oracle Certified Java Programmer and SAP Certified Development Consultant for
Enterprise Java.
As a prolific author, Tarun frequently writes on Java and related technologies, and he
has authored many books and online courses. His earlier books Java EE to Jakarta EE 10
Recipes, and Beginning cloud-native development using MicroProfile, Jakarta EE and
Kubernetes have been well-received by the tech community. He has also been a sought-
after speaker at developer conferences like SAP TechEd and the Great Indian Developer
Summit, sharing his technical expertise with enthusiastic audiences. Tarun regularly
shares technological insights at www.practicaldeveloper.com.

xiii
About the Authors

Tarun’s expertise lies in architecting and developing large scale applications, with a
particular focus on cloud-­native solutions using cutting-edge architectural patterns like
microservices and event-driven architecture. He has led the development of numerous
end-to-end cloud-based solutions, demonstrating his deep technical understanding to
deliver high-performing, reliable, large-scale applications.
An advocate of agile methodologies, Tarun excels at applying domain-driven design
and behavioral-driven development principles, ensuring seamless project management
and collaboration across cross-functional teams in different geographical locations. His
international experience, having worked in India, Canada and Germany, has enriched
his global perspective and ability to adapt to diverse environments. Tarun lives in
Hyderabad, India, and he enjoys spending time with his wife and child when he’s not
indulging in his love of technology. You can follow Tarun or contact him on his Twitter
account: @taruntelang.

xiv
About the Technical Reviewer
Manuel Jordan Elera is an autodidactic developer and
researcher who enjoys learning new technologies for his
own experiments and creating new integrations. Manuel
won the Springy Award 2013 Community Champion and
Spring Champion. In his little free time, he reads the Bible
and composes music on his guitar. Manuel is known as
dr_pompeii. He has tech-reviewed numerous books,
including Pro Spring MVC with WebFlux (Apress, 2020),
Pro Spring Boot 2 (Apress, 2019), Rapid Java Persistence
and Microservices (Apress, 2019), Java Language Features
(Apress, 2018), Spring Boot 2 Recipes (Apress, 2018), and Java APIs, Extensions and
Libraries (Apress, 2018). You can read his detailed tutorials on Spring technologies and
contact him through his blog at www.manueljordanelera.blogspot.com. You can follow
Manuel on his Twitter account, @­ dr_pompeii.

xv
Acknowledgments
I would like to thank my wife, Nikita, and son, Vihan, for their patience
and love throughout the process of writing this book. I am indebted to all
my mentors and friends who always encouraged me to keep growing in
every phase of my professional career.
I’d like to thank my parents for pushing me in the right direction with tech-
nology and always supporting me every step of the way, even when I decided
to do something completely different than they expected. It’s also important
to note that without them, I probably wouldn’t have become a developer
and had such a great career. Lastly, thanks again go out to my wife (and
soulmate), Nikita. It’s an incredible feeling to be with someone who keeps
you motivated and challenges you, not only professionally but personally
as well.

Thank you for always being there for me!


I’d like to send a special thanks to Manuel Jordan (the technical reviewer),
for their impeccable work on this book. I also greatly appreciate Mark
Powers, and everyone at Apress Media (apress.com) for their support in
getting this book published.
Last, but not least, I would like to thank you, the reader, for taking the time
to read this book. We have tried our best through this book to offer you a
comprehensive, up-to-date, and practical guide that empowers you to build
sophisticated and resilient microservices architectures using Spring Boot.
—Tarun Telang

xvii
Discovering Diverse Content Through
Random Scribd Documents
VIII.

Ruusunpunainen puku.

Eikö ole kummallista, että Polle tanssii eikä Pyry, villikissa? Pyry
sanoo, joutuessaan tanssitilaisuuksiin: "Nyt minä en tanssi, vaikka
keisari pyytäisi!"

Mutta Polle, hiljainen ja ujo, tanssii. Ja hän väittää, että tanssi on


kokonainen elämä hänelle. Tässä maailmassa on niin paljon
merkillistä.

Pahinta on, että Polle pääsee niin harvoin tanssimaan, —


ensinnäkin koulu, ja sitten koti. Ne eivät kotona ollenkaan käsitä, että
tanssi voi olla kokonainen elämä. Ja kun hän sitten joskus pääsee ja
istuu pieneksi käyneessä valkoisessaan arkana ja hämillään, niin
kukapa häntä viitsisi tanssittaa montakaan kertaa! Siellä on niin
paljon hilpeitä tyttöjä, rohkeapuheisia ja muodikkaasti puettuja, niitä
on ilo pyöritellä.

Mutta nyt on Polle saanut syntymäpäiväkseen puvun, sellaisen


soman, ilmavan ruusunpunaisen, jota hän joskus oli toivonut. Ja
samanväriset silkkisukat ja sirot kiiltonahkakengät. Eipä hän suotta
uneksinut prinsessa Ruususesta! Jo seitsemäntoista, ja
ruusunpunainen puku! Hyväinen aika, kuinka elämä saattoi olla
ihanaa!

Kaiken tämän ihanuuden antaja oli Pyry. Arkipäiväinen, tuulihattu


Pyry melkein jumaloi Polle-siskoaan. Hän selvemmin kuin muut näki
sen sisäisen hienouden, sen sielun kirkkauden, mikä muodosti
Pollen aran olemuksen. Hän oli nähnyt Pollen tanssiaisissa. Hän
aavisti, kuinka Pollen kauneudenjanoinen mieli kärsi
epämiellyttävästä puvusta, vaikka hän ei koskaan pyytänyt
parempia. Pyryn sydäntä kirveli. Polte oli liian herkkä. Pieninkin
loukkaus haavoitti häntä. Pyry tahtoi hiukan tasoittaa siskon tietä, nyt
kun hänellä oli niin mainio tilaisuus.

Täti Brink oli lahjoittanut hänelle tuon kaiken. Täti Brinkin vanhat
viisaat silmät näkivät, että Pyryllä harvoin oli mitään uutta, vaikka
hänellä oli jotenkin hyvä palkka. Täti Brink kysyi silloin, että mitenkäs
sen asian laita oli. Ja Pyry tunnusti, että hän lähettää kotiin. Täti
Brink nyökytteli ja hymyili. Ja kun Pyry lähti lomalle, pisti täti Brink
salaperäisen laatikon hänen kainaloonsa. Vanhoissa viisaissa
silmissä loisti veitikka, kun Pyry ylenmäärin yllätettynä kiitteli.
Herttainen täti Brink!

Mitä täti Brink sanoisi, sitä Pyry oli pelännyt luovuttaessaan


lahjansa toiselle. Jos hän sanoisikin: "En luullut sinun niin vähän
arvoa panevan lahjaani!" — Ei! Kun Pyry oikein selittää, kuinka asia
on niin, täti Brink varmaan ymmärtää eikä loukkaannu. Jos ei täti
Brink ymmärrä, ei sitten kukaan muukaan. Hyvällä omallatunnolla
Pyry siis antoi "kaiken soman" Pollelle, ollen viisaasti vaiti lahjan
alkuperästä, sillä Polle ei silloin olisi suostunut ottamaan vastaan. Ja
jos täti Brink olisi nähnyt Pollen silmien säteilyn, olisi hän ollut yhtä
tyytyväinen kuin Pyrykin.

Pollekin oli tyttö vain, ja sitten tanssi ja Aage Rhein! Aage Rhein
oli vain käymäseltä kotonaan Pietarista. Hyvä isä sitä univormua!
Eikö liene jo täysi upseeri! Kaikki tytöt olivat ihan hulluina häneen.
Eikä se ollut mikään ihme. Sellaiset uneksivat mustat silmät ja
mustat pienoiset viikset. Ja hymy, oi voi sitä hymyä. Ja vartalo, se
vasta komeata, pitkä ja solakka ja univormussa, u-ni-vor-mus-sa!
Kaikki tytöt lauloivat:

"Aina uneksinut olen univormusta, aina pitänyt sotilaan


ryhdistä!"

Ja kaikki tytöt hommaavat tanssiaisia, ennenkuin hän ehtii lähteä.


Ja kaikki tytöt toivovat, että hän tanssittaisi juuri häntä ja kannukset
helisisivät. Ja hyväinen aika, kuinka kamalasti kaikki ovat
jännittyneitä. Ja eikö ole aivan hirvittävää, että hän kulkee aina
sysimustalla ratsulla, ihan kuin saduissa!

Sitten Polle oli tavannut hänet. Hän oli juossut postista ja Aage
seisotti ratsuaan, hypähti alas ja tuli kättelemään. Ja siinä samassa
huomasi Polle surkean asunsa: pieneksi käynyt kansallispuku, sen
alta pistävät paljaat, pitkät sääret, ja virttynyt, punainen silkkiliina
sitaistu vinosti päähän. Hän toivoi, että Aage Rhein ei olisi tuntenut.

"Sinä olet kasvanut kovin!" Aage Rhein puristi kapeata, kovaa


kättä ja hymyili sitä hirmuisen ihanaa hymyä.

Se nyt oli juuri pahinta, se kasvaminen, sitä kun koetti käpristyä


kokoon, että olisi sopinut vaatteisiinsa, ja Polle punastui oman
kurjuutensa tunnosta. Mutta Aage Rhein yhä piti kädestä ja
hymyillen katseli päästä jalkoihin. "Arvaan, että sinä tanssit kuin
keijukainen!" — Ah, Polle koetti piilottaa hoikkia nilkkojaan.

"Tehän pidätte tanssit!"

"Pidämme. Tietysti sinä olet kutsuttu?" Tiesihän Polle, että joku


hienoista tytöistä kutsuisi Aage Rheinin.

"Kyllä noin ylimalkaan. Mutta saanhan tulla sinun kutsuttunasi?"

Pollea ihan huimasi. Aage Rhein hänen kanssaan!

"Vai onko sinulla jo toinen?"

"Kukas minulla! Mutta ajattelen, että varmaan moni muu olisi


halukkaasti sinun kanssasi."

"Mutta sinä et olisi? Sinä olet kasvanut kovin, Pollenka!"

"Voi, ei — olen hyvin iloinen, jos sinä minun kanssani!"

"Kiitos! Ja me tanssimme koko illan. Lupaatko minulle kaikki


tanssit?"

"Tietysti!" Pollenhan on niin helppo luvata.

"Kiitos! Näkemiin, pitkä, pieni Pollenka!"

Polle tuli hyppien kotiin. Mutta Aage Rheinistä hän ei puhunut


Pyryllekään. Toisinaan on niin, ettei voikaan puhua. Sitäpaitsi oli
Pyry joskus niin kauhean järkevä, niinkuin siitä "Keltaruusustakin!"
"Pyhyh, joku kauppamatkustaja tai henkivakuutusmies!"
Huomenna, huomenna! Hän ei malttanut illalla olla koettelematta
pukuaan. Mikä onni, että hänellä juuri nyt oli puku! Hän näki itsensä
suloisena peilissä: silmät säteilevinä, huulet hehkuen ja
ruusunpunainen liehuva puku kuin unelma ympärillään.

"Nyt Polle on prinsessa Ruusunen!" ihaili Untuva. Polle on


varmaan somin heistä!

Kreets pyöritti häntä nähdäkseen "kuinka heilui". Ter sanoi häntä


perhoseksi ja Pyry hymyili; nyt oli Pollen sielulla sopiva verho.

Riemua täynnä Polle sukelsi vuoteeseensa. Hän oli nukkuvinaan


saadakseen olla rauhassa ajatuksineen. Oi, kerta hän olisi
onnellinen, täydesti onnellinen. Hän saisi tanssia, tanssia koko illan
siroin kengin ja ruusunpunaisen puvun liehuessa ja Aage Rhein,
Aage Rhein tanssittajana! Jos kuningas olisi käsivartensa tarjonnut,
olisi hän tuskin sitä niin suurena onnena pitänyt. Mitä sanoisivat ne
ylpeät tytöt! Kerran hänkin, Tuhkimo — —. Pollenka! Että Aage
Rhein muisti sanoa niin, kuin lapsenakin!

Huomis-ilta! Kuinka vähän voimmekaan tietää, mitä huominen tuo


mukanaan. Useasti haihtuu se huomaamatta monien mitättömien
päivien joukkoon, toisinaan se tuo tuomisia, iloisen yllätyksen tai
syvän surun. Pollelle se toi jälkimmäisen. Hän oli iltamyöhällä ollut
paljain jaloin kasteisessa ruohossa, saanut hammassäryn, ja toinen
poski — niin, se pyöristyi yhä pahemmin, mitä lähemmäksi ilta tuli.
Ja kun Pollen piti lähteä, pukea päälleen koko ihanuus, oli se niin
hirmuinen, poski nimittäin, että lähtö oli mahdoton.

Jos teistä joku on niin hartaasti kuin Polle toivonut jotakin ja sitten
niin armottomasti pettynyt, niin ymmärrätte, millaista hänen oli. Hän
vain nyyhkytti pää tyynyyn haudattuna. Äiti hieroi ajettunutta poskea
ja siskot ajoivat kipeään hampaaseen mahdollisia ja mahdottomia
rohtoja hiusöljyyn asti. Mutta mitäpä ne auttoivat! Eivät ne voineet
lievittää sydänsärkyä, ja se oli paljon kovempaa kuin hampaan.

Ei mikään lääke voinut auttaa sitä, että hän makasi tässä ja


ruusunpunainen puku ja tanssikengät ja silkkisukat olivat
laatikoissaan, ja Aage Rhein tanssi toisten tyttöjen kanssa. Voi, voi!
Tanssi koko pitkän illan ja hymyili hurmaavaa hymyään.

Elämä oli säälimätön, kurja ja tarkoitukseton. Miksi juuri hänen piti


saada puku ja kaikki ja sitten jäädä sänkyyn! Hän itki niin täysin
sydämin kuin vain seitsentoistavuotiaana voidaan itkeä, ja nukahti
viimein kyyneleihinsä.
IX.

"Synninlukko."

Seuraavana päivänä ei ollut jälkeäkään ajetuksesta eikä särystä.


Ja Polle oikein murjotti. Olisi ollut mukavampi, kun tänäänkin olisi
särkenyt, kun kerta eilenkin, ihan kuin vasite kiusalla.

Pyry houkutteli häntä Myllymäkeen. "Mennään katsomaan, joko on


noussut kangassieniä!"

Polle lähti vastahakoisesti. Pyry lörpötteli ja oli hassunpäiväinen.


Joka kerta, kun hän löysi suuren sienipaikan, niijasi hän ja puheli:

"Päivää, lättänaamat! Ikävä kyllä, että otan teidät vain syötäviksi.


Mutta vakuutan teille, että teidät käristetään oikein voissa eikä
missään rasvassa, ei edes rasvahäntälampaan rasvassa! Voi, voi.
Polle-kulta! Minä suuresti himoitsen nähdä niitä rasvahäntälampaita
siellä jossakin Kaspian kaltahilla. Siellä ne mennä kammertavat, ja
rasvahäntä painaa, jotta pitää olla pienet kärryt alla!"

Hän nauroi omille jutuilleen. "Se vasta mautonta", olisi Kreets


sanonut. Pollea vain harmitti.
"Ja kun kerran Ruotsin kuningas kysyi eräältä suomalais-äijältä —
ei, kun suomalais-äijältä kysyttiin — taikka lappalais-äijältä —"

"Taikka voguli-ostjakki-samojeedi- ja niin edespäin -äijältä!"


keskeytti Polle äreissään.

"Niin, kun häneltä kysyttiin, kuinka hän arveli kuninkaan elävän,


sanoi hän: hätäkös sillä, makaa vällyissä uunilla ja syö voissa
paistettuja rusinoita!"

"Tuo nyt on ikuisen vanha juttu", halveksi Polle.

"Kyllä, kyllä. Mutta kun ajattelen noita kangassieniä pannussa,


tulivat ne voissapaistetut rusinatkin siihen."

Pyry näytti niin murheelliselta, että Pollen viimein täytyi hänelle


mieliksi vähän hymyillä.

Ropsis, rapsis! Äkillinen pimeys ja vettä kuin kaatamalla.


Ukonpilvi.
He juoksivat suuren kuusen alle ja pysyivät kuivina.

Mutta nyt oli metsä sateen liottama. Läpimärkinä kietoutuivat


hameet piankin pitkin sääriä, ja kengät litsuivat vettä. Päälle
päätteeksi he olivat eksyneet.

Lopulta Pyry huomasi tuskin näkyvän polun kankaalla.

"Seurataan tätä, ehkä se vie kotiin. Jonnekin sen täytyy viedä,


ehkä johonkin torppaan. Siellä saisimme jotakin lämmintä!"

Tie luikersi lepikköön, kulki pitkin vuoren kuvetta, painui


näreikköön, nousi taas rinteelle, sieltä laskeusi laaksoon. Se tuntui
loputtomalta, päättömältä. Tytöt alkoivat väsyä laahatessaan raskaita
sienikorejaan.

Äkkiä he pysähtyivät hämmästyneinä. He olivat tulleet syvään


rotkoon, jota kolmelta taholta piirittivät äkkijyrkät kallioseinät niin
korkeina, että taivas näytti olevan määrättömän kaukana. Alkujaan
ehkä nämä vuoret olivat olleet yhtä, niin toistensa osilta ne näyttivät.
Jonkun mahtavan mullistuksen kautta olivat kai kerran repeytyneet,
ensin halki, jolloin oli syntynyt tämä rotko, sitten poikittain, sillä
oikeanpuolinen seinämä oli kuin jättiläistaltalla katkaistu.

Varmaankin rotkon suu antoi etelään, koska ylen voimakas


kasvullisuus rehoitti siinä. Sananjalkaa monenmoista komeina
pensaina, kuuset kohosivat mustina välkkyvälehtisten raitojen ja
leppien lomitse. Ja missä vain hituisenkin multaa sopii jyrkänteen
koloihin, siinä riippui sammal tai helisi haapa tai kumartui koivu
hentona ja kituisena, varovasti työnnellen juuriaan kiven kovaan
sydämeen.

"Tämähän on kuin rotkot Coloradon Canoneissa", tuumi Pyry


ihastuneena.

He seurasivat polkua. Se vei hetteeseen, jonka hyllyvälle pinnalle


ei uskaltanut mennä. Silmättyään eteensä he huudahtivat saman
kauhun täyttäminä. Hetteen keskellä, aivan vasemmanpuolisen
kallioseinän kupeessa, kiilui mustana ja uhkaavana synkkä
suonsilmä.

"Me olemme 'Synninlukolla'!" kuiskasi Polle. Todellakin, se se oli.


Synninlukoksi sitä sanottiin, tätä salaperäistä lähdettä, josta ei
kukaan tietänyt, mistä sen musta vesi sai alkunsa, eikä sen syvyyttä
ollut kukaan mitannut. Onneton se, joka sinne suistui; ei sen
ruumista siunattuun maahan saatu, ken yritti ottamaan, vajosi itse.
Ainoastaan kerran se oli uhrinsa päästänyt, joskin hengetönnä. Oli
tuolta kalliolta pudonnut siihen lehmä ja pappilan tyköä joesta oli se
ylös saatu. Tahtoi kai näyttää, että on sillä maan alla mahtavat väylät
vallassaan.

Kaikenkaltaisia taruja kerrottiin Synninlukosta. Ehkä siksi, että


paikka oli niin synkkä, nimi niin outo ja lähde niin kumma;
kuivimpanakin kesänä sen vesimäärä oli sama kuin sateisimpana
syksynäkin. Pyry ja Polle katselivat uteliaina luota merkillistä
lamparetta. Kuin portti manalaan se oli tai kuin jonkun salaisen
rikoksen tyyssija — siitäköhän sen nimikin? Oliko tällä paikalla tehty
kaamea tihutyö ammoisina aikoina, vai oliko vain kansan
mielikuvituksessa syntynyt synkkä nimi synkälle paikalle? Kukapa
sen tiesi. Omituisen kaamea tuntu oli kumminkin koko rotkossa ja
eniten tuossa lähteessä. Ei ollut ainuttakaan lintua livertämässä. Ja
tytöistä näytti miltei luonnottomalta, että kimppu kissankelloja oli
kiivennyt kallionkylkeen ja siinä sinisiä tiukujaan hilpeästi helisytti.
Mikään iloinen ei tänne sopinut. He alensivat äänensäkin vain
kuiskeiksi.

Lähteen yläpuolella oli kallioseinässä syvennys, aivan kuin ovi.

"Kas, siinä on kissanreikäkin, kuin metsämökkien porstuanovissa!"


huomautti Pyry, ja hänen hilpeytensä palasi. "Mitähän, jos koputtaisi
ja huutaisi Seesam! Millainen otus tulisi avaamaan?"

"Älä laske leikkiä!" Polle hätääntyi. "Minusta on kuin oudot voimat


täällä peliään pitäisivät. Ihminen pienentyy niin mitättömäksi!"

"Annas kun katson litistyneitä kenkiäsi, joko ovat pienentyneet


kuin
Lagerlöfin Peukaloisen puukengät!"

"Sinun on hyvä olla", sanoi Polle surullisesti. "Mutta minun ei. Olen
ollut häijy." Ja Polle kertoi kaikki. "Tässä nyt tulin ajatelleeksi, että se
oli minulle oikea rangaistus, etten päässytkään. Sillä enkös vain
toivonut, vaikkakin salavihkaa, että toiset tytöt olisivat hiukan
harmissaan. Ja sitten minua ihan repeli, kun kuvittelin, kuinka hän
tanssii muiden kanssa!"

"Rakas Polle!" Pyryllä kimaltelivat kyyneleet silmissä, "sinä olet


pelkkää kultaa! Niinhän ajattelee moni muu, sen verran pahaa. Minä
niin mielelläni olisin suonut sinulle sen ilon ja olin niin pahoillani, kun
et päässyt."

"Minä kyllä tiedän, että jotkut monesti ovat aika häijyjä", sanoi
Polle miettivästi, "enkä käsitä, miksi he eivät saa siitä muistutusta.
Minun on kuitenkin niin, että saan heti palkan, kun ajattelenkin olla
paha. Ei kai minulle ole suotu sellaista onnea kuin muille tytöille."

"Jos nyt kaikkea voi onneksi ottaa. Eiköpähän onnea ole juuri se,
että revitään juurineen pahan idutkin, niin kirvelevältä kuin se silloin
tuntuukin. Oikea onnihan kasvaa sisästä käsin. Usko minua, Polle,
elämässä on suurempiakin arvoja kuin tanssiaiset. Mutta minä olen
huomannut, että ne voi saavuttaa vasta sitten, kun on oppinut
voittamaan oman itsensä."

"Pyry, se sinut tekee niin yllättäväksi, että sinä saatat puhua


tyhmyyksiä ja taas jotakin niin kovin viisasta. Ja sitten sinä osaat
puhaltaa huolet pois."

"Olen oikea sekasotku!" Pyry nauroi kyyneleet kuiviksi. Mutta Polle


vaistosi herkästi, että vallattomuuden alla oli taisteluja, ehkä
ankariakin, vaikka Pyry oli kyllin voimakas kantamaan kaiken yksin,
uskoutumatta kenellekään.

"Usko pois, elämä on suurta ja hyvää aina, kunhan sille vain


kykenemme antamaan oikean arvon!" — Pyry kietoi kätensä Pollen
vyötäisille.

Iloinen elämänrohkeus ja elämänhalu, jota Pyry ikäänkuin kuohui,


terästi ja virkisti Polleakin.

Taivas seestyi. Sininen läikkä näkyi rotkon yllä ja peipponen


lennähti haavan oksalle liverrellen: pink, pink, link, link!

"Ehkä Synninlukko on sellainen, että se sulkee pahan meistä


itseensä!" sanoi Polle keventynein mielin.

"Minusta tämä on komeampi Ljungarsin lähteeksi kuin Topeliuksen


kuvaama", virkkoi Pyry.

"Kun vain ilmestyisi joku valkoinen tyttö meitä johtamaan!"

"Menemme vain takaisin päin, tottapahan viimein tulemme tielle!"

Reippaasti astuen he ennen pitkää joutuivatkin maantielle.

"Heipparallaa! Tuollapäin on Myllymäki!" He alkoivat juosta,


kunnes kasvot hehkuivat ja märät jalat olivat kuumina liikkeestä.
"Liike synnyttää lämpöä!" luki Pyry, innokas voimistelija.

Kaukaa karahutti ratsastaja. Aage Rhein oli tuokiossa maassa.


"Täältäkö sinut viimeinkin löydän, metsänneito!"

Polle antoi kättä rehellisenä ja nöyränä. Ei ollut hiventäkään


turhamaisuutta hänen sielussaan tällä hetkellä. Ei hän yrittänyt
kätkeä litiseviä kenkiään eikä märkää hamettaan, joka joka
askeleella kietoutui ilkeästi ympäri vartalon, eikä hän ajatellut
auennutta tukkaansa, vaikka se oli kosteana sateesta ja täynnä
lehtiä ja havunneuloja.

Mutta Aage Rhein ajatteli kaikkea tuota ja hän taputti ruskeata


kättä hellävaroen kysyessään: "Miksi sinä et tullutkaan eilen?"

"Minä — minun särki hammasta ja luulen, että se oli oikein."

"Miksi?"

"Kun minä niin kovasti toivoin pääseväni!"

"Sinä pieni, hyvä metsänneito! Minä kiitän sinua, että sinä kovasti
toivoit!"

"Tanssitko sinä — kenen kanssa — kokoillan?"

"Kuinka minä olisin voinut, kun joka ainoan tanssin sinä lupasit
minulle, eikä sinua ollutkaan!"

"Kuinka sinä —?"

"Minä lähdin pois, kun hetken olin odotellut sinua."

"Voi sinua!" Suuri ilo säteili viattomasta silmäparista.

Aage Rhein hymyili.

"Mutta", sanoi Polle katuvana, "olisit sinä saanut tanssia heidän


kanssaan!"
"Pollenka! Pysy sinä aina samana, semmoisena kuin olet,
kirkkaana! Minä lähden nyt. Hyvästi!" Hän teki kunniaa Pyrylle,
hypähti ratsulleen ja katsahti vielä kerran Polleen. Ja, hyvä isä, hän
ei hymyillyt yhtään. Silmät olivat totiset. Ja sitten hän meni. Hirveän
kiire hänellä oli.

"Melkein luulen", sanoi Polle, kun he kotvan äänettöminä olivat


kulkeneet, "että ellemme olisi käyneet Synninlukolla, emme olisikaan
tavanneet häntä."

Pyry vain nyökäytti päätään ja auttoi toisella kädellään Pollea


tämän sienikorin kantamisessa.
X.

Kreets käy maailmalla.

Kreets istui junassa, joka läheni Tamperetta. Sydän sykki ja posket


paloivat. Nyt hän pääsisi kiihkeästi haluamaansa maailmaan.

"Aina ja ikuisesti saan minä olla kotona", oli hän ruikuttanut. Ja koti
oli tuntunut vankilalta ja hän itse elinkautiselta vangilta, joka ei ikinä
saisi kurkistaa avaraan, ihanaan maailmaan. Semmoiseksi oli
kasvanut hänessä maailmallelähtökuume, että koko kotiväki oli siitä
kiusaantunut. Ja viimein hänet oli pakattu hevoseen ja käsketty
kyytimiehen hommata hänet junaan. Ja siinä hän nyt körötti junan
pysähtyessä Tampereen asemalla. Oli keskiyö, Kreets ensi kertaa
matkalla, eikä ketään vastassa. Se oli Kreetsin oma syy. Hänen oli
pitänyt kirjoittaa veljelle, mutta kotiväen tietämättä hän oli sen
jättänyt tekemättä toimittaakseen yllätyksen. Hiukan häntä pökerrytti
turvattomuuden tunne. Matkustajia tunkeutui vaunuista ja vaunuihin.
Kaikilla oli kiire, eikä kukaan välittänyt Kreetsistä. Kreets työntyi
toisten mukana läpi asemahuoneen.

Elokuun yö oli jo tumma, mutta katuvalot olivat sytyttämättä, ja


hämäränä hupeni Hämeenkatu etäisyyteen. Kreets tiesi, että veli
asuu juuri tämän kadun varrella. Olisipa ihme, ettei iso ihminen
osaisi, kun tietää kadun ja numeron! Varmuuden vuoksi hän meni
vielä tarkastamaan kadun nimeä. Oikea se oli. Hän laahasi suurta
matkalaukkuaan ja asteli eteenpäin. Hänestä oli hauskaa, vaikka
vähän peloittavaakin, olla näin yksin vieraassa kaupungissa.
Tietäisivätpä ne kotona, niin ei niitä nukuttaisi! Liikkeitten suuret
näyteakkunat loistivat peileinä hämärässä, ja katukivityksellä kaikui
ajurin hevosen kapse.

Kreets joutui Hämeensillalle. Tammerkoski kohisi. Sen molemmin


puolin jyrisivät monikerroksiset tehtaat. Valaistuina ne näyttivät
satulinnoilta. Eivätkö sitä olleetkin! Kuinka monta ihmiskohtaloa
kätkeekään tuollainen tehdas! Ja eikö se samalla jyrise jännittävintä
satua: keksintöjen mahtia, maan vaurastumista.

"Tampere, Tammerkosken varrella, kauniilla paikalla, maamme


suurin tehdaskaupunki…" — lörpötti Kreets, maantiedetunteja
muistellen. Kiusallista on lukea maantiedettä, toista olisi nähdä sitä.

Sillankorvassa on teatteri. Sen hän tunsi kuvien mukaan. Siellä oli


valoa, soittoa, ja verannalla riippui kukkia ja värilyhtyjä. Kreetsin
päätä huimasi maailman ihanuus. Siinä vieressä on vanha kirkko.
Olipa sen puisto pimeä! Vanha aaveitten pelko valtasi Kreetsin, ja
puolijuoksua hän tuli poikki torin. Raatihuoneen kello oli jo tulossa
kaksi. Jopa olisi aika päästä sänkyyn.

Vihdoinkin Kreets löysi oikean numeron alituisesti juostessaan


kurkoittamaan puolelta toiselle. Mutta — portti oli lukittu. Kreets jyristi
kaikin voimin, vaan siitä ei apua. Siinä hän nyt seisoi raskaine
kantamuksineen ypö-yksin sydän-yöllä, keskellä tehdaskaupungin
pääkatua. Alkoi miltei itkettää. Tässäköhän hänen oli seistävä
aamuun asti? Ja niin tuiki väsyneenä.
Joku yksinäinen herrasmies tulla toikkaroi kadun poikki. Kreets
ilostui. Ehkäpä tuo keksii keinon.

"Minä en saa porttia auki!" huudahti hän.

"Oo, pikku ystävä, se ei tee mitään", soperteli tämä, "minä kyllä


saan portin auki".

"Saatteko!" Kreets unhotti kyyneleensä.

"Saan, minun porttini, mennään yhdessä, serkku!" Hän tarttui


Kreetsin matkalaukkuun. Mutta Kreets riuhtasi sen reippaasti pois.

"Serkku!" huudahti hän, "minulla ei täällä päin voisi olla muita


serkkuja kuin Bir…"

"Minä juuri Bir!"

Kreets nauroi että katu kaikui. "Kylläpä Birin naama venyisi, kun
hän kuulisi itseään verrattavan tuommoiseen vanhaan
ukonkänttyrään!"

"Minäkö vanha ukkokänttyrä!" Herrasmies astui loukkaantuneena


lähemmäksi.

Samalla Kreetsin naurun houkuttamana lähestyi poliisikin. "Mitäs


täällä on?"

"Niin, kun tuo sanoo itseään Biriksi ja tahtoo kantaa laukkuani…"


Kreet lopetti kummissaan. "Mihin hän joutui?"

"Piti parhaimpana kadota. Mutta mitenkäs te tässä, keskiyöllä?"


"Minä vain…" Kreets kertoi koko matkansa ja nykyisen
toivottomuutensa.

"Mennään nyt aluksi poliisikamariin. Tuumitaan siellä sitten." Ja


niin Kreets astui keskelle puoli-unista poliisiparvea, joka uteliaana
katseli häntä. "Mitenkäs tämmöinen tänne?"

Mutta kun he kuulivat asian, olivat he kilvassa kohteliaita. "Neiti


istuu tähän, neuvotellaan yhdessä!"

Kreets istui helpoittuneena, pyyhki hikeä kasvoiltaan ja katseli


kaihoten topattuja penkkejä. "Voisipa täälläkin nukkua", virkkoi hän.

"Niinpä kyllä", myöntelivät miehet. Heidän tuli sääli. Kreets oli niin
turvaton honteloine vartaloineen, ruskeine palmikkoineen ja unisine
lapsensilmineen.

"Enhän minä osannut arvata, että pannaan portit lukkoon, vaikka


on poliisit ja kaikki. Jos minulla vain ei olisi ollut matkalaukkua, olisin
kiivennyt yli."

"Tokkohan sentään!"

"Olisin. Kotona minä kiipeän vaikka mihin!" Kreetsin uni haihtui ja


poliiseilla oli hauskaa.

"Meneeköhän sinne telefoonia?" huomasi joku kysyä.

"Menee!" Kreets muisti numeronkin, ja niin siitä pulma selvisi.


Veljelle soitettiin, ja hän lupasi tulla heti, kun saa vaatteet ylleen.

"No, miten sinä täällä olet?" Veli oli uninen ja äreä.


"Niin, kun sinun porttisi oli lukossa, ja eräs herra sanoi minua
serkukseen."

"Mikä herra?"

Poliisi selitti asian. Veli suuttui. "Kuinka sinä sillä tavoin tulet!
Olisit joutunut vielä jonkun roiston kynsiin!"

Kreetsiä suloisesti pöyristi. Sehän oli kuin parhaimmissa


salapoliisiromaaneissa. Entäs jos täälläkin olisi oikea rosvoliiga,
kuten esimerkiksi Sisiliassa! Ja ne olisivat pidättäneet hänet ja
vaatineet lunnaita, ja häntä olisi kauheasti kammottanut.

"Mutta kylläpä ne olisivat saaneet pitkän nenän", sanoi hän


ylpeästi.
"Minun rahani ovat kaikki sukassani!"

"Oletko sinä yksin raahannut tätä laukkua? Miksi et ottanut ajuria


asemalta?"

"Ettäkös vain minä maksamaan ajurille, kun minulla kerran on jalat


ja kädet! Ja äiti käski minun valvoa laukkua, siellä kun on sinulle
kaikkea, voita ja kotona leivottua pullaa ja…

"Tule nyt jo!"

"Kiitoksia paljon kaikesta ja hyvää yötä!" hyvästeli Kreets uusia


tuttujaan.

"Hyvää yötä ja kiitos seurasta!" vastasivat he iloisesti.

Kreets tahtoi heti peseytyä, vaikka olikin yö, sillä äiti oli sanonut,
että rautatiellä pölyttyi ja sai vaikka mitä. Veli neuvoi hänelle
kylpyhuoneen salaisuudet. Kreets loiskutteli hirveästi ja nautti
"ihmistymisestään".

Mutta aamulla veli heräsi ennen aikojaan epämääräiseen


solinaan. Kylpyhuoneen oven alitse tihkui vesi. Kreets oli jättänyt
johdot auki. Veli ärtyi aika lailla, sillä hän sai itse tehdä siivoojan
virkaa. Kreets ei avannut edes silmiään, vaikka veli kävi häntä
herättelemässä. Hän nukkui makeasti puoleen päivään ja oli
onnellinen, kun ei kuulunut tuota tuttua: "Kreets, sinä ikuinen
unikeko, etkö sinä milloinkaan opi heräämään!"

"Pyhyh!" tuumi Kreets, kun veli vähän happamana kertoi


uhanneesta tulvasta. "Mahdotontahan on heti muistaa kaikkea. Ja
sitten sanookin Pyry, että parempi on turvautua vieraisiin herroihin
kuin veljeensä; sillä veljet ovat aina epäkohteliaita sisarilleen!"

"Ohoo! Hämmästyttävä totuus, neitiseni. Mutta minä tahdon nyt


olla kohtelias ja tarjoudun käytettäväksesi!"

"Kiitän sekä kumarran! Lähdet siis näyttämään minulle kaupungin


merkillisyyksiä!"

He kulkivat pitkin puistoa Mustanlahden kallioille, jonka rinteellä


taiteilija Vikströmin muovailema suihkukaivo päättää esplanaadin.
Ylevänä istuu kaarellaan Pohjan neito, ja somasti kimalsivat suihkut
päivänpaisteessa. Kreets haltioitui.

"Ajatteles, että voi luoda jotakin niin elävää! — Ihan kuin meidän
Missukka!" ilostui hän huomatessaan kissan mummon liepeissä.
Altaasta kohoilevat vesisuihkut olivat kuin hentoja kukkavihkoja,
helmistä koottuja. Kreets nautti vilpittömästi.
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade

Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.

Let us accompany you on the journey of exploring knowledge and


personal growth!

ebookmass.com

You might also like