1. Обзор
Весенняя загрузка является самоуверенным – но мощный – слой абстракции размещены на вершине простой платформы Весна, что делает разработку автономных и веб-приложений не головной информации. Spring Boot предоставляет несколько удобных «стартовых» зависимостей, предназначенных для запуска и тестирования Java-приложений с минимальным охватом.
Одним из ключевых компонентов этих стартовых зависимостей является весна-загрузка-стартер-данные-jpa . Это позволяет нам использовать JPA и работать с производственными базами данных, используя некоторые популярные реализации соединения JDBC, такие как ХикариКП и Tomcat JDBC Соединение бассейн .
В этом учебнике Мы научимся настраивать пул подключения Tomcat в весенней загрузке .
2. Зависимость от Maven
Spring Boot использует HikariCP в качестве пула соединений по умолчанию, благодаря своей замечательной производительности и функциям, готовым к работе на предприятии.
Вот как Spring Boot автоматически настраивает источник данных пула соединений:
- Весенняя загрузка будет искать HikariCP на classpath и использовать его по умолчанию, когда присутствует
- Если HikariCP не найден на classpath, то Spring Boot подберет Tomcat JDBC Connection Pool, если он доступен
- Если ни один из этих вариантов не доступен, 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 .