Лабораторная работа 2: Развертывание PostgreSQL и подключение к Spring Boot
1. Подготовка базы данных
- Установка PostgreSQL
Установите PostgreSQL 15+ на локальную машину или используйте Docker-контейнер. - Создание базы данных
CREATE DATABASE spring_boot_db; - Создание пользователя
CREATE USER spring_user WITH PASSWORD 'securepass123'; - Назначение прав
GRANT ALL PRIVILEGES ON DATABASE spring_boot_db TO spring_user; - Проверка подключения
\c spring_boot_db spring_user - Создание тестовой таблицы (опционально)
CREATE TABLE IF NOT EXISTS test_table ( id SERIAL PRIMARY KEY, test_field VARCHAR(100) ); - Настройка SSL (для production)
Вpostgresql.conf:ssl = on - Конфигурация pg_hba.conf
Добавьте строку для локального доступа:host all all 127.0.0.1/32 md5 - Проверка работы БД
psql -h localhost -U spring_user -d spring_boot_db - Создание резервной копии (опционально)
pg_dump -U spring_user -F c spring_boot_db > backup.dump
2. Настройка Spring Boot
- Добавление зависимостей
Вpom.xml:<dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.6.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> - Базовая конфигурация application.properties
spring.datasource.url=jdbc:postgresql://localhost:5432/spring_boot_db spring.datasource.username=spring_user spring.datasource.password=securepass123 - Настройка Hibernate
spring.jpa.hibernate.ddl-auto=validate spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true - Настройка пула соединений
spring.datasource.hikari.maximum-pool-size=10 spring.datasource.hikari.connection-timeout=5000 - SSL конфигурация (опционально)
spring.datasource.url=jdbc:postgresql://localhost:5432/spring_boot_db?ssl=true&sslmode=require - Логирование SQL
logging.level.org.hibernate.SQL=DEBUG logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE - Проверка конфигурации
Создайте контроллер с методом:@GetMapping("/db-check") public Integer checkDb() { return jdbcTemplate.queryForObject("SELECT 1", Integer.class); } - Настройка миграций
Добавьте Flyway:<dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> </dependency> - Конфигурация для тестов
Вapplication-test.properties:spring.datasource.url=jdbc:postgresql://localhost:5432/spring_boot_test_db - Профили конфигурации
Активация профиля:spring.profiles.active=dev
3. Описание Entity
- Базовая сущность
@Entity @Table(name = "employees") public class Employee { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false, length = 100) private String name; } - Аннотации валидации
@Email @Column(unique = true) private String email; - Связи между таблицами
@OneToMany(mappedBy = "employee", cascade = CascadeType.ALL) private List<Task> tasks; - Аудит полей
@CreatedDate @Column(updatable = false) private LocalDateTime createdAt; - Конвертеры атрибутов
@Convert(converter = EmployeeStatusConverter.class) private EmployeeStatus status;
Приложение: Пример полного файла конфигурации
application-dev.properties
# Datasource
spring.datasource.url=jdbc:postgresql://localhost:5432/spring_boot_db
spring.datasource.username=spring_user
spring.datasource.password=securepass123
# Hibernate
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
# Connection pool
spring.datasource.hikari.maximum-pool-size=15
spring.datasource.hikari.connection-timeout=30000
# Flyway
spring.flyway.locations=classpath:db/migration
spring.flyway.baseline-on-migrate=true
Вывод
В ходе лабораторной работы были рассмотрены все этапы подключения Spring Boot приложения к PostgreSQL, включая детальную настройку параметров соединения, конфигурацию Entity и оптимальные практики работы с базой данных.