spring-web-modules/README.md
2022-07-21 11:13:07 +07:00

171 lines
4.2 KiB
Markdown

# CUBETIQ Web Modules (Template)
- Setup and Default Web Configuration
- Swagger UI and API's Documentation (SpringDoc)
- General Purpose for External and Internal use-cases
- Dockerfile and Docker profile build support
- Kubernetes support
### Language and Framework
- Spring Boot: 2.7.1
- Kotlin: 1.7.10
- Gradle: 7.4.1
# Modules
- API (Default Module)
### Spring Data
- Add `spring-data-jpa` dependency in `build.gradle.kts`
```kotlin
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
```
- Add `spring-data-redis` dependency in `build.gradle.kts` (Redis + Driver)
```kotlin
implementation("org.springframework.boot:spring-boot-starter-data-redis")
```
### Spring Boot Properties
- Recommend
```yaml
spring:
application:
name: ${APP_NAME:spring-web-api}
app:
data-dir: ${APP_DATA_DIR:${user.home}/${spring.application.name}}
```
- Upload File Properties
```yaml
server:
tomcat:
max-http-form-post-size: ${SERVER_MAX_HTTP_FORM_POST_SIZE:50MB}
spring:
servlet:
multipart:
max-file-size: 256MB
max-request-size: 256MB
enabled: true
```
- Logging
```yaml
logging:
file:
path: ${LOGGING_FILE_PATH:${app.data-dir}/logs/}
name: ${logging.file.path}/app.log
```
### Spring Data Redis
- Redis Properties
```yaml
spring:
redis:
host: ${REDIS_HOST:localhost}
port: ${REDIS_PORT:6379}
password: ${REDIS_PASSWORD:your_password}
```
### Spring Data JPA Properties
- Datasource Enhancement (Default: PostgresSQL)
```yaml
spring:
datasource:
driverClassName: ${DATA_SOURCE_DRIVER_CLASS_NAME:org.postgresql.Driver}
url: ${DATA_SOURCE_URL:jdbc:postgresql://localhost:5432/demo}
username: ${POSTGRES_USERNAME:postgres}
password: ${POSTGRES_PASSWORD:postgres}
hikari:
max-lifetime: ${DATA_SOURCE_MAX_LIFETIME:1800000}
connection-timeout: ${DATA_SOURCE_CONNECTION_TIMEOUT:30000}
idle-timeout: ${DATA_SOURCE_IDLE_TIMEOUT:600000}
maximum-pool-size: ${DATA_SOURCE_MAXIMUM_POOL_SIZE:10}
allow-pool-suspension: ${DATA_SOURCE_ALLOW_POOL_SUSPENSION:true}
tomcat:
max_active: ${DATA_SOURCE_TOMCAT_MAX_ACTIVE:100}
max_idle: ${DATA_SOURCE_TOMCAT_MAX_IDLE:10}
min-idle: ${DATA_SOURCE_TOMCAT_MIN_IDLE:10}
initial_size: ${DATA_SOURCE_TOMCAT_INITIAL_SIZE:10}
remove_abandoned: ${DATA_SOURCE_TOMCAT_REMOVE_ABANDONED:true}
jpa:
database-platform: ${JPA_DATABASE_PLATFORM:org.hibernate.dialect.PostgreSQLDialect}
show-sql: ${JPA_SHOW_SQL:false}
hibernate:
ddl-auto: ${JPA_HIBERNATE_DDL_AUTO:update}
properties:
hibernate:
dialect: ${JPA_HIBERNATE_DIALECT:org.hibernate.dialect.PostgreSQLDialect}
open-in-view: ${JPA_OPEN_IN_VIEW:false}
```
- PostgreSQL
```yaml
spring:
datasource:
driverClassName: ${DATA_SOURCE_DRIVER_CLASS_NAME:org.postgresql.Driver}
url: jdbc:postgresql://${POSTGRES_HOST:localhost}:${POSTGRES_PORT:5432}/${POSTGRES_DB:demo}
username: ${POSTGRES_USERNAME:postgres}
password: ${POSTGRES_PASSWORD:postgres}
```
- MySQL
```yaml
spring:
datasource:
driverClassName: ${DATA_SOURCE_DRIVER_CLASS_NAME:com.mysql.cj.jdbc.Driver}
url: jdbc:mysql://${MYSQL_HOST:localhost}:${MYSQL_PORT:3306}/${MYSQL_DB:demo}?createDatabaseIfNotExist=true&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
username: ${MYSQL_USERNAME:demo}
password: ${MYSQL_PASSWORD:demo}
jpa:
database-platform: ${JPA_DATABASE_PLATFORM:org.hibernate.dialect.MySQLDialect}
properties:
hibernate:
dialect: ${JPA_HIBERNATE_DIALECT:org.hibernate.dialect.MySQLDialect}
```
- H2 (Embedded)
```yaml
spring:
datasource:
driverClassName: ${DATA_SOURCE_DRIVER_CLASS_NAME:org.h2.Driver}
url: jdbc:h2:file:${H2_DB_PATH:./data/db};DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
username: ${H2_USERNAME:sa}
password: ${H2_PASSWORD:password}
jpa:
database-platform: ${JPA_DATABASE_PLATFORM:org.hibernate.dialect.H2Dialect}
h2:
console:
enabled: ${H2_CONSOLE_ENABLED:true}
```
- Avoid the Lazy Initialization Problem
```yaml
spring:
jpa:
properties:
hibernate:
enable_lazy_load_no_trans: ${HIBERNATE_LAZY_NO_TRANS:true}
```
# Contributors
- Sambo Chea <sombochea@cubetiqs.com>