Рубрики
Без рубрики

Настройка tomcat подключения бассейн в весенней загрузки

Узнайте, как настроить приложение Spring Boot JPA для использования пула подключений Tomcat JDBC.

Автор оригинала: baeldung.

1. Обзор

Весенняя загрузка является самоуверенным – но мощный – слой абстракции размещены на вершине простой платформы Весна, что делает разработку автономных и веб-приложений не головной информации. Spring Boot предоставляет несколько удобных «стартовых» зависимостей, предназначенных для запуска и тестирования Java-приложений с минимальным охватом.

Одним из ключевых компонентов этих стартовых зависимостей является весна-загрузка-стартер-данные-jpa . Это позволяет нам использовать JPA и работать с производственными базами данных, используя некоторые популярные реализации соединения JDBC, такие как ХикариКП и Tomcat JDBC Соединение бассейн .

В этом учебнике Мы научимся настраивать пул подключения Tomcat в весенней загрузке .

2. Зависимость от Maven

Spring Boot использует HikariCP в качестве пула соединений по умолчанию, благодаря своей замечательной производительности и функциям, готовым к работе на предприятии.

Вот как Spring Boot автоматически настраивает источник данных пула соединений:

  1. Весенняя загрузка будет искать HikariCP на classpath и использовать его по умолчанию, когда присутствует
  2. Если HikariCP не найден на classpath, то Spring Boot подберет Tomcat JDBC Connection Pool, если он доступен
  3. Если ни один из этих вариантов не доступен, Spring Boot выберет Apache Commons DBCP2 , если это доступно

Чтобы настроить пул подключения Tomcat JDBC вместо HikariCP по умолчанию, мы исключить ХикариКП из весна-загрузка-стартер-данные-jpa зависимости и добавить tomcat-jdbc Maven зависимость к нашему пом.xml :


    org.springframework.boot
    spring-boot-starter-data-jpa
    
        
            com.zaxxer
            HikariCP
        
    


    org.apache.tomcat
    tomcat-jdbc
    9.0.10


    com.h2database
    h2
    1.4.197
    runtime

Этот простой подход позволяет нам получить Spring Boot с помощью пула соединения Tomcat без необходимости писать @Configuration класс и программно определить ДанныеИсточник боб.

Стоит также отметить, что в данном случае мы используем базу данных H2 в памяти . Весенняя загрузка будет автоконфигурировать H2 для нас, без необходимости указывать URL базы данных, пользователя и .

Мы просто должны включить соответствующую зависимость в “пом.xml” файл и весенняя загрузка сделает все остальное для нас.

Кроме того, можно пропустить алгоритм сканирования пула соединений, который использует Spring Boot, и четко указать источник объединения данных в Файл “application.properties” , с помощью “spring.datasource.type” свойство:

spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
// other spring datasource properties

3. Настройка пула подключения с файлом “application.properties”

После того, как мы успешно настроили пул подключения Tomcat в Spring Boot, весьма вероятно, что мы хотим создать некоторые дополнительные свойства, для оптимизации его производительности и соответствия некоторым конкретным требованиям .

Мы можем сделать это в “application.properties” файл:

spring.datasource.tomcat.initial-size=15
spring.datasource.tomcat.max-wait=20000
spring.datasource.tomcat.max-active=50
spring.datasource.tomcat.max-idle=15
spring.datasource.tomcat.min-idle=8
spring.datasource.tomcat.default-auto-commit=true   

Обратите внимание, что мы настроили несколько дополнительных свойств объединения соединений, таких как первоначальный размер пула, а также максимальное и минимальное количество холостых соединений.

Мы также можем указать некоторые свойства Hibernate:

# Hibernate specific properties
spring.jpa.show-sql=false
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
spring.jpa.properties.hibernate.id.new_generator_mappings=false

4. Тестирование пула подключения

