質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

4325閲覧

Spring Bootでコネクションプールの設定が有効にならない

koronatail

総合スコア433

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

1グッド

2クリップ

投稿2017/06/06 11:24

編集2017/06/13 02:26

###前提・実現したいこと
Spring Bootで作成しているWEBシステムで、コネクションプールの設定を行いたいのですが、application.propertiesに以下の設定を記載しても設定が反映されませんでした。

application.properties

1spring.datasource.tomcat.initialSize=20

以下にpom.xmlを抜粋します

<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>sqljdbc</artifactId> <version>4.2</version> </dependency> <dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thymeleaf-extras-java8time</artifactId> <version>2.1.0.RELEASE</version> </dependency>

spring-boot-starter-jdbcを利用しているため、Tomcat Datasourceが自動的に利用されていると考えています。

確認方法としては、以下のSQL文を実行してセッション数を確認、また、パフォーマンスモニターでSqlServerのUserConnectionsを確認するという方法を取っています

sql

1select * from sys.dm_exec_sessions where host_name is not NULL

イメージ説明
イメージ説明
2つの画像は実際に最初にあげたapplication.propertiesで、STSからデバッグで実行した際の内容です
host_nameが2014となっているのがその接続なのですが、spring.datasource.tomcat.initialSize=に設定した接続数20が反映されず、デフォルトの10接続が作られています

initial-sizeという書き方に変えても状況が変わりませんでした。
また、そもそもコネクションプールの設定の確認方法は上記のような確認方法で問題ないのでしょうか・・・
何かアドバイスをいただけるとうれしいです。
よろしくお願いします。

<追記>
A-pZさんに頂いた回答を元に修正したデータソース設定クラス

java

1 2import org.apache.tomcat.jdbc.pool.DataSource; 3//import その他色々 4 5@Configuration 6public class DataSourceConfig { 7 8 @Autowired 9 private DataSourceProperties properties; 10 11 @Value("${spring.datasource.tomcat.initialSize}") 12 private int initialSize;//追加した 13 14 @Bean(name="hogeds") 15 @Primary 16 public DataSource createDataSource() { 17 //DataSourceBuilderやめた 18 DataSource ds = new DataSource(); 19 ds.setDriverClassName(this.properties.getDriverClassName()); 20 ds.setUrl(this.properties.getUrl()); 21 ds.setUsername(this.properties.getUsername()); 22 ds.setPassword(this.properties.getPassword()); 23 ds.setInitialSize(initialSize); 24 return ds; 25 } 26 27 28 @Bean(name="hogejdbc") 29 @Primary 30 public NamedParameterJdbcTemplate createJdbcTemplate( 31 @Qualifier("healthmstds")DataSource dataSource) { 32 33 return new NamedParameterJdbcTemplate(dataSource); 34 } 35 36}
A-pZ👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

設定値として修正されている箇所は間違いございません。

ただし、application.propertiesにて、spring.datasource.tomcat以下に設定しても有効にならない理由は1つあり、

  • データソース設定を独自に読み込む DataSourceConfiguration クラスを作り
  • SpringBootのConfigurationとして読み込ませている

以上を満たすと、そのConfigが優先されます。(つまりデフォルトの設定ファイルに書いても無視している記載をしてしまっているケースがある)

例えば、以下の例はデータソースを独自で作り、application.propertiesから読み込むことを強制しています。それ以外の値は未設定なので、デフォルトの値が適用されてしまいます。

java

1@Configuration 2@PropertySource("application.properties") 3public class ApplicationConfiguration { 4 @Value("${spring.datasource.driverClassName}") 5 private String driverClassName; 6 @Value("${spring.datasource.url}") 7 private String url; 8 9....(他、いくつかの接続設定).... 10 11 @Bean 12 public static PropertySourcesPlaceholderConfigurer propertyConfig() { 13 return new PropertySourcesPlaceholderConfigurer(); 14 } 15 16 @Bean(destroyMethod="close") 17 public DataSource dataSource() { 18 19 BasicDataSource ds = new BasicDataSource(); 20 ds.setDriverClassName(driverClassName); 21 ds.setUrl(url); 22 ds.setUsername(userName); 23 ds.setPassword(password); 24 return ds; 25 26 } 27}

この場合は、BasicDataSourceインスタンスを作り、それをそのまま返していいるので、この設定が最優先になりここで設定されていない値はデフォルト値になります。

解決となるかはわりませんが、参考までに。

投稿2017/06/08 13:10

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

koronatail

2017/06/13 02:23

@A-pz様 回答ありがとうございます。まさにA-pZ様にご指摘いただいた点が問題になっていました・・・。複数のデータソースを使う必要があったため、DataSourceConfigクラスを作成していましたが、その中でDataSourceを作る際にDataSourceBuilderを利用していたために設定が反映されていなかったようです。いまいち挙動を理解し切れていませんがこれから勉強して行きたいと思います・・・・本当にありがとうございました!
A-pZ

2017/06/13 04:16

グッ d(・ω・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問