- Notifications
You must be signed in to change notification settings - Fork4
awakelife93/spring-boot-kotlin-boilerplate
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
A production-ready Spring Boot 3.5.5 + Kotlin 2.0 starter project, offering a unified package with essential backendfeatures pre-integrated and real-world examples.
Application
- Kotlin 2.0
- Jdk 21
- Spring boot 3.5.5
- mvc
- webflux
- Gradle 8.10
- Spring Security
- Spring Batch
- Springdoc OpenAPI
- Postgresql
- h2 database (PostgreSQL mode) - localhost environment
- Jpa
- QueryDSL
- Redis
- Jwt
- Validation
- Kotlin Logging
- Logback
- Flyway
- Webhook
- Slack
- Discord
- Kafka
- WebClient
- Spring Actuator
Test
- Spring Boot Starter Test
- Spring Security
- Spring Batch
- Junit 5
- Mockito Kotlin
- Mockito Inline
- Kotest
- Mockk
- Instancio
- h2 database (PostgreSQL mode)
- Flyway
Etc
- Docker
- Pgadmin
- Ktlint
- Detekt
- Mailhog
- Netty resolver dns native macos
- Kafka UI
Monitoring
- Prometheus
- Grafana
- Sentry
- monitoring
- docker
- src
- common
- domain (post, user, auth)
- example
- WelcomeSignUpConsumer: Kafka Consumer(SignUp Event) Example
- infrastructure (kafka, redis, webhook, mail)
- security
- spring security + jwt logic
- utils
- resources
- db
- migration: flyway sql
- sql: spring batch postgresql metadata sql
- logback-spring.xml
- Logback configuration with environment-specific settings
- Profiles: prod, dev, local
- application.yml
- prod, dev, local, common, test, secret-{environment}
- common: Write common variables for the project.
- test: Create the variables needed for your test environment.
- secret-{environment}: your secret variables for each environment.
- db
If you're interested, check this out as well:
- Repository:kotlin-clean-architecture-multimodule
To use the application, the following two services must be installed and running:
- kafka
- redis
- mailhog
- grafana
- prometheus
Database DDL Management
- This project uses Flyway for DDL management instead of JPA auto-generation.
- Migration scripts are located insrc/main/resources/db/migration
- If you prefer not to use Flyway, entity synchronization is configured - you can use JPA DDL auto-generation instead.
- JPA DDL configuration:src/main/resources/application-common.yml (spring.jpa.generate-ddl)
- Set
spring.jpa.hibernate.ddl-autoproperty for each environment (local, dev, prod) as needed
Webhook
- enable & route endpoint
- default enable true
- types
- slack
- discord
- enable & route endpoint
// example// 1. allwebHookProvider.sendAll("Subscription request received from method${parameter.method?.name}.",mutableListOf("Request Body:$body"))// 2. target slackwebHookProvider.sendSlack("Failed to send message to Kafka (foo)",mutableListOf("Failed to send message to Kafka:${exception.message} /$foo"))// 3. target discordwebHookProvider.sendDiscord("Failed to send message to Kafka (bar)",mutableListOf("Failed to send message to Kafka:${exception.message} /$bar"))
Mailhog
- mailhog is a tool for testing email sending.
- If you want to use MailHog, the default SMTP port is 1025.Of course, if you already have your own preferred setup, you can freely adjust the port as needed.
- Please check the settings in application-local.yml and application-secret-local.yml.
Lint
- ktlint
- using the official lint rules by default.
- report output
- build/reports/ktlint
- detekt
- using rules
- report output
- build/reports/detekt
- ktlint
Docker & Infrastructure Services
- The project includes Docker Compose configurations for all required services
- For detailed setup, port information, and service management, seeDocker Setup Guide
Create Spring Batch metadata table (localhost, development and production environments.)
- Run your ddl script or Please refertogithub - spring batch
- Since this project uses postgresql, the spring.batch.jdbc.initialize-schema: always option does not work.
- localhost & test environment,generatingbatch-postgresql-metadata-schema.sql.
- Run your ddl script or Please refertogithub - spring batch
Two types of tests
- mockito
- kotest & mockk
- if you want to bypass Spring Security authentication issues.
- SecurityListenerFactory
- BaseIntegrationController
// example listeners(SecurityListenerFactory())Then("Call DELETE /api/v1/users/{userId}").config(tags=setOf(SecurityListenerFactory.NonSecurityOption)) {// ... }
- if you want to bypass Spring Security authentication issues.
Kafka
- KafkaTopicMetaProvider
- Manage metadata related to topics
- DLQ
- DLQs are dynamically created in this project.
- default fallback partition: 1 (if the topicpartition does not exist)
- KafkaTopicMetaProvider
- To use the data collected by Spring Actuator, please enter the correct URL.
- Replace '{ip address}:8085' with your actual IP address.
- Actuator properties
- To use the data collected by Spring Actuator, please enter the correct URL.
Service Access URLs (When services are running)
- API Documentation (Swagger):http://localhost:8085/swagger-ui/index.html
- H2 Console (local environment):http://localhost:8085/h2-console
- Application Server:http://localhost:8085
- MailHog (Email Testing):http://localhost:8025
- PgAdmin (PostgreSQL Management):http://localhost:8088
- Kafka UI (Kafka Management):http://localhost:9000
- Redis: localhost:6379 (CLI/Client access)
- PostgreSQL: localhost:5432 (Database connection)
- Kafka: localhost:9092 (Broker connection)
- Zookeeper: localhost:2181 (Coordination service)
- Grafana (Metrics Dashboard):http://localhost:3000
- Prometheus (Metrics Collection):http://localhost:9090
Hyunwoo Park
About
A production-ready Spring Boot 3.5.5 + Kotlin 2.0 starter project, offering a unified package with essential backend features pre-integrated and real-world demo examples.
Topics
Resources
Uh oh!
There was an error while loading.Please reload this page.