【Spring Boot】application.ymlの設定例
設定例
server:
servlet:
encoding:
charset: UTF-8
enabled: true
tomcat:
accept-count: 500
max-connections: 10000
threads:
max: 500
min-spare: 500
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/demo_db?useAffectedRows=true&useUnicode=true&characterEncoding=utf8&serverTimezone=SERVER&allowMultiQueries=true
username: root
password: password
prepStmtCacheSize: 250
prepStmtCacheSqlLimit: 2048
cachePrepStmts: true
useServerPrepStmts: true
rewriteBatchedStatements: true
cacheResultSetMetadata: true
casheServerConfiguration: true
elideSetAutoCommits: true
maintainTimeStats: true
hikari:
connection-test-query: SELECT 1 FROM DUAL
idle-timeout: 100000
max-lifetime: 120000
mybatis:
configuration:
map-underscore-to-camel-case: true
springdoc:
cashe:
disabled: true
api-docs:
enabled: true
Common Application Properties
基本的に公式ドキュメントに説明が記載されているので、こちらを参考にする。
server
server:
servlet:
encoding:
charset: UTF-8
enabled: true
tomcat:
accept-count: 500
max-connections: 10000
threads:
max: 500
min-spare: 500
エンコーディングのサポート、文字コードは指定しておいた方が良い。
tomcat関連はパフォーマンスおよびメモリの使用量にも影響するので、必要に応じて調整する。
特に、maxやmin-spareが小さいと常時待機しているスレッド数が少なくて処理集中したときに遅くなる可能性があるので注意。
datasource
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/demo_db?useAffectedRows=true&useUnicode=true&characterEncoding=utf8&serverTimezone=SERVER&allowMultiQueries=true
username: root
password: password
prepStmtCacheSize: 250
prepStmtCacheSqlLimit: 2048
cachePrepStmts: true
useServerPrepStmts: true
rewriteBatchedStatements: true
cacheResultSetMetadata: true
casheServerConfiguration: true
elideSetAutoCommits: true
maintainTimeStats: true
hikari:
connection-test-query: SELECT 1 FROM DUAL
idle-timeout: 100000
max-lifetime: 120000
MySQLのところになるが、URLでpropertiesを指定できるので必要なら忘れずに。
この例で少し注意が必要なのはこの2つ
-
useAffectedRows
INSERT ... ON ON DUPLICATE KEY UPDATE 構文実行で取得できる数値に影響がある。
挿入/更新の結果に対してどういう風に処理したいかにもよるので注意。
https://zenn.dev/yoshio_matsuda/scraps/d16f585845f1e6 -
allowMultiQueries
MyBatisのmapperの内で複数のSQLステートメントを記述し実行させることが可能となる。
一つのxmlもしくはメソッドで複数ステートメントを実行できるので、責務の分離に注意しないと雑なコードを作り出すことになる。
その他パフォーマンス関連で推奨設定は以下を参考に設定すると良い。
基本的にキャッシュ設定やステートメントまとめて実行/コミットする設定だったりする。
connection poolingはHikariCPを使う。
max-lifetimeはデフォルトで1800000ミリ秒(30分)だが、少し短くします。idle-timeoutも。
他に調整したい設定は以下を参考にする。
mybatis
mybatis:
configuration:
map-underscore-to-camel-case: true
mapUnderscoreToCamelCaseはアンダースコア形式のカラム名を自動でキャメルケースに変換してくれるので便利。その他設定可能なものは以下を参考にする。
spring-doc
springdoc:
cashe:
disabled: true
api-docs:
enabled: true
springdoc-openapiはSwagger-uiによるAPIドキュメント生成をコードからできるので便利。
開発時でAPIの更新頻度が高いときはキャッシュはオフにした方が良い。
それに関する設定は以下を参考にする。
Discussion