Configuration basics

01.07.2026 | Muallif: Jaxongir a.k.a | Kategoriya: Spring Boot | 16 daqiqa o'qish

Bu maqolada Spring Boot loyihani sozlashni o‘rganamiz: application.properties, application.yml, @Value, server.port, logging.level, auto-configuration va embedded Tomcat/Jetty.


1. Configuration nima?

Configuration - ilova qanday ishlashini belgilaydigan sozlamalar.

Masalan:

Server qaysi portda ishlaydi?
Database qayerda?
Log darajasi qanday?
JWT secret qayerda?
File upload limiti qancha?
Email SMTP sozlamalari qanday?

Bularni Java kod ichiga qattiq yozib qo‘yish yomon amaliyot hisoblanadi.

Yomon:

String dbUrl = "jdbc:postgresql://localhost:5432/mydb";

Yaxshi variant:

spring.datasource.url=jdbc:postgresql://localhost:5432/mydb

2. application.properties nima?

Spring Boot’da asosiy configuration fayl:

src/main/resources/application.properties

Masalan:

server.port=8081

spring.application.name=demo-app

logging.level.root=INFO
logging.level.uz.jts.demo=DEBUG

Bu fayl Spring Boot ishga tushganda avtomatik o‘qiladi.


3. application.yml nima?

application.yml ham configuration fayl. Faqat yozilishi boshqacha.

application.properties:

server.port=8081
spring.application.name=demo-app
logging.level.root=INFO

application.yml:

server:
  port: 8081

spring:
  application:
    name: demo-app

logging:
  level:
    root: INFO

Ikkalasi ham ishlaydi.


4. properties vs yml

Fayl

Afzalligi

Kamchiligi

application.properties

Sodda, boshlovchilar uchun qulay

Katta configda uzun bo‘lib ketadi

application.yml

Strukturali, o‘qish oson

Bo‘sh joy/indentation xatosi ko‘p uchraydi

Boshlangichlar uchun avval application.properties bilan boshlagan yaxshi.


5. server.port

Default holatda Spring Boot 8080 portda ishlaydi.

Agar o‘zgartirmoqchi bo‘lsak:

server.port=9090

Endi app quyida ishlaydi:

http://localhost:9090

Agar REST endpoint bo‘lsa:

@GetMapping("/hello")
public String hello() {
    return "Hello";
}

URL:

http://localhost:9090/hello

6. spring.application.name

Bu ilova nomini belgilaydi:

spring.application.name=user-service

Bu ayniqsa microservice, logging, tracing va monitoringda foydali.

Masalan loglarda service nomi ko‘rinishi mumkin:

user-service started successfully

7. Logging nima?

Logging - dastur ishlayotganda nima bo‘layotganini yozib borish.

Masalan:

User yaratildi
Payment bajarildi
Database connection failed
JWT token invalid

Java’da oddiy System.out.println() ishlatsa bo‘ladi, lekin real loyihada logger ishlatiladi.


8. Log level turlari

Level

Ma’nosi

Qachon ishlatiladi?

TRACE

Eng batafsil log

Juda chuqur debugging

DEBUG

Debug uchun

Development paytida

INFO

Oddiy ma’lumot

App normal ishlashi

WARN

Ogohlantirish

Xavf bor, lekin app ishlayapti

ERROR

Xato

Muammo yuz berdi

Odatda:

Development → DEBUG
Production  → INFO yoki WARN

9. logging.level

application.properties:

logging.level.root=INFO
logging.level.uz.jts.demo=DEBUG

Bu nimani anglatadi?

root=INFO              → umumiy loglar INFO darajada chiqadi
uz.jts.demo=DEBUG      → bizning package ichida DEBUG loglar ham chiqadi

10. Logger ishlatish

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    private static final Logger log = LoggerFactory.getLogger(UserService.class);

    public String getUser(Long id) {
        log.debug("User qidirilyapti. id={}", id);
        log.info("getUser method called");
        return "Ali";
    }
}

System.out.println() o‘rniga logger ishlatish kerak.


11. @Value nima?

@Value - config fayldagi qiymatni Java class ichiga olish uchun ishlatiladi.

application.properties:

app.default-name=Ali

Java:

@RestController
public class HelloController {

    @Value("${app.default-name}")
    private String defaultName;

    @GetMapping("/hello")
    public String hello() {
        return "Salom " + defaultName;
    }
}

Natija:

Salom Ali

12. @Value bilan port yoki custom value olish

application.properties:

app.company-name=JTS Corp
app.max-users=100

Java:

@Component
public class AppInfo {

    @Value("${app.company-name}")
    private String companyName;

    @Value("${app.max-users}")
    private Integer maxUsers;

