DataSource ni sozlash

All lectures for UZ purposes
Daraja, Dars
Mavjud

Spring Boot ma'lumotlarni yig'ish, uzatish va ishlov berish texnologiyalari bilan, SQL va NoSQL bilan integratsiyalashadi.

SQL ma'lumotlar bazalari

Spring Framework SQL ma'lumotlar bazalari bilan ishlash uchun tashkiliy asboblarni taqdim etadi, JdbcTemplate orqali JDBC'ga to'g'ridan-to'g'ri kirishdan tortib, "ob'ektli-relyatsion xaritani chiqarish" texnologiyalarigacha, Hibernate kabi to'liq texnologiyalarning ishlatilishiga qadar. Spring Data qo'shimcha darajali funksionallikni taqdim etadi: Repository amalga oshirishlarini bevosita interfeyslardan yaratish va metod nomlaridan so'rovlarni generatsiyalash bo'yicha konventsiyalardan foydalanish.

DataSource ni sozlash

Java interfeysi javax.sql.DataSource ma'lumotlar bazasiga ulanishlar bilan ishlashning standart usulini taqdim etadi. An'anaviy ravishda "DataSource" ma'lumotlar bazasiga ulanish o'rnatish uchun ba'zi hisob ma'lumotlari bilan birga URL manzilni ishlatadi.

O'rnatilgan ma'lumotlar bazalarini qo'llab-quvvatlash

Dasturlarni rivojlantirishda ko'pincha ichki qo'nimlil ma'lumotlar bazasidan foydalanish qulayroq bo'ladi. Albatta, qo'nimlil ma'lumotlar bazalari doimiy xotirani taqdim etmaydi. Dastur ishga tushirilganda ma'lumotlar bazasini to'ldirish va dastur to'xtatilganda ma'lumotlarni o'chirishga tayyor bo'lish kerak.

Spring Boot avtomatik ravishda H2, HSQL va Derby ni konfiguratsiyalash mumkin. Har qanday ulanish URL manzillarini ko'rsatish kerak emas. Faqatgina foydalanmoqchi bo'lganingiz o'rnatilgan ma'lumotlar bazasiga bog'liq bo'lgan yig'ish qaramligini qo'shishingiz kerak. Agar sinf yo'lida bir nechta o'rnatilgan ma'lumotlar bazalar mavjud bo'lsa, qaysi birini ishlatishni boshqarish uchun spring.datasource.embedded-database-connection konfiguratsiya xususiyatini o'rnating. Xususiyatni none qiymatiga o'rnatish o'rnatilgan ma'lumotlar bazasining avtomatik konfiguratsiyasini o'chiradi.

Agar bu funktsiyani testlaringizda ishlatayotgan bo'lsangiz, bir xil ma'lumotlar bazasi test majmuangizning barcha qismlari bilan qayta ishlatilayotganini sezishingiz mumkin, foydalanayotgan ilova kontekstlari sonidan qat'i nazar. Har bir kontekst uchun alohida o'rnatilgan ma'lumotlar bazasini ta'minlash muhim bo'lsa, spring.datasource.generate-unique-name ni true ga o'rnating.

Masalan, odatiy POM qaramliliklari quyidagi ko'rinishda bo'ladi:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>org.hsqldb</groupId>
    <artifactId>hsqldb</artifactId>
    <scope>runtime</scope>
</dependency>
O'rnatilgan ma'lumotlar bazasini avtomatik konfiguratsiya qilish uchun spring-jdbc qaramligini ta'minlash kerak. Ushbu misolda u spring-boot-starter-data-jpa orqali tranzitiv ravishda olinadi.
Agar biron sababdan o'rnatilgan ma'lumotlar bazasi uchun ulanish URL manzili hali ham sozlangan bo'lsa, ma'lumotlar bazasini avtomatik yopish funktsiyasini o'chirib qo'yishingiz kerak. Agar siz H2 dan foydalanayotgan bo'lsangiz, buning uchun DB_CLOSE_ON_EXIT=FALSE dan foydalaning. Agar siz HSQLDB dan foydalanayotgan bo'lsangiz, shutdown=true ishlatilmasligiga ishonch hosil qiling. Ma'lumotlar bazasini avtomatik yopish funktsiyasini o'chirib qo'yish Spring Boot ga ma'lumotlar bazasini yopish vaqtini nazorat qilish imkonini beradi, shunday qilib bu faqat ma'lumotlar bazasi kerak bo'lmaganda amalga oshirilishini ta'minlaydi.

Ishlab chiqarish ma'lumotlar bazasiga ulanish

DataSource pulining yordamida ishlab chiqarish ma'lumotlar bazasiga ulanishlarni ham avtomatik konfiguratsiyalash mumkin.

DataSource konfiguratsiyasi

DataSource konfiguratsiyasi spring.datasource.* dagi tashqi konfiguratsiya xususiyatlari orqali boshqariladi. Masalan, application.properties da quyidagi bo'limni e'lon qilishingiz mumkin:

Properties
spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass
Yaml
spring:
  datasource:
    url: "jdbc:mysql://localhost/test"
    username: "dbuser"
    password: "dbpass"
