Microservice Architecture with Spring Boot, Spring Cloud and Docker

Overview

Build Status codecov.io GitHub license Join the chat at https://gitter.im/sqshq/PiggyMetrics

Piggy Metrics

Piggy Metrics is a simple financial advisor app built to demonstrate the Microservice Architecture Pattern using Spring Boot, Spring Cloud and Docker. The project is intended as a tutorial, but you are welcome to fork it and turn it into something else!


Piggy Metrics

Functional services

Piggy Metrics is decomposed into three core microservices. All of them are independently deployable applications organized around certain business domains.

Functional services

Account service

Contains general input logic and validation: incomes/expenses items, savings and account settings.

Method Path Description User authenticated Available from UI
GET /accounts/{account} Get specified account data
GET /accounts/current Get current account data × ×
GET /accounts/demo Get demo account data (pre-filled incomes/expenses items, etc) ×
PUT /accounts/current Save current account data × ×
POST /accounts/ Register new account ×

Statistics service

Performs calculations on major statistics parameters and captures time series for each account. Datapoint contains values normalized to base currency and time period. This data is used to track cash flow dynamics during the account lifetime.

Method Path Description User authenticated Available from UI
GET /statistics/{account} Get specified account statistics
GET /statistics/current Get current account statistics × ×
GET /statistics/demo Get demo account statistics ×
PUT /statistics/{account} Create or update time series datapoint for specified account

Notification service

Stores user contact information and notification settings (reminders, backup frequency etc). Scheduled worker collects required information from other services and sends e-mail messages to subscribed customers.

Method Path Description User authenticated Available from UI
GET /notifications/settings/current Get current account notification settings × ×
PUT /notifications/settings/current Save current account notification settings × ×

Notes

  • Each microservice has its own database, so there is no way to bypass API and access persistence data directly.
  • MongoDB is used as a primary database for each of the services.
  • All services are talking to each other via the Rest API

Infrastructure

Spring cloud provides powerful tools for developers to quickly implement common distributed systems patterns - Infrastructure services

Config service

Spring Cloud Config is horizontally scalable centralized configuration service for the distributed systems. It uses a pluggable repository layer that currently supports local storage, Git, and Subversion.

In this project, we are going to use native profile, which simply loads config files from the local classpath. You can see shared directory in Config service resources. Now, when Notification-service requests its configuration, Config service responses with shared/notification-service.yml and shared/application.yml (which is shared between all client applications).

Client side usage

Just build Spring Boot application with spring-cloud-starter-config dependency, autoconfiguration will do the rest.

Now you don't need any embedded properties in your application. Just provide bootstrap.yml with application name and Config service url:

spring:
  application:
    name: notification-service
  cloud:
    config:
      uri: http://config:8888
      fail-fast: true
With Spring Cloud Config, you can change application config dynamically.

For example, EmailService bean is annotated with @RefreshScope. That means you can change e-mail text and subject without rebuild and restart the Notification service.

First, change required properties in Config server. Then make a refresh call to the Notification service: curl -H "Authorization: Bearer #token#" -XPOST http://127.0.0.1:8000/notifications/refresh

You could also use Repository webhooks to automate this process

Notes
  • @RefreshScope doesn't work with @Configuration classes and doesn't ignores @Scheduled methods
  • fail-fast property means that Spring Boot application will fail startup immediately, if it cannot connect to the Config Service.

Auth service

Authorization responsibilities are extracted to a separate server, which grants OAuth2 tokens for the backend resource services. Auth Server is used for user authorization as well as for secure machine-to-machine communication inside the perimeter.