    public void printInfo() {
        System.out.println(companyName);
        System.out.println(maxUsers);
    }
}

13. Default qiymat berish

Agar config topilmasa, default qiymat berish mumkin:

@Value("${app.default-language:uz}")
private String defaultLanguage;

Bu degani:

Agar app.default-language bo‘lsa → o‘shani oladi
Agar bo‘lmasa → uz oladi

14. @Value qachon yaxshi?

@Value kichik configlar uchun qulay:

app.name
app.version
app.default-page-size
app.upload-folder

Lekin config ko‘paysa, @ConfigurationProperties yaxshiroq. Bu boshlang'ich bosqichda chuqurroq o‘rganiladi.


15. Auto-configuration nima?

Auto-configuration - Spring Boot’ning eng kuchli tomoni.

Oddiy qilib:

Spring Boot dependency’larni ko‘rib, kerakli sozlamalarni avtomatik qiladi.

Masalan, spring-boot-starter-web qo‘shsak:

Spring Boot tushunadi:

Bu web application
Tomcat kerak
Spring MVC kerak
JSON converter kerak
DispatcherServlet kerak

Bularni qo‘lda sozlamaymiz.


16. Auto-configuration misol

Agar Maven’da shuni qo‘shsak:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Spring Boot avtomatik sozlaydi:

Embedded Tomcat
Spring MVC
Jackson JSON
Validation support
Logging

Shuning uchun bitta controller yozib API ochib ketaveramiz:

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello";
    }
}

17. Embedded Tomcat nima?

Oldin Java web app qilish uchun alohida Tomcat server o‘rnatilardi.

Eski usul:

Tomcat o‘rnatiladi
WAR fayl yig‘iladi
WAR Tomcat ichiga deploy qilinadi
Tomcat ishga tushiriladi

Spring Boot’da esa Tomcat app ichida keladi.

Bu embedded Tomcat deyiladi.

Ya’ni:

Spring Boot app = Java app + ichida web server

Shuning uchun app’ni oddiy main() method bilan ishga tushiramiz:

public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
}

18. Embedded Tomcat, Jetty, Undertow

Spring Boot default holatda Tomcat ishlatadi.

Lekin boshqa serverlar ham bor:

Server

Izoh

Tomcat

Default, eng ko‘p ishlatiladi

Jetty

Yengil va moslashuvchan

Undertow

Performance uchun ishlatiladi

BOshlanishiga uchun Tomcat yetarli.


19. Configuration order

Spring Boot configni bir nechta joydan olishi mumkin:

application.properties
application.yml
environment variables
command line arguments
profile-specific config

Masalan command line orqali port berish mumkin:

java -jar app.jar --server.port=9090

Bu application.propertiesdagi portdan ustun bo‘lishi mumkin.


20. Environment variable nima?

Environment variable - server yoki operatsion tizimdagi tashqi sozlamadir.

Masalan production’da secretlarni faylga yozish yomon:

Yomon:

jwt.secret=my-secret-key

Yaxshiroq:

jwt.secret=${JWT_SECRET}

Serverda esa:

export JWT_SECRET=super-secret-value

Spring JWT_SECRET qiymatini olib ishlatadi.


21. Configda secret saqlash xatosi

Hech qachon quyidagilarni GitHub’ga commit qilmaslik kerak:

Database password
JWT secret
Telegram bot token
SMTP password
AWS key
Payment provider secret

Yomon:

telegram.bot.token=123456:ABC_SECRET

Yaxshi:

telegram.bot.token=${TELEGRAM_BOT_TOKEN}

22. application.properties real misol

spring.application.name=shop-api

server.port=8080

logging.level.root=INFO
logging.level.uz.jts.shop=DEBUG

app.default-page-size=20
app.upload-dir=uploads
app.support-email=support@jtscorp.uz

Controllerda olish:

@RestController
@RequestMapping("/app")
public class AppController {

    @Value("${spring.application.name}")
    private String appName;

    @Value("${app.support-email}")
    private String supportEmail;

    @GetMapping("/info")
    public String info() {
        return appName + " | " + supportEmail;
    }
}

Request:

GET /app/info

Response:

shop-api | support@jtscorp.uz

23. application.yml real misol

spring:
  application:
    name: shop-api

server:
  port: 8080

logging:
  level:
    root: INFO
    uz.jts.shop: DEBUG

app:
  default-page-size: 20
  upload-dir: uploads
  support-email: support@jts.uz

Bu yuqoridagi properties bilan bir xil.


24. @Value bilan muammo

Agar config nomini noto‘g‘ri yozsak:

@Value("${app.support.mail}")
private String supportEmail;

