Spring Boot інтегрується з низкою технологій збору, передачі та обробки даних, як SQL, так і NoSQL.
Бази даних SQL
Spring Framework передбачає комплексні засоби підтримки для роботи з базами даних SQL, починаючи прямим доступом до
JDBC за допомогою JdbcTemplate
і закінчуючи повноцінними технологіями "об'єктно-реляційного
відображення", такими як Hibernate. Spring Data передбачає додатковий рівень функціональності: створення реалізацій
Repository
безпосередньо з інтерфейсів та використання угод для створення запитів з імен методів.
Конфігурування DataSource
Java-інтерфейс javax.sql.DataSource
передбачає стандартний метод роботи з підключеннями до бази даних.
Традиційно "DataSource" використовує URL
-адресу разом з певними обліковими даними для встановлення
з'єднання з базою даних.
Підтримка вбудованих баз даних
Найчастіше зручніше розробляти програми, використовуючи вбудовану резидентну базу даних. Очевидно, що резидентні бази даних не забезпечують постійного сховища. Необхідно заповнювати базу даних під час запуску програми та бути готовим до видалення даних при завершенні роботи програми.
Spring Boot може автоматично конфігурувати вбудовані бази даних H2,
HSQL та Derby.
URL-адреси будь-якого підключення не потрібно вказувати. Потрібно тільки додати залежність складання від бази даних,
яку ти хочеш використовувати. Якщо в шляху класу є кілька вбудованих баз даних, встанови конфігураційну властивість
spring.datasource.embedded-database-connection
, щоб керувати тим, яка з них використовуватиме.
Встановлення якості значення none
вимикає автоконфігурацію вбудованої бази даних.
Якщо ти використовуєш цю функцію у своїх тестах, то можеш помітити, що та сама база даних повторно
використовується всім твоїм тестовим комплектом, незалежно від кількості контекстів програми, які ти
використовуєш. Якщо необхідно переконатися, що для кожного контексту є окрема вбудована база даних, слід
встановити spring.datasource.generate-unique-name
у true
.
Наприклад, типові POM-залежності будуть виглядати так:
<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>
spring-jdbc
. У цьому прикладі він підтягується транзитивно через spring-boot-starter-data-jpa
.
DB_CLOSE_ON_EXIT=FALSE
. Якщо ти використовуєш HSQLDB,
слід переконатися, що shutdown=true
не використовується. Вимкнення функції автоматичного закриття бази
даних дозволяє Spring Boot контролювати момент закриття бази даних, тим самим гарантуючи, що це станеться, коли
доступ до бази даних більше не буде потрібен.
Підключення до виробничої бази даних
Підключення до виробничої бази даних також можна автоматично налаштувати за допомогою пулінгу DataSource
.
Конфігурація DataSource
Конфігурацією DataSource керують зовнішні конфігураційні властивості у spring.datasource.*
. Наприклад,
можна оголосити наступний розділ у application.properties
:
spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass
spring:
datasource:
url: "jdbc:mysql://localhost/test"
username: "dbuser"
password: "dbpass"
spring.datasource.url
.
В іншому випадку Spring Boot намагатиметься автоматично конфігурувати вбудовану базу даних.
spring.datasource.driver-class-name
.
DataSource
необхідно переконатися, що є
допустимий клас Driver
, тому ми перевіряємо його, перш ніж що-небудь робити. Іншими словами, якщо ти
зазначаєш spring.datasource.driver-class-name=com.mysql.jdbc.Driver
, цей клас повинен стати
завантажуваним.
Детальнішу інформацію про параметри, що підтримуються, див. у DataSourceProperties
. Це стандартні опції, які працюють незалежно від фактичної
реалізації. Також можна тонко налаштувати специфічні для конкретної реалізації параметри, використовуючи
відповідний префікс (spring.datasource.hikari.*
, spring.datasource.tomcat.*
, spring.datasource.dbcp2.*
та spring.datasource.oracleucp.*
). Докладнішу інформацію див. у документації щодо
реалізації пулу з'єднань.
Наприклад, якщо використовується пул з'єднань Tomcat, можна налаштувати безліч додаткових параметрів, як це показано в наведеному нижче прикладі:
spring.datasource.tomcat.max-wait=10000
spring.datasource.tomcat.max-active=50
spring.datasource.tomcat.test-on-borrow=true
spring:
datasource:
tomcat:
max-wait: 10000
max-active: 50
test-on-borrow: true
Цей код налаштує пул на очікування 10000 мс перед тим, як буде викинуто виняток, якщо з'єднання виявиться недоступним, обмежить максимальну кількість з'єднань до 50 і перевірятиме з'єднання перед тим, як запозичити його з пулу.
Пули з'єднань, що підтримуються
Spring Boot використовує наступний алгоритм для вибору конкретної реалізації:
-
Ми віддаємо перевагу HikariCP за його продуктивність і паралелізм. Якщо є можливість використовувати HikariCP, ми завжди вибираємо його.
-
Інакше, якщо доступний пул
DataSource
з Tomcat, використовується він -
Якщо це недоступне, але доступне Commons DBCP2, то використовуємо його.
-
Якщо HikariCP, Tomcat та DBCP2 неможливо використовувати, але доступний Oracle UCP, то використовуємо його.
spring-boot-starter-jdbc
або spring-boot-starter-data-jpa
, то автоматично отримаєте залежність від HikariCP
.
Можна повністю обійти цей алгоритм і вказати використовуваний пул з'єднань, встановивши властивість spring.datasource.type
.
Це особливо важливо, якщо програма виконується в контейнері Tomcat, оскільки tomcat-jdbc
передбачений
за замовчуванням.
Додаткові пули з'єднань завжди можна налаштувати вручну, використовуючи DataSourceBuilder
. Якщо ти
визначаєш власний бін DataSource
, автоматичного конфігурування не відбудеться.
DataSourceBuilder
підтримує такі пули з'єднань:
-
HikariCP
-
Пул
Datasource
через Tomcat -
Commons DBCP2
-
Oracle UCP та
OracleDataSource
-
SimpleDriverDataSource
з Spring Framework -
JdbcDataSource
з H2 -
PGSimpleDataSource
з PostgreSQL -
C3P0
Підключення до DataSource через JNDI
Якщо ти розгортаєш свою програму Spring Boot на сервері додатків, тобі може знадобитися конфігурувати та керувати DataSource за допомогою вбудованих функцій сервера додатків та отримувати до нього доступ через JNDI.
Властивість spring.datasource.jndi-name
можна використовувати як альтернативу властивостям spring.datasource.url
,
spring.datasource.username
та spring.datasource.password
для забезпечення доступу до
DataSource
з певного розташування через JNDI. Наприклад, наступний розділ
application.properties
показує, як можна отримати доступ до DataSource
, визначеного на
сервері JBoss AS:
spring.datasource.jndi-name=java:jboss/datasources/customers
spring:
datasource:
jndi-name: "java:jboss/datasources/customers"
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