Spring Boot(16)——DataSourceを使う


もっと読む
DataSourceを使う
DataSourceを使用するならば、pom.xmlにspring-boot-starter-jdbcの依存を追加することができ、これは自動的にSpring Jdbcの依存を追加します.また、対応するJDBCドライバの依頼を入れます.ここで使っているのはMySQLのドライバです.
<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-jdbcartifactId>
dependency>

<dependency>
    <groupId>mysqlgroupId>
    <artifactId>mysql-connector-javaartifactId>
dependency>
DataSourceの自動構成はorg.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfigurationによって担当され、DataSourceタイプのbeanが存在しない場合、池化されたDataSourceの作成を担当します.サポートされている接続プールは以下のようなものが含まれていますが、デフォルトでは自動的に使う順番も以下の順序で使います.つまり、Class pathの下にHikariDataSourceがある場合は、HikariDataSourceを優先的に使用します.次はTomcatが提供するデータベース接続池です.最後はdbcp 2です.
  • comp.zaxer.hikari.Hikari Data Source
  • org.apache.tomcat.jdbc.pool.DataSource
  • org.apache.com mmons.dbcp 2.BaicDataSource
  • spring-boot-starter-jdbcの依存度を追加すると、自動的にカスケードがHikari依存性に追加されます.すなわち、デフォルトではHikariDataSourceが使用されます.Class pathの下に複数のサポートデータベース接続池が同時に存在している場合、自動的に選択されたデータベース接続池を使用することが望まれない場合は、spring.datasource.typeにより使用するデータベース接続池を指定することにより実現することができる.たとえば、Class pathの下にcom.zaxxer.hikari.HikariDataSourceorg.apache.tomcat.jdbc.pool.DataSourceが同時に存在する場合、デフォルトはcom.zaxxer.hikari.HikariDataSourceを使用し、もしorg.apache.tomcat.jdbc.pool.DataSourceを使用することが望ましいならば、spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSourceを構成することができる.
    次に、設定URL、駆動クラスクラス名、ユーザ名、パスワードなどのような、spring.datasourceプレフィクスから開始される属性構成データベース接続に関する情報を接続することができる.データベースの構成情報はorg.springframework.boot.autoconfigure.jdbc.DataSourcePropertiesによって受信される.
    spring.datasource.url=jdbc:mysql://localhost/test
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    spring.datasource.username=root
    spring.datasource.password=elim
    より多くの構成情報は、DataSourcePropertiesのAPI文書を参照することができる.
    使用するHikariDataSource接続池を構成する必要がある場合は、spring.datasource.hikariプレフィックスから開始される属性によって配置することができ、対応する構成属性はcom.zaxxer.hikari.HikariDataSourceによって受信されます.構成可能な属性は、対応するAPI文書を参照してください.
    使用するTomcat接続池を構成する必要がある場合は、spring.datasource.tomcatプレフィックスから開始される属性によって構成することができ、対応する構成属性はorg.apache.tomcat.jdbc.pool.DataSourceによって受信され、構成可能な属性は対応するAPI文書を参照してください.
    使用するdbcp 2接続プールを構成する必要がある場合は、spring.datasource.dbcp2プレフィックスの開始属性によって構成することができ、対応する構成属性はorg.apache.commons.dbcp2.BasicDataSourceによって受信され、構成可能な属性は対応するAPI文書を参照してください.
    DataSourceがあれば、DataSourceが使えます.私たちはその応用が必要なところで直接注入できます.例えば、下のように.
    @Service
    public class JdbcService {
    
        @Autowired
        private DataSource dataSource;
        
        public List<String> getUsers() throws Exception {
            Connection connection = null;
            Statement statement = null;
            ResultSet resultSet = null;
            List<String> names = new ArrayList<>();
            try {
                connection = this.dataSource.getConnection();
                statement = connection.createStatement();
                resultSet = statement.executeQuery("select name from tb_user");
                while (resultSet.next()) {
                    names.add(resultSet.getString(1));
                }
            } finally {
                if (resultSet != null) {
                    resultSet.close();
                }
                if (statement != null) {
                    statement.close();
                }
                if (connection != null) {
                    connection.close();
                }
            }
            return names;
        }
        
    }
    現在のアプリケーションではほとんどDataSourceを直接使用しないでプログラムしています.基本的にはHibernate、JPA、またはMybatisに基づいてプログラミングしています.JdbcTemplateを使うこともあります.DataSourceタイプのbeanを持つと、Spring Bootのorg.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfigurationが自動的にJdbcTemplate beanを配置してくれるので、上記のコードは次のように書き換えられます.
    @Service
    public class JdbcService {
    
        @Autowired
        private JdbcTemplate jdbcTemplate;
        
        public List<String> getUsers() throws Exception {
            String sql = "select name from tb_user";
            List<String> names = this.jdbcTemplate.queryForList(sql, String.class);
            return names;
        }
        
    }
    spring.jdbc.templateプレフィックスの開始属性を使用して、JdbcTemplateをカスタマイズしてもいいです.対応する構成属性はorg.springframework.boot.autoconfigure.jdbc.JdbcProperties.Templateによって受信されます.構成可能な属性は対応するAPI文書を参照してください.
     
    埋め込みデータベースに基づくDataSourceを使用します.
    Spring BootはH 2、HSQL、Derbyの3つの埋め込まれたデータベースを自動的に配置することをサポートしています.Class pathの下にそれらの関連するドライバクラスが存在する限り、Spring Bootは自動的に対応するDataSourceを配置します.埋め込みデータベースに基づく自動構成のDataSourceは、ユーザ名やパスワードなどのデータベース接続情報を設定する必要がない.DataSourceがあればDataSourceに関する操作ができます.セルテストを行う時に埋め込まれたデータベースを使うのはいい選択です.
     
    JNDIベースのDataSourceを使う
    JNDIベースのDataSourceを使用する必要がある場合は、spring.datasource.jndi-name属性によりDataSourceに対応するJNDI名称を指定することができる.
    spring.datasource.jndi-name=java:jboss/datasources/customers
    (注:本文はSpring Bootに基づいて2.0.3で書いています)