Hech bo'lmaganda spring.datasource.url xususiyatini o'rnatib URL manzilni ko'rsatishingiz kerak. Aks holda, Spring Boot o'rnatilgan ma'lumotlar bazasini avtomatik konfiguratsiya qilishga harakat qiladi.
Spring Boot URL manzilidan ko'pchilik ma'lumotlar bazalari uchun JDBC drayver klassini aniqlay oladi. Agar maxsus sinfni belgilash kerak bo'lsa, spring.datasource.driver-class-name xususiyatidan foydalanishingiz mumkin.
DataSource pulini yaratish uchun amal qilish qobiliyatiga ega Driver klassiga ishonch hosil qilish kerak, shuning uchun har qanday ishni boshlashdan oldin uni tekshiramiz. Boshqacha qilib aytadigan bo'lsak, agar siz spring.datasource.driver-class-name=com.mysql.jdbc.Driver o'rnatayotgan bo'lsangiz, bu sinf yuklanadigan bo'lishi kerak.

Qo'llab-quvvatlanadigan parametrlar haqida batafsil ma'lumot uchun DataSourceProperties. Bu haqiqiy amalga oshirilishidan qat'i nazar ishlaydigan standart opsiyalar. Shuningdek, aniq amalga oshirilish uchun mos parametrlarni nozik sozlashingiz mumkin, tegishli prefiksni (spring.datasource.hikari.*, spring.datasource.tomcat.*, spring.datasource.dbcp2.* va spring.datasource.oracleucp.*) ishlatib. Foydalanayotgan havola qilinuvchi havza amalga oshirilishi bo'yicha batafsil ma'lumotni hujjatlarda ko'ring.

Masalan, agar siz Tomcat havza dan foydalanayotgan bo'lsangiz, quyidagi misolda ko'rsatilganidek, ko'plab qo'shimcha parametrlarni sozlashingiz mumkin:

Properties
spring.datasource.tomcat.max-wait=10000
spring.datasource.tomcat.max-active=50
spring.datasource.tomcat.test-on-borrow=true
Yaml
spring:
  datasource:
    tomcat:
      max-wait: 10000
      max-active: 50
      test-on-borrow: true

Bu kod havzani 10000 ms kutishga sozlaydi, agar ulanish mavjud bo'lmasa, xato tashlanadi, maksimal ulanishlar sonini 50 ga cheklaydi va havzadan ulanishni olishdan oldin uning mavjudligini tekshiradi.

Qo'llab-quvvatlanadigan ulanish havzalari

Spring Boot quyidagi algoritmni ishlatib, aniq amalga oshirilishini tanlaydi:

  1. Biz HikariCP ni uning tezkorligi va parallelizmi uchun afzal ko'ramiz. Agar HikariCP dan foydalanish imkoniyati mavjud bo'lsa, biz doimo uni tanlaymiz.

  2. Aks holda, agar Tomcat'dan DataSource havzasi mavjud bo'lsa, u ishlatiladi

  3. Agar u mumkin bo'lmasa, lekin Commons DBCP2 mavjud bo'lsa, undan foydalanamiz.

  4. Agar HikariCP, Tomcat va DBCP2 ni ishlata olmasangiz, ammo Oracle UCP mavjud bo'lsa, undan foydalanamiz.

Agar siz spring-boot-starter-jdbc yoki spring-boot-starter-data-jpa "boshlovchi paketlar"dan foydalansangiz, siz avtomatik ravishda HikariCP qaramligini olasiz.

Bu algoritmni to'liq chetlab o'tib, spring.datasource.type xususiyatini o'rnatib, ishlatiladigan ulanish havzasini belgilashingiz mumkin. Bu ayniqsa, ilova Tomcat konteynerida ishlaganda muhim, chunki tomcat-jdbc standart qilib olish mumkin.

Qo'shimcha ulanish havzalarini har doim DataSourceBuilder dan foydalanib qo'lda sozlashingiz mumkin. Agar siz o'z DataSource binini aniqlasangiz, avtomatik konfiguratsiya amalga oshirilmaydi. DataSourceBuilder quyidagi ulanish havzalarini qo'llab-quvvatlaydi:

  • HikariCP

  • Tomcat orqali DataSource havzasi

  • Commons DBCP2

  • Oracle UCP va OracleDataSource

  • Spring Framework dan SimpleDriverDataSource

  • H2'dan JdbcDataSource

  • PostgreSQL'dan PGSimpleDataSource

  • C3P0

DataSource'ga JNDI orqali ulanish

Agar siz Spring Boot ilovangizni ilova serveriga joylashtirayotgan bo'lsangiz, ilova serverining o'rnatilgan funksiyalari yordamida DataSource ni sozlashingiz va boshqarishingiz va unga JNDI orqali kirishingiz mumkin.

spring.datasource.jndi-name xususiyatini spring.datasource.url, spring.datasource.username va spring.datasource.password xususiyatlariga muqobil sifatida, JNDI orqali ma'lum joydan DataSource ga kirishni ta'minlash uchun ishlatishingiz mumkin. Masalan, quyidagi bo'lim application.properties da ko'rsatilgan, JBoss AS serverida belgilangan DataSource ga qanday kirish mumkinligini ko'rsatadi:

Properties
spring.datasource.jndi-name=java:jboss/datasources/customers
Yaml
spring:
  datasource:
    jndi-name: "java:jboss/datasources/customers"
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION