Spring BootでのTomcat接続プールの設定
1概要
Spring Boot
は、単なるSpringプラットフォームの上に配置された、意欲的で強力な抽象化層であり、スタンドアロンおよびWebアプリケーションの開発を非常に簡単にします。 Spring Bootは、最小限のフットプリントでJavaアプリケーションを実行およびテストすることを目的とした、便利な「スターター」依存関係をいくつか提供します。
-
これらのスターター依存関係の1つの重要な要素は
https://search.maven.org/search?q
= a:スプリングブートスターターデータjpa%20AND%20%20g:org.springframework.boot[spring-boot -starter-data-jpa]
** 。
これにより、https://en.wikipedia.org/wiki/Java
Persistence
API[JPA]を使用したり、https://brettwooldridge.github.io/HikariCP/[]のような一般的なJDBC接続プール実装を使用してプロダクションデータベースを操作したりできます。 HikariCP]およびhttps://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html[Tomcat JDBC接続プール]。
このチュートリアルでは、Spring BootでTomcat接続プールを設定する方法を学習します。
2 Mavenの依存関係
Spring Bootは、その優れたパフォーマンスとエンタープライズ対応機能により、HikariCPをデフォルトの接続プールとして使用します。
Spring Bootが接続プールデータソースを自動的に設定する方法は次のとおりです。
-
Spring Bootはクラスパス上でHikariCPを探し、それを使用します.
存在する場合はデフォルト
。 HikariCPがクラスパスに見つからない場合、Spring Bootは
Tomcat JDBC接続プール(利用可能な場合)を設定します。
。どちらも利用できない場合は、Spring Bootが選択します。
Apache Commons DBCP2
(利用可能な場合)
デフォルトのHikariCPの代わりにTomcat JDBC接続プールを設定するには、
spring-boot-starter-data-jpa
依存関係から
HikariCP
を除外し、
__https://search.maven.org/artifact/org.apacheを追加します。 tomcat/tomcat-jdbc/9.0.11/jar[tomcat-jdbc]
pom.xmlへの____Maven依存関係**
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<exclusions>
<exclusion>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
<version>9.0.10</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.197</version>
<scope>runtime</scope>
</dependency>
この簡単なアプローチにより、
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/Configurationを記述することなく、Tomcat接続プールを使用してSpring
Bootを取得できます。 .html[@Configuration]
クラスを作成し、プログラムでhttps://docs.oracle.com/javase/7/docs/api/javax/sql/DataSource.html[
DataSource
]Beanを定義します。
-
この場合は、H2インメモリデータベースを使用していることにも注意してください。 Spring Bootは、データベースのURL、ユーザー、パスワードを指定しなくても、H2を自動設定します。
対応する依存関係を
“ pom.xml”
ファイルに含めるだけで、あとはSpring Bootが行います。
あるいは、Spring Bootが使用する接続プールスキャンアルゴリズムをスキップして、
“spring.datasource.type”
プロパティを使用して__ “application.properties”ファイルに接続プールデータソースを明示的に指定することもできます。
spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource//other spring datasource properties
3 “
application.properties
”ファイルを使用した接続プールの調整
Spring BootでTomcat接続プールを正しく設定したら、そのパフォーマンスを最適化し、特定の要件を満たすために、いくつか追加のプロパティを設定することをお勧めします。
“ 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サンプルコマンドラインアプリケーション
すべての接続プールの配管が既に設定されているので、簡単なコマンドラインアプリケーションを作成しましょう。
そうすることで、https://docs.spring.io/という強力なhttps://www.baeldung.com/java-dao-pattern[DAO]レイヤーを使用して、H2データベースでCRUD操作を実行する方法を確認できます。 spring-data/jpa/docs/current/reference/html/[Spring Data JPA](および推移的にはSpring Boot)はそのまま使用できます。
Spring Data JPAを使い始める方法についての詳細なガイドはhttps://www.baeldung.com/the-persistence-layer-with-spring-data-jpa[この記事]をチェックしてください。
5.1.
Customer
エンティティクラス
まず、単純な
Customer
エンティティクラスを定義しましょう。
@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
インターフェース
この場合は、いくつかの
Customer
エンティティに対してCRUD操作を実行するだけです。
さらに、指定された姓に一致するすべての顧客を取得する必要があります。
つまり、Spring Data JPAの
CrudRepository
を拡張するだけです。]
インタフェースし、調整されたメソッドを定義します** :
public interface CustomerRepository extends CrudRepository<Customer, Long> {
List<Customer> findByLastName(String lastName);
}
これで、姓によって
Customer
エンティティを簡単に取得できます。
5.3.
CommandLineRunner
の実装
最後に、少なくともいくつかの
Customer
エンティティをデータベースに永続化し、
Tomcat接続プールが実際に機能していることを確認する
必要があります。
Spring Bootの
CommandLineRunner
インターフェースの実装を作成しましょう。 Spring Bootはアプリケーションを起動する前に実装をブートストラップします。
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
クラスは最初に2つの
Customer
エンティティをデータベースに保存します。次に、
findById()
メソッドを使用して最初のものを取得します。最後に、
findByLastName()
メソッドを使用して顧客を取得します。
5.4. Spring Bootアプリケーションの実行
もちろん、最後にしなければならないことは、単にサンプルアプリケーションを実行することです。それから、Spring BootとTomcatの接続プールが連携して動作しているのがわかります。
@SpringBootApplication
public class SpringBootConsoleApplication {
public static void main(String[]args) {
SpringApplication.run(SpringBootConsoleApplication.class);
}
}
6. 結論
このチュートリアルでは、Spring BootでTomcat接続プールを設定して使用する方法を学びました。さらに、Spring Boot、Tomcat接続プール、およびH2データベースでの作業がいかに簡単であるかを示すための基本的なコマンドラインアプリケーションを開発しました。
いつものように、このチュートリアルで示されているすべてのコードサンプルはhttps://github.com/eugenp/tutorials/tree/master/persistence-modules/spring-boot-persistence[GitHubで入手可能]です。