• Stars
    star
    112
  • Rank 306,084 (Top 7 %)
  • Language
    Java
  • Created almost 5 years ago
  • Updated almost 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Spring Boot Multi-tenant Sample

spring-boot-multitenant

This is a Spring Boot multi-tenant sample application which supports all multiple-tenancy models. By default multi schema model is enabled.
Multi-Tenancy model is enabled using Hibernate multi-tenancy support.

There are multiple well-known strategies to implement this architecture, ranging from highly isolated (like single-tenant) to everything shared.
We can implement multi-tenancy using any of the following approaches:

  1. Database per Tenant: Each Tenant has its own database and is isolated from other tenants.
  2. Shared Database, Shared Schema: All Tenants share a database and tables. Every table has a Column with the Tenant Identifier, that shows the owner of the row.
  3. Shared Database, Separate Schema: All Tenants share a database, but have their own database schemas and tables.

By Default Shared Database, Separate Schema approach is enabled. It works with JdbcTemplate also which is not natively supported by Spring Multi-Tenancy. When using Multi-tenancy in Spring Boot Table needs to be created externally. Auto table creation needs to be turned off. We will use Public Schema as the default schema. The DDL to create the table are present in DDL.sql in resources folder.

Note: Once Multi-Tenancy is enabled all the DDL needs to be executed manually before staring the application

Compile and package

Being Maven centric, you can compile and package it without tests using:

mvn clean package -Dmaven.test.skip=true

Once you have your jar file, you can run it.

Run it

To run it you can go to the Maven target folder generated and execute the following command:

java -jar multitenant-XXX.jar

Testing

Once started you can go and request the data using different tenants :

  • curl -X POST http://localhost:8080/ -H 'Content-Type: application/json' -H 'X-TenantID: test1' -d '{"name":"Mumbai"}'

  • curl -X POST http://localhost:8080/ -H 'Content-Type: application/json' -H 'X-TenantID: test2' -d '{"name":"Kolkata"}'

  • curl -X GET http://localhost:8080/ -H 'Content-Type: application/json' -H 'X-TenantID: test1'

  • curl -X GET http://localhost:8080/ -H 'Content-Type: application/json' -H 'X-TenantID: test2'

More Information

for more detailed technical information please check my post : https://medium.com/swlh/multi-tenancy-implementation-using-spring-boot-hibernate-6a8e3ecb251a

More Repositories

1

fastapi-celery-rabbitmq-application

Sample FastAPI Application to demonstrate Async architecture with Celery, RabbitMQ and Flower
Python
90
star
2

spring-webflux-reactive-rest-api-example

The purpose of this project is to demonstrate how we can use Spring WebFlux to create a simple reactive web application.
Java
80
star
3

springboot-oauth-jwt

Spring Boot Oauth 2.0 using JWT
Java
57
star
4

python-sample-flask-application

Sample Flask application using Flask-RESTPlus , Flask-Marshmallow and Flask-SQLAlchemy
Python
33
star
5

python-sample-FastAPI-application

Sample Python application using FastAPI , Uvicorn and SQLAlchemy
Python
23
star
6

elasticsearch

API to interact with Elasticsearch written in Java
Java
19
star
7

spring-boot-ignite

The purpose of this project is to demonstrate Ignite as a Cache Provider for Spring Cache in one package. It also contains sample code on Apache Ignite's Spring Data integration.
14
star
8

echo-example

Simple Web application written in go using Echo Framework
Go
13
star
9

offline_chatgpt

Offline ChatGPT using Large Language Model (LLM)
12
star
10

spring-boot-with-wiremock

The purpose of this project is to demonstrate how we can use Spring Boot along with WireMock and JUnit 5 to perform Integration Testing with mocking external REST API calls.
Java
8
star
11

sample-flask-application-with-openapi

Sample Flask application using Connexion, Flask-Marshmallow, and Flask-SQLAlchemy.
Python
7
star
12

Machine-Learning-with-Python

Python Machine Learning Jupyter Notebooks. It contains small projects to practice for various machine learning techniques which can be used in any dataset.
Roff
5
star
13

company-explorer

Company Explorer, is a versatile tool for in-depth research on publicly traded companies.
Python
3
star
14

data-analysis-dashboard

Streamlit app for demonstration of Quarterly Sales Metrics Dashboard
Python
3
star
15

Ignite-Querying-Cache

Sample Spring Boot application to query the data stored in the Cache of Apache Ignite using query API.
2
star
16

Python-Projects

A collection of simple python mini projects to enhance your python skills
Python
2
star
17

sumanentc

2
star
18

google-oauth

Google OAuth Integration with Spring
Java
1
star
19

SparkSqlWithSpring

Java
1
star
20

sparkSqlJava

Java
1
star
21

javascript-apps

HTML
1
star
22

COVID-19-bot

This is an open source bot for querying information about Coronavirus (COVID-19).
Python
1
star
23

recipe-app

Recipe Web App
JavaScript
1
star
24

pig-dice-game

PIG Dice Game
JavaScript
1
star
25

openfaas-sample-function

Sample Serverless Function using OpenFaas Templates
Dockerfile
1
star
26

spring-boot-cloud-native-buildpacks-example

Sample Spring Boot application using cloud-native-buildpacks
Java
1
star
27

go-programming

Contains examples written in GO
Go
1
star
28

Rest-API-Inspector

REST API Inspector is a Chrome Extension, which helps you inspect all the REST API calls made by any website. Instead of using the Inspect mode of Google Chrome to manually check the REST API calls made by any website, this extension allows a ready visual access.
JavaScript
1
star