package sample.context.orm; import java.util.Properties; import javax.sql.DataSource; import org.springframework.boot.jdbc.DatabaseDriver; import org.springframework.util.StringUtils; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import lombok.Data; /** * DataSource生成用の設定クラス。 * <p>継承先で@ConfigurationProperties定義を行ってapplication.ymlと紐付してください。 * <p>ベース実装にHikariCPを利用しています。必要に応じて設定可能フィールドを増やすようにしてください。 */ @Data public class OrmDataSourceProperties { /** ドライバクラス名称 ( 未設定時は url から自動登録 ) */ private String driverClassName; private String url; private String username; private String password; private Properties props = new Properties(); /** 最低接続プーリング数 */ private int minIdle = 1; /** 最大接続プーリング数 */ private int maxPoolSize = 20; /** コネクション状態を確認する時は true */ private boolean validation = true; /** コネクション状態確認クエリ ( 未設定時かつ Database が対応している時は自動設定 ) */ private String validationQuery; public DataSource dataSource() { HikariConfig config = new HikariConfig(); config.setDriverClassName(driverClassName()); config.setJdbcUrl(url); config.setUsername(username); config.setPassword(password); config.setMinimumIdle(minIdle); config.setMaximumPoolSize(maxPoolSize); if (validation) { config.setConnectionTestQuery(validationQuery()); } config.setDataSourceProperties(props); return new HikariDataSource(config); } private String driverClassName() { if (StringUtils.hasText(driverClassName)) { return driverClassName; } return DatabaseDriver.fromJdbcUrl(url).getDriverClassName(); } private String validationQuery() { if (StringUtils.hasText(validationQuery)) { return validationQuery; } return DatabaseDriver.fromJdbcUrl(url).getValidationQuery(); } }