Давайте напишем простой интеграционный тест, чтобы проверить, правильно ли настроен пул соединений Spring Boot:

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootTomcatConnectionPoolIntegrationTest {
    
    @Autowired
    private DataSource dataSource;
    
    @Test
    public void givenTomcatConnectionPoolInstance_whenCheckedPoolClassName_thenCorrect() {
        assertThat(dataSource.getClass().getName())
          .isEqualTo("org.apache.tomcat.jdbc.pool.DataSource");
    }
}

5. Пример командной строки приложения

При всем подключении объединения сантехника уже установлена, давайте построим простое приложение командной строки.

При этом мы можем видеть, как выполнять некоторые операции CRUD в базе данных H2 с помощью мощного ДАО слой, который Весенние данные JPA (и транзитуативно, Весенняя загрузка) обеспечивает из коробки.

Для получения подробного руководства о том, как начать использовать Весенние данные JPA, пожалуйста, проверьте эту статью .

5.1. Класс сущности клиента

Давайте сначала определим наивный Клиентская класс сущности:

@Entity
@Table(name = "customers")
public class Customer {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    @Column(name = "first_name")
    private String firstName;
    
    // standard constructors / getters / setters / toString
}

5.2. Интерфейс CustomerRepository

В этом случае мы просто хотим выполнить операции CRUD на несколько Клиентская сущностей . Кроме того, мы должны получить все клиенты, которые соответствуют данной фамилии.

Итак, все, что нам нужно сделать, это расширить весенние данные JPA CrudRepository интерфейс и определить индивидуальный метод :

public interface CustomerRepository extends CrudRepository {
    List findByLastName(String lastName);
}

Теперь мы можем легко получить Клиентская лица по фамилии.

5.3. Реализация CommandLineRunner

Наконец, нам необходимо, по крайней мере, сохранить несколько Клиентская сущностей в базе данных и убедитесь, что наш пул подключения Tomcat на самом деле работает .

Давайте создадим реализацию программы Spring Boot’s CommandLineRunner интерфейс. Весенняя загрузка загрузит реализацию перед запуском приложения:

public class CommandLineCrudRunner implements CommandLineRunner {
    
    private static final Logger logger = LoggerFactory.getLogger(CommandLineCrudRunner.class);
    
    @Autowired
    private final CustomerRepository repository;
    
    public void run(String... args) throws Exception {
        repository.save(new Customer("John", "Doe"));
        repository.save(new Customer("Jennifer", "Wilson"));
        
        logger.info("Customers found with findAll():");
        repository.findAll().forEach(c -> logger.info(c.toString()));
        
        logger.info("Customer found with findById(1L):");
        Customer customer = repository.findById(1L)
          .orElseGet(() -> new Customer("Non-existing customer", ""));
        logger.info(customer.toString());
        
        logger.info("Customer found with findByLastName('Wilson'):");
        repository.findByLastName("Wilson").forEach(c -> {
            logger.info(c.toString());
        });
    }
}

В двух словах, CommandLineCrudRunner класс сначала экономит пару Клиентская сущностей в базе данных. Далее, он получает первый с помощью findById() метод. Наконец, он получает клиента с findByLastName () метод.

5.4. Запуск приложения весенней загрузки

Конечно, последнее, что нам нужно сделать, это просто запустить образец приложения. Затем мы можем увидеть тандем соединения Spring Boot/Tomcat в действии:

@SpringBootApplication
public class SpringBootConsoleApplication {
    
    public static void main(String[] args) {
        SpringApplication.run(SpringBootConsoleApplication.class);
    }
}

6. Заключение

В этом учебнике мы узнали, как настроить и использовать пул подключения Tomcat в Spring Boot. Кроме того, мы разработали базовое приложение командной строки, чтобы показать, как легко работать с Spring Boot, пулом подключения Tomcat и базой данных H2.

Как обычно, все образцы кода, показанные в этом учебнике, доступны более на GitHub .