# Hướng dẫn setup môi trường và start project

## 1. Mục tiêu

Hướng dẫn developer:

- Cài đặt môi trường chạy project
- Cấu hình biến môi trường
- Khởi động project Spring Boot
- Kiểm tra project chạy thành công

---

## 2. Yêu cầu hệ thống

### 2.1. Phần mềm cần cài đặt

<div class="TyagGW_tableContainer" id="bkmrk-c%C3%B4ng-c%E1%BB%A5-phi%C3%AAn-b%E1%BA%A3n-kh"><table class="w-fit min-w-(--thread-content-width)" data-end="764" data-start="550"><thead data-end="585" data-start="550"><tr data-end="585" data-start="550"><th class="" data-col-size="sm" data-end="560" data-start="550">Công cụ</th><th class="" data-col-size="sm" data-end="585" data-start="560">Phiên bản khuyến nghị</th></tr></thead><tbody data-end="764" data-start="614"><tr data-end="644" data-start="614"><td data-col-size="sm" data-end="623" data-start="614">Java JDK</td><td data-col-size="sm" data-end="644" data-start="623">**17 (bắt buộc)**</td></tr><tr data-end="659" data-start="645"><td data-col-size="sm" data-end="651" data-start="645">Maven</td><td data-col-size="sm" data-end="659" data-start="651">3.8+</td></tr><tr data-end="676" data-start="660"><td data-col-size="sm" data-end="664" data-start="660">Git</td><td data-col-size="sm" data-end="676" data-start="664">Mới nhất</td></tr><tr data-end="704" data-start="677"><td data-col-size="sm" data-end="681" data-start="677">IDE</td><td data-col-size="sm" data-end="704" data-start="681">IntelliJ IDEA 2023+</td></tr><tr data-end="734" data-start="705"><td data-col-size="sm" data-end="716" data-start="705">PostgreSQL</td><td data-col-size="sm" data-end="734" data-start="716">**14 hoặc 15**</td></tr><tr data-end="764" data-start="735"><td data-col-size="sm" data-end="743" data-start="735">DB Tool</td><td data-col-size="sm" data-end="764" data-start="743">DBeaver / PgAdmin</td></tr></tbody></table>

</div>---

### 2.2. Kiểm tra cài đặt

Mở terminal:

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk-java--version"><div class="sticky top-[calc(var(--sticky-padding-top)+9*var(--spacing))]"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`java -version`</div></div>Kết quả mong muốn:

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk-java-version-%2217.0.x"><div class="sticky top-[calc(var(--sticky-padding-top)+9*var(--spacing))]"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-attribute">java</span> version <span class="hljs-string">"17.0.x"</span>`</div></div>Kiểm tra Maven:

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk-mvn--v"><div class="sticky top-[calc(var(--sticky-padding-top)+9*var(--spacing))]"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`mvn -v`</div></div>---

## 3. Clone source code

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk-link-driver%3A%C2%A0"><div class="sticky top-[calc(var(--sticky-padding-top)+9*var(--spacing))]"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`link driver: https://drive.google.com/file/d/1Ytzo-_uYqhhD8Pa4HUmCEjwPatoCnfPe/view?usp=sharing `</div></div>---

## 4. Cấu hình biến môi trường

Project sử dụng file:

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk-application.properti"><div class="overflow-y-auto p-4" dir="ltr">`application.properties`</div></div>---

## 4.1. Các biến môi trường cơ bản

Ví dụ file:

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk-application.properti-1"><div class="sticky top-[calc(var(--sticky-padding-top)+9*var(--spacing))]"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`application.properties`</div></div><div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk-server%3A-port%3A-8080-s"><div class="sticky top-[calc(var(--sticky-padding-top)+9*var(--spacing))]"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-attr">server:</span>  <span class="hljs-attr">port:</span> <span class="hljs-number">8080</span><span class="hljs-attr">spring:</span>  <span class="hljs-attr">datasource:</span>    <span class="hljs-attr">url:</span> <span class="hljs-string">jdbc:postgresql://localhost:5432/lifetex</span>    <span class="hljs-attr">username:</span> <span class="hljs-string">lifetex</span>    <span class="hljs-attr">pass</span>`<div>  
</div></div></div>```
#spring.application.name=demo
#server.port=8080
#
## ===== Oracle datasource =====
#spring.datasource.url=jdbc:oracle:thin:@//192.168.0.111:1111/ORCLPDB1
#spring.datasource.username=test
#spring.datasource.password=test
#spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
#
## ===== JPA =====
#spring.jpa.hibernate.ddl-auto=none
#spring.jpa.show-sql=true
#spring.jpa.properties.hibernate.format_sql=true
#spring.jpa.database-platform=org.hibernate.dialect.OracleDialect
#
## ===== Hikari pool (optional) =====
#spring.datasource.hikari.maximum-pool-size=10
#spring.datasource.hikari.minimum-idle=2
#spring.datasource.hikari.connection-timeout=30000
#
#management.endpoints.web.exposure.include=health,info
```

