Лабораторная работа 2: Развертывание PostgreSQL и подключение к Spring Boot

1. Подготовка базы данных

  1. Установка PostgreSQL
    Установите PostgreSQL 15+ на локальную машину или используйте Docker-контейнер.
  2. Создание базы данных
    CREATE DATABASE spring_boot_db;
  3. Создание пользователя
    CREATE USER spring_user WITH PASSWORD 'securepass123';
  4. Назначение прав
    GRANT ALL PRIVILEGES ON DATABASE spring_boot_db TO spring_user;
  5. Проверка подключения
    \c spring_boot_db spring_user
  6. Создание тестовой таблицы (опционально)
    
    CREATE TABLE IF NOT EXISTS test_table (
      id SERIAL PRIMARY KEY,
      test_field VARCHAR(100)
    );
        
  7. Настройка SSL (для production)
    В postgresql.conf:
    ssl = on
  8. Конфигурация pg_hba.conf
    Добавьте строку для локального доступа:
    host    all             all             127.0.0.1/32            md5
  9. Проверка работы БД
    psql -h localhost -U spring_user -d spring_boot_db
  10. Создание резервной копии (опционально)
    pg_dump -U spring_user -F c spring_boot_db > backup.dump

2. Настройка Spring Boot

  1. Добавление зависимостей
    В 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>
        
  2. Базовая конфигурация application.properties
    
    spring.datasource.url=jdbc:postgresql://localhost:5432/spring_boot_db
    spring.datasource.username=spring_user
    spring.datasource.password=securepass123
        
  3. Настройка Hibernate
    
    spring.jpa.hibernate.ddl-auto=validate
    spring.jpa.show-sql=true
    spring.jpa.properties.hibernate.format_sql=true
        
  4. Настройка пула соединений
    
    spring.datasource.hikari.maximum-pool-size=10
    spring.datasource.hikari.connection-timeout=5000
        
  5. SSL конфигурация (опционально)
    
    spring.datasource.url=jdbc:postgresql://localhost:5432/spring_boot_db?ssl=true&sslmode=require
        
  6. Логирование SQL
    
    logging.level.org.hibernate.SQL=DEBUG
    logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
        
  7. Проверка конфигурации
    Создайте контроллер с методом:
    
    @GetMapping("/db-check")
    public Integer checkDb() {
        return jdbcTemplate.queryForObject("SELECT 1", Integer.class);
    }
        
  8. Настройка миграций
    Добавьте Flyway:
    
    <dependency>
        <groupId>org.flywaydb</groupId>
        <artifactId>flyway-core</artifactId>
    </dependency>
        
  9. Конфигурация для тестов
    В application-test.properties:
    
    spring.datasource.url=jdbc:postgresql://localhost:5432/spring_boot_test_db
        
  10. Профили конфигурации
    Активация профиля:
    spring.profiles.active=dev

3. Описание Entity

  1. Базовая сущность
    
    @Entity
    @Table(name = "employees")
    public class Employee {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
    
        @Column(nullable = false, length = 100)
        private String name;
    }
        
  2. Аннотации валидации
    
    @Email
    @Column(unique = true)
    private String email;
        
  3. Связи между таблицами
    
    @OneToMany(mappedBy = "employee", cascade = CascadeType.ALL)
    private List<Task> tasks;
        
  4. Аудит полей
    
    @CreatedDate
    @Column(updatable = false)
    private LocalDateTime createdAt;
        
  5. Конвертеры атрибутов
    
    @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 и оптимальные практики работы с базой данных.