In this project, I use Password credentials grant type for users authorization (since it's used only by the UI) and Client Credentials grant for service-to-service communciation.

Spring Cloud Security provides convenient annotations and autoconfiguration to make this really easy to implement on both server and client side. You can learn more about that in documentation.

On the client side, everything works exactly the same as with traditional session-based authorization. You can retrieve Principal object from the request, check user roles using the expression-based access control and @PreAuthorize annotation.

Each PiggyMetrics client has a scope: server for backend services and ui - for the browser. We can use @PreAuthorize annotation to protect controllers from an external access:

@PreAuthorize("#oauth2.hasScope('server')")
@RequestMapping(value = "accounts/{name}", method = RequestMethod.GET)
public List<DataPoint> getStatisticsByAccountName(@PathVariable String name) {
	return statisticsService.findByAccountName(name);
}

API Gateway

API Gateway is a single entry point into the system, used to handle requests and routing them to the appropriate backend service or by aggregating results from a scatter-gather call. Also, it can be used for authentication, insights, stress and canary testing, service migration, static response handling and active traffic management.

Netflix opensourced such an edge service and Spring Cloud allows to use it with a single @EnableZuulProxy annotation. In this project, we use Zuul to store some static content (the UI application) and to route requests to appropriate the microservices. Here's a simple prefix-based routing configuration for the Notification service:

zuul:
  routes:
    notification-service:
        path: /notifications/**
        serviceId: notification-service
        stripPrefix: false

That means all requests starting with /notifications will be routed to the Notification service. There is no hardcoded addresses, as you can see. Zuul uses Service discovery mechanism to locate Notification service instances and also Circuit Breaker and Load Balancer, described below.

Service Discovery

Service Discovery allows automatic detection of the network locations for all registered services. These locations might have dynamically assigned addresses due to auto-scaling, failures or upgrades.

The key part of Service discovery is the Registry. In this project, we use Netflix Eureka. Eureka is a good example of the client-side discovery pattern, where client is responsible for looking up the locations of available service instances and load balancing between them.

With Spring Boot, you can easily build Eureka Registry using the spring-cloud-starter-eureka-server dependency, @EnableEurekaServer annotation and simple configuration properties.

Client support enabled with @EnableDiscoveryClient annotation a bootstrap.yml with application name:

spring:
  application:
    name: notification-service

This service will be registered with the Eureka Server and provided with metadata such as host, port, health indicator URL, home page etc. Eureka receives heartbeat messages from each instance belonging to the service. If the heartbeat fails over a configurable timetable, the instance will be removed from the registry.

Also, Eureka provides a simple interface where you can track running services and a number of available instances: http://localhost:8761

Load balancer, Circuit breaker and Http client

Ribbon

Ribbon is a client side load balancer which gives you a lot of control over the behaviour of HTTP and TCP clients. Compared to a traditional load balancer, there is no need in additional network hop - you can contact desired service directly.

Out of the box, it natively integrates with Spring Cloud and Service Discovery. Eureka Client provides a dynamic list of available servers so Ribbon could balance between them.

Hystrix

Hystrix is the implementation of Circuit Breaker Pattern, which gives us a control over latency and network failures while communicating with other services. The main idea is to stop cascading failures in the distributed environment - that helps to fail fast and recover as soon as possible - important aspects of a fault-tolerant system that can self-heal.

Moreover, Hystrix generates metrics on execution outcomes and latency for each command, that we can use to monitor system's behavior.

Feign

Feign is a declarative Http client which seamlessly integrates with Ribbon and Hystrix. Actually, a single spring-cloud-starter-feign dependency and @EnableFeignClients annotation gives us a full set of tools, including Load balancer, Circuit Breaker and Http client with reasonable default configuration.

Here is an example from the Account Service:

@FeignClient(name = "statistics-service")
public interface StatisticsServiceClient {

	@RequestMapping(method = RequestMethod.PUT, value = "/statistics/{accountName}", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
	void updateStatistics(@PathVariable("accountName") String accountName, Account account);

}
  • Everything you need is just an interface
  • You can share @RequestMapping part between Spring MVC controller and Feign methods
  • Above example specifies just a desired service id - statistics-service, thanks to auto-discovery through Eureka

Monitor dashboard

In this project configuration, each microservice with Hystrix on board pushes metrics to Turbine via Spring Cloud Bus (with AMQP broker). The Monitoring project is just a small Spring boot application with the Turbine and Hystrix Dashboard.

Let's see observe the behavior of our system under load: Statistics Service imitates a delay during the request processing. The response timeout is set to 1 second:

0 ms delay 500 ms delay 800 ms delay 1100 ms delay
Well behaving system. Throughput is about 22 rps. Small number of active threads in the Statistics service. Median service time is about 50 ms. The number of active threads is growing. We can see purple number of thread-pool rejections and therefore about 40% of errors, but the circuit is still closed. Half-open state: the ratio of failed commands is higher than 50%, so the circuit breaker kicks in. After sleep window amount of time, the next request goes through. 100 percent of the requests fail. The circuit is now permanently open. Retry after sleep time won't close the circuit again because a single request is too slow.

Log analysis

Centralized logging can be very useful while attempting to identify problems in a distributed environment. Elasticsearch, Logstash and Kibana stack lets you search and analyze your logs, utilization and network activity data with ease.

Distributed tracing

Analyzing problems in distributed systems can be difficult, especially trying to trace requests that propagate from one microservice to another.

Spring Cloud Sleuth solves this problem by providing support for the distributed tracing. It adds two types of IDs to the logging: traceId and spanId. spanId represents a basic unit of work, for example sending an HTTP request. The traceId contains a set of spans forming a tree-like structure. For example, with a distributed big-data store, a trace might be formed by a PUT request. Using traceId and spanId for each operation we know when and where our application is as it processes a request, making reading logs much easier.

The logs are as follows, notice the [appname,traceId,spanId,exportable] entries from the Slf4J MDC:

2018-07-26 23:13:49.381  WARN [gateway,3216d0de1384bb4f,3216d0de1384bb4f,false] 2999 --- [nio-4000-exec-1] o.s.c.n.z.f.r.s.AbstractRibbonCommand    : The Hystrix timeout of 20000ms for the command account-service is set lower than the combination of the Ribbon read and connect timeout, 80000ms.
2018-07-26 23:13:49.562  INFO [account-service,3216d0de1384bb4f,404ff09c5cf91d2e,false] 3079 --- [nio-6000-exec-1] c.p.account.service.AccountServiceImpl   : new account has been created: test
  • appname: The name of the application that logged the span from the property spring.application.name
  • traceId: This is an ID that is assigned to a single request, job, or action
  • spanId: The ID of a specific operation that took place
  • exportable: Whether the log should be exported to Zipkin

Infrastructure automation

Deploying microservices, with their interdependence, is much more complex process than deploying a monolithic application. It is really important to have a fully automated infrastructure. We can achieve following benefits with Continuous Delivery approach:

  • The ability to release software anytime
  • Any build could end up being a release
  • Build artifacts once - deploy as needed

Here is a simple Continuous Delivery workflow, implemented in this project:

In this configuration, Travis CI builds tagged images for each successful git push. So, there are always the latest images for each microservice on Docker Hub and older images, tagged with git commit hash. It's easy to deploy any of them and quickly rollback, if needed.

Let's try it out

Note that starting 8 Spring Boot applications, 4 MongoDB instances and a RabbitMq requires at least 4Gb of RAM.

Before you start

  • Install Docker and Docker Compose.
  • Change environment variable values in .env file for more security or leave it as it is.
  • Build the project: mvn package [-DskipTests]

Production mode

In this mode, all latest images will be pulled from Docker Hub. Just copy docker-compose.yml and hit docker-compose up

Development mode

If you'd like to build images yourself, you have to clone the repository and build artifacts using maven. After that, run docker-compose -f docker-compose.yml -f docker-compose.dev.yml up

docker-compose.dev.yml inherits docker-compose.yml with additional possibility to build images locally and expose all containers ports for convenient development.

If you'd like to start applications in Intellij Idea you need to either use EnvFile plugin or manually export environment variables listed in .env file (make sure they were exported: printenv)

Important endpoints

Contributions are welcome!

PiggyMetrics is open source, and would greatly appreciate your help. Feel free to suggest and implement any improvements.

Comments
  • Feature/update spring

    Feature/update spring

    This PR aims to upgrade all spring boot version to 2.0.3.RELEASE and spring cloud to FINCHLEY.RELEASE

    During upgrade :

    • I fixed unit test due to the upgrade of spring boot
    • also spring data jpa deprecate findOne to findById which return optional which enforce us to check null
    • use @DataMongoTest to test DAO layer which reduce testing time by avoid starting the whole spring boot application

    Also, I plan to centralize the spring boot and spring cloud version in the parent pom file, but think of loose coupling principal of microservice, each microservices might have different version of spring. So I didn't do that, @sqshq let me know how you think about the spring version centralization in pom parent.

    If possible could you please create a feature branch feature/update-spring, so I could change to merge to that branch first. Then we can spend times to verify everything on it before we tag and merge to master.

    opened by chidov 7
  • Switch exchange-rates provider

    Switch exchange-rates provider

    As discussed in PR#24 this PR switches the exchange-rates client to another rates provider.

    After a quick research, I've found https://exchangeratesapi.io as the most suitable alternative. It's free, opensource, doesn't require any access tokens and even claimed to be compatible with http://fixer.io api.

    There is one more commit, which adds an overloaded method to the exchange-rates client, with 'symbols' request parameter. Moreover, I've changed the behavior of existing get-rates method - it's now requesting rates for known currencies only. IMO, it may have (tiny) positive impact on system performance, as it reduces network traffic :)

    @sqshq what do you think about it?

    opened by solo-yolo 6
  • Feature/turbine stream service

    Feature/turbine stream service

    After upgrade to spring-boot 2, some users report about hystrix dashboard is not accessable due to IOException: Broken Pipe.

    The fix is to separate turbine-stream from monitoring service. and after the fix Hystrix Dashboard is working fine and we can monitor services through turbine stream.

    screen shot 2018-09-10 at 2 24 53 am
    opened by chidov 4
  • Add Spring Cloud Sleuth for distributed tracing

    Add Spring Cloud Sleuth for distributed tracing

    A common pattern used in microservices is distributed tracing which makes analyzing problems and searching through logs easier. Spring Cloud Sleuth implements this. A section about distributed tracing/sleuth has also been added to the README.

    opened by thanus 3
  • Fix issue with connectivity to Mongo

    Fix issue with connectivity to Mongo

    Fix issue with MongoDB connectivity. If start Mongo by command mongod (from version 3.6) it will use 127.0.0.1 interface.

    Official MongoDB docker image starts by script /usr/local/bin/docker-entrypoint.sh

    COPY docker-entrypoint.sh /usr/local/bin/
    ENTRYPOINT ["docker-entrypoint.sh"]
    

    In official DockerFile

    By default params this script will start Mongo by command mongod--bind_ip_all.

    opened by AlekseySpiridonov 3
  • MongoDB container for windows (and mac) contributors

    MongoDB container for windows (and mac) contributors

    When I launch MongoDb containers from a windows machine (using DockerTools vm) they stop working due to a problem when runing init.sh script.

    After analyzing it seems that the problem is due to file formating of init.sh on windows. In fact, the OS adds a "bad" end of line that disturbs the execution of the script on linux.

    The solution is to use dos2unix to make sure the file is well formatted before executing it

    opened by elkolotfi 2
  • Add exchange-rates-client fallback implementation

    Add exchange-rates-client fallback implementation

    This PR tries to fix application build failure. Currently, maven build failing due to failed ExchangeRatesClientTest test. The test is failing while requesting exchange rates from Fixer API.

    -------------------------------------------------------------------------------
    Test set: com.piggymetrics.statistics.client.ExchangeRatesClientTest
    -------------------------------------------------------------------------------
    Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.895 sec <<< FAILURE! - in com.piggymetrics.statistics.client.ExchangeRatesClientTest
    shouldRetrieveExchangeRates(com.piggymetrics.statistics.client.ExchangeRatesClientTest)  Time elapsed: 0.884 sec  <<< ERROR!
    com.netflix.hystrix.exception.HystrixRuntimeException: getRates failed and no fallback available.
    

    The root cause of this failure is discontinued Fixer API (since June 1st, 2018). More details from the response:

    Caused by: feign.FeignException: status 404 reading ExchangeRatesClient#getRates(Currency); content:
    {
      "0": "#################################################################################################################################",
      "1": "#                                                                                                                               #",
      "2": "# IMPORTANT - PLEASE UPDATE YOUR API ENDPOINT                                                                                   #",
      "3": "#                                                                                                                               #",
      "4": "# This API endpoint is deprecated and has now been shut down. To keep using the Fixer API, please update your integration       #",
      "5": "# to use the new Fixer API endpoint, designed as a simple drop-in replacement.                                                  #",
      "6": "# You will be required to create an account at https://fixer.io and obtain an API access key.                                   #",
      "7": "#                                                                                                                               #",
      "8": "# For more information on how to upgrade please visit our Github Tutorial at: https://github.com/fixerAPI/fixer#readme          #",
      "9": "#                                                                                                                               #",
      "a": "#################################################################################################################################"
    }
    

    So, this PR adds a workaround in form of fallback implementation for ExchangeRatesClient, which returns empty ExchangeRatesContainer.

    The motivation of this fix is the following:

    • fixing build failure for now
    • providing degraded service in case of third-party failure, instead of failing completely

    Notes: I've quickly looked at new Fixer API and would like to share with you what I've found :)

    Fixer API now requires access key for any requests, which by itself not a big problem, as they are offering a free tier. The worst part is that it's now limited up to 1000 requests per month and doesn't allow to specify the custom base currency. As result, it seems to me, that Fixer SaaS API is not suitable anymore for this application.

    Next steps: As a further logical step to solve this issue, I would suggest to:

    • either switch to another exchange rates info provider
    • or deploy an instance of Fixer service as a part of the whole application ecosystem

    What do you think? :)

    opened by solo-yolo 2
  • Auth persist clients details

    Auth persist clients details

    mysql db for persisting o-auth clients and tokens, slim-docker-compose files for running only vital services, hystrix dashboard wrong port configuration fix

    opened by Debski-A 1
  • Added build project directions to 'Before you start' subsection

    Added build project directions to 'Before you start' subsection

    docker-compose.dev.yml does not work if the project is not fully built since Dockerfiles expect built jars to be present in the project, hence the necessity for updated instructions.

    opened by ddubson 1
  • refactor-and-add-my-code --> {

    refactor-and-add-my-code --> {

    • it was removed some bad imports, use lombok library to reduce common or noisy code like encapsulation. I recommend to read about assembler or mappers and use DTO to transform and convert entity to dto and the other way too. }
    opened by Jhooomn 0
  • Hystrix Dasboard not working

    Hystrix Dasboard not working

    Turbine stream app currently is running on 8080 but in compose file we have 8989 see https://github.com/sqshq/piggymetrics/blob/master/docker-compose.yml

    Apart of it actuator/hystrix.stream metrics were missing. All those issue could be related to Spring versions as we dont enforce specific one...

    opened by zippiy 1
  • Persist Auth

    Persist Auth

    Actually, client details and tokens are stored in memory. Naturally this is not the best as it creates a strong coupling between the service and the data it manages.

    Hence, I made this pull request to manage the authentication data on a separate container. I also shared the image on a docker repo (feel free to use your own repo if you prefer).

    At your disposition for further information and/or discussion :)

    opened by elkolotfi 2
Releases(spring.version.2.0.3)
Owner
Alexander Lukyanchikov
Alexander Lukyanchikov
循序渐进,学习Spring Boot、Spring Boot & Shiro、Spring Batch、Spring Cloud、Spring Cloud Alibaba、Spring Security & Spring Security OAuth2,博客Spring系列源码:https://mrbird.cc

Spring 系列教程 该仓库为个人博客https://mrbird.cc中Spring系列源码,包含Spring Boot、Spring Boot & Shiro、Spring Cloud,Spring Boot & Spring Security & Spring Security OAuth2

mrbird 24.8k Jan 6, 2023
Deploying Spring Boot and MongoDB as Containers Using Docker and Docker Compose

springboot-mongodb-docker Deploying Spring Boot and MongoDB as Containers Using Docker and Docker Compose Steps & Commands pull mongo image from docke

Java Techie 9 Nov 25, 2022
DCL-350: Implementing MicroService Architecture using Spring Cloud

DCL-350: Implementing MicroService Architecture using Spring Cloud

Binnur KURT 3 Sep 20, 2022
Practice and testing with Java 11, Prometheus, and Spring-boot with MicroService Architecture. Designed to run on Kubernetes in minikube.

This application was written by Andrew Aslakson Built to run on minikube using kubernetes General race tracking system? Secure with Firebase Authentic

null 1 Feb 5, 2022
mall-swarm是一套微服务商城系统,采用了 Spring Cloud Hoxton & Alibaba、Spring Boot 2.3、Oauth2、MyBatis、Docker、Elasticsearch、Kubernetes等核心技术,同时提供了基于Vue的管理后台方便快速搭建系统。mall-swarm在电商业务的基础集成了注册中心、配置中心、监控中心、网关等系统功能。文档齐全,附带全套Spring Cloud教程。

mall-swarm 友情提示 快速体验项目:在线访问地址。 全套学习教程:《mall学习教程》。 Spring Cloud全套教程:《SpringCloud学习教程》。 专属学习路线:学习不走弯路,整理了套非常不错的《mall专属学习路线》。 项目交流:想要加群交流项目的朋友,可以加入mall项目

macro 9.7k Jan 3, 2023
Spring boot microservice example with Eureka Server + Eureka Client + Spring Cloud API Gateway + OAuth2.0 + Circuit Breaker + Resilience4J + FeignClient + RestTemplate

Spring boot microservice example Spring boot microservice example with Eureka Server + Eureka Client + Spring Cloud API Gateway + OAuth2.0 + Circuit B

Subhash Lamba 47 Dec 29, 2022
The Spring Boot Sample App on K8S has been implemented using GKE K8S Cluster, Spring Boot, Maven, and Docker.

gke-springboot-sampleapp ?? The Spring Boot Sample App on K8S has been implemented using GKE K8S Cluster, Spring Boot, Maven, and Docker. Usage To be

KYEONGMIN CHO 1 Feb 1, 2022
该仓库中主要是 Spring Boot 的入门学习教程以及一些常用的 Spring Boot 实战项目教程,包括 Spring Boot 使用的各种示例代码,同时也包括一些实战项目的项目源码和效果展示,实战项目包括基本的 web 开发以及目前大家普遍使用的线上博客项目/企业大型商城系统/前后端分离实践项目等,摆脱各种 hello world 入门案例的束缚,真正的掌握 Spring Boot 开发。

Spring Boot Projects 该仓库中主要是 Spring Boot 的入门学习教程以及一些常用的 Spring Boot 实战项目教程,包括 Spring Boot 使用的各种示例代码,同时也包括一些实战项目的项目源码和效果展示,实战项目包括基本的 web 开发以及目前大家普遍使用的前

十三 4.5k Dec 30, 2022
8INF138-TP3-SECURITY-DOCKER - Le docker du tp3 du cours 8INF138 de l'UQAC

?? TP3 - 8INF138 Ceci est le TP3 du module 8INF138 de l'Universite du Quebec a Chicoutimi Le rapport ce situe dans le depot Le travail visuel n'a pas

Aurelien Marc 2 May 30, 2022
消息推送平台 - 所使用的技术栈包括:SpringBoot、SpringDataJPA、MySQL、Docker、docker-compose、Kafka、Redis、Apollo、prometheus、Grafana、GrayLog等等

项目介绍 austin项目核心功能:发送消息 项目出现意义:只要公司内有发送消息的需求,都应该要有类似austin的项目,对各类消息进行统一发送处理。这有利于对功能的收拢,以及提高业务需求开发的效率 系统项目架构 austin项目核心流程:austin-api接收到发送消息请求,直接将请求进MQ。a

Java3y 2.9k Dec 31, 2022
一个涵盖六个专栏:Spring Boot 2.X、Spring Cloud、Spring Cloud Alibaba、Dubbo、分布式消息队列、分布式事务的仓库。希望胖友小手一抖,右上角来个 Star,感恩 1024

友情提示:因为提供了 50000+ 行示例代码,所以艿艿默认注释了所有 Maven Module。 胖友可以根据自己的需要,修改 pom.xml 即可。 一个涵盖六个主流技术栈的正经仓库: 《Spring Boot 专栏》 《Spring Cloud Alibaba 专栏》 《Spring Clou

芋道源码 15.7k Dec 31, 2022
企业级 Spring Cloud Alibaba 微服务脚手架,nacos 配置中心、Oauth2认证与鉴权、Docker 容器化部署,开发环境一键式脚本安装,10分钟即可构建

云龙 Cloud Dragon 适合于企业级别的微服务开发脚手架,功能齐全,开箱即用,部署快捷 目前项目处于开发阶段,部分功能已经可以使用,后续会逐步完成其他规划内容,并完善项目文档,如果你在使用过程中遇到任何问题,可以通过 QQ 群聊联系我,请戳这里 加入群聊。 ?? 项目介绍 Cloud Dra

chenxiaolong 17 Dec 19, 2022
Restaurant Management Project with Microservice Architecture by Evren Tan

Restaurant Management Restaurant Management Project with Microservice Architecture is developed by Evren Tan. Table of Contents Modules Cloud Config S

Evren Tan 26 Dec 11, 2022
Clean-architecture-guide - Guia sobre Clean Architecture criado a partir dos meus estudos sobre o tema.

Clean Architecture Guide Arquitetura são as práticas e fundamentos de como organizamos um sistema. Tem relação e como os componentes estão relacionado

Jean Jacques Nascimento Barros 3 Apr 23, 2022
参考 DDD/Clean Architecture 设计理念,整合 Spring Boot/Spring Security/Mybatis Plus/Vavr 的 Spring Realworld 应用案例

Demo · 更多项目 · 参考资料 ms-spring-ddd-examples Unified Domain-driven Layered Architecture for MicroService Apps,试图探索一套切实可行的应用架构规范,可以复制、可以理解、可以落地、可以控制复杂性的指导

王下邀月熊 19 Sep 23, 2022
Super simple deploy using spring boot, docker, k8s and kind

Target Target of this repository is show how to build spring boot application Docker image and deploy it with kind and k8s at least in local. Prerequi

Max 4 Aug 22, 2021
A high availability shopping(ecommerce) system using SpringBoot, Spring Cloud, Eureka Server, Spring Cloud Gateway, resillience4j, Kafka, Redis and MySQL.

High-availability-shopping-system A high availability shopping(ecommerce) system using SpringBoot, Spring Cloud, Eureka Server, Spring Cloud Gateway,

LeiH 1 Oct 26, 2022
Spring Boot Log4j - CVE-2021-44228 Docker Lab

Spring Boot Log4j - CVE-2021-44228 The Log4Shell vulnerability (CVE-2021-44228) ultimately is a quite simple JNDI Injection flaw, but in a really real

Tri Wanda Septian 19 Jun 10, 2022
Spring-boot project using open-api, docker, maven, REST

library-service spring-boot project using open-api, docker, maven, REST I used docker to run the project, as well as open-api to generate basic GET an

Sandy Huang 2 Nov 27, 2022