---

## 4.2. Cách chỉnh sửa biến môi trường

### Cách 1: Sửa trực tiếp trong file `application.properties`

Ví dụ đổi DB:

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk-spring%3A-datasource%3A-"><div class="sticky top-[calc(var(--sticky-padding-top)+9*var(--spacing))]"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-attr">spring:</span>  <span class="hljs-attr">datasource:</span>    <span class="hljs-attr">url:</span> <span class="hljs-string">jdbc:postgresql://localhost:5432/test_db</span>    <span class="hljs-attr">username:</span> <span class="hljs-string">test</span>    <span class="hljs-attr">password:</span> <span class="hljs-string">test123</span>`</div></div>---

### Cách 2: Dùng biến môi trường hệ điều hành

Ví dụ trong `application.properties`:

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk-spring%3A-datasource%3A--1"><div class="sticky top-[calc(var(--sticky-padding-top)+9*var(--spacing))]"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-attr">spring:</span>  <span class="hljs-attr">datasource:</span>    <span class="hljs-attr">url:</span> <span class="hljs-string">${DB_URL}</span>    <span class="hljs-attr">username:</span> <span class="hljs-string">${DB_USER}</span>    <span class="hljs-attr">password:</span> <span class="hljs-string">${DB_PASS}</span>`</div></div>---

#### Trên Windows (PowerShell)

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk-%24env%3Adb_url%3D%22jdbc%3Apo"><div class="sticky top-[calc(var(--sticky-padding-top)+9*var(--spacing))]"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-variable">$env:DB_URL</span>=<span class="hljs-string">"jdbc:postgresql://localhost:5432/lifetex"</span><span class="hljs-variable">$env:DB_USER</span>=<span class="hljs-string">"lifetex"</span><span class="hljs-variable">$env:DB_PASS</span>=<span class="hljs-string">"123456"</span>`</div></div>---

#### Trên Linux/Mac

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk-export-db_url%3Djdbc%3Ap"><div class="sticky top-[calc(var(--sticky-padding-top)+9*var(--spacing))]"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-built_in">export</span> DB_URL=jdbc:postgresql://localhost:5432/lifetex<span class="hljs-built_in">export</span> DB_USER=lifetex<span class="hljs-built_in">export</span> DB_PASS=123456`</div></div>---

## 5. Chọn profile chạy

Spring Boot thường dùng profile:

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk-dev-staging-prod"><div class="sticky top-[calc(var(--sticky-padding-top)+9*var(--spacing))]"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`devstaging<span class="hljs-built_in">prod</span>`</div></div>Ví dụ chạy với profile `dev`.

---

### Cách cấu hình profile

#### Cách 1: Trong biến môi trường

Windows:

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk-%24env%3Aspring_profiles"><div class="sticky top-[calc(var(--sticky-padding-top)+9*var(--spacing))]"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-variable">$env:SPRING_PROFILES_ACTIVE</span>=<span class="hljs-string">"dev"</span>`</div></div>Linux/Mac:

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk-export-spring_profil"><div class="sticky top-[calc(var(--sticky-padding-top)+9*var(--spacing))]"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-built_in">export</span> SPRING_PROFILES_ACTIVE=dev`</div></div>---

#### Cách 2: Trong IDE

VM options:

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk--dspring.profiles.ac"><div class="sticky top-[calc(var(--sticky-padding-top)+9*var(--spacing))]"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-attr">-Dspring.profiles.active</span>=dev`</div></div>---

## 6. Build project

Trong thư mục project:

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk-mvn-clean-install"><div class="sticky top-[calc(var(--sticky-padding-top)+9*var(--spacing))]"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`mvn clean install`</div></div>Nếu build thành công sẽ thấy:

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk-build-success"><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-attribute">BUILD</span> SUCCESS`</div></div>---

## 7. Start project

### Chạy trong IDE

Trong IntelliJ:

1. Mở project
2. Mở file:

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk-demoapplication.java"><div class="sticky top-[calc(var(--sticky-padding-top)+9*var(--spacing))]">  
</div><div class="overflow-y-auto p-4" dir="ltr">`DemoApplication.java`</div></div>3. Nhấn nút **Run**

---

## 8. Kiểm tra project chạy thành công

Sau khi start, kiểm tra log:

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk-started-demoapplicat"><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-attribute">Started</span> DemoApplication in <span class="hljs-number">5</span>.<span class="hljs-number">123</span> seconds`</div></div>Mở trình duyệt:

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk-http%3A%2F%2Flocalhost%3A808"><div class="sticky top-[calc(var(--sticky-padding-top)+9*var(--spacing))]"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`http:<span class="hljs-comment">//localhost:8080</span>`</div></div>Hoặc gọi API:

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk-http%3A%2F%2Flocalhost%3A808-1"><div class="sticky top-[calc(var(--sticky-padding-top)+9*var(--spacing))]"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`http://localhost:8080/api/v1/health`</div></div>