Lekin faylda bunday bo‘lsa:

app.support-email=support@jts.uz

Spring xato beradi:

Could not resolve placeholder 'app.support.mail'

Sababi: app.support.mail topilmadi.

To‘g‘risi:

@Value("${app.support-email}")
private String supportEmail;

25. Config nomlash bo‘yicha yaxshi uslub

Yaxshi:

app.default-page-size=20
app.upload-dir=uploads
app.support-email=support@jts.uz

Yomonroq:

page=20
folder=uploads
email=support@jts.uz

Nega?

page nimaning page’i?
folder qaysi folder?
email kimniki?

Config nomlari aniq bo‘lishi kerak.


26. Mini loyiha: config bilan API

application.properties

spring.application.name=config-demo

server.port=8081

app.company-name=JTS Corp
app.default-language=uz
app.max-upload-size=10

AppConfigController

@RestController
@RequestMapping("/config")
public class AppConfigController {

    @Value("${spring.application.name}")
    private String appName;

    @Value("${app.company-name}")
    private String companyName;

    @Value("${app.default-language:en}")
    private String defaultLanguage;

    @Value("${app.max-upload-size}")
    private Integer maxUploadSize;

    @GetMapping
    public String getConfig() {
        return "App: " + appName
                + ", Company: " + companyName
                + ", Language: " + defaultLanguage
                + ", Max upload: " + maxUploadSize + "MB";
    }
}

URL:

http://localhost:8081/config

Natija:

App: config-demo, Company: JTS Corp, Language: uz, Max upload: 10MB

27. Controller uchun logger misol

@RestController
@RequestMapping("/users")
public class UserController {

    private static final Logger log = LoggerFactory.getLogger(UserController.class);

    @GetMapping("/{id}")
    public String getUser(@PathVariable Long id) {
        log.info("GET /users/{} request keldi", id);
        return "User ID: " + id;
    }
}

application.properties:

logging.level.uz.jts.demo=DEBUG

28. Eng ko‘p uchraydigan xatolar

1. Fayl joylashuvi noto‘g‘ri

To‘g‘ri joy:

src/main/resources/application.properties

Noto‘g‘ri:

src/main/java/application.properties

2. yml indentation xatosi

Yomon:

server:
port: 8081

To‘g‘ri:

server:
  port: 8081

YAML’da bo‘sh joy muhim.


3. Port band bo‘lishi

Xato:

Port 8080 was already in use

Yechim:

server.port=8081

Yoki eski processni to‘xtatish.


4. Secretlarni GitHub’ga chiqarib yuborish

Yomon:

db.password=123456

Yaxshi:

db.password=${DB_PASSWORD}

29. Interview uchun savol-javoblar

Savol: application.properties nima?

application.properties Spring Boot ilovasining asosiy configuration fayli. Unda server porti, database sozlamalari, logging, custom app sozlamalari kabi qiymatlar saqlanadi.

Savol: application.properties va application.yml farqi?

Ikkalasi ham configuration uchun ishlatiladi. properties key-value formatda yoziladi, yml esa nested strukturada yoziladi. Katta configlar uchun yml o‘qishga qulayroq.

Savol: @Value nima?

@Value configuration fayldagi qiymatlarni Java class ichiga inject qilish uchun ishlatiladi.

Savol: Auto-configuration nima?

Auto-configuration - Spring Boot dependency va classpath’ni tekshirib, kerakli bean va sozlamalarni avtomatik yaratishi. Masalan, spring-boot-starter-web bo‘lsa, Spring Boot web server, Spring MVC va JSON converterlarni avtomatik sozlaydi.

Savol: Embedded Tomcat nima?

Embedded Tomcat - Spring Boot ilova ichida keladigan web server. Shu sababli alohida Tomcat o‘rnatmasdan, app’ni oddiy Java application sifatida ishga tushirish mumkin.


30. Boshlovchilar uchun xulosa

Bugungi mavzudan eslab qoling:

application.properties - asosiy config fayl
application.yml - strukturali config fayl
server.port - app portini o‘zgartirish
logging.level - log darajasini sozlash
@Value - config qiymatni Java classga olish
Auto-configuration - Spring Boot avtomatik sozlashi
Embedded Tomcat - app ichidagi web server
Environment variable - tashqi muhitdan keladigan qiymat

31. Amaliy vazifa

Quyidagilarni yozib ko‘ring:

application.properties

spring.application.name=product-api
server.port=8082

app.owner-name=Jahon
app.default-currency=UZS
app.max-products=100

Endpoint

GET /app/info

Javob:

App: product-api
Owner: Jahon
Currency: UZS
Max products: 100

Class nomi:

AppInfoController