SpringBoot Tomcat接続池の使用を統合します。


接続池のサイズと性能オプション
  • maxActive:主なパラメータであり、接続池を配置しながら維持できる最大接続数は、クライアントが理論的に100個の接続が必要であれば、この値を100に設定します。
  • maxIdle:クライアントが一時的に接続を使用する必要がない場合、すべての接続プールのすべての接続を活動状態に維持するのは資源の無駄です。MaxIdleのオプションはtomcatに教えてくれます。クライアントが必要でない場合、最大でmaxIdleの空き接続を維持します。
  • ミニIdle:maxIdleと似ていますが、MAxIdleはtomcatに最大何個の空き接続を維持するかを教えています。minIdleはtomcatにクライアントが必要でなくても、少なくともいくつかの空き接続を維持し、クライアントの突発的な要求に対応するように教えています。
  • initial Size:接続池の起動時にはいくつの接続を初期化しますか?クライアントが必要でなくても空き接続を初期化します。
  • maxWait:接続池貸与接続の最長期間は、単位が10000 ms、例えば10000 msと設定され、クライアントが接続池から一つの接続を取得(貸し)した後、10000ミリ秒が返却されないと、接続池に異常が発生します。
  • maxAge:接続池の一つの接続の寿命は、接続池が一つの接続を初期化した後、初期化の時間を記憶し、以後貸与したり、クライアントがこの接続を返却したりするたびに、接続池は現在の時間-初期化時間>maxAgeをチェックします。maxAgeを超えると、接続池はこの接続を削除します。
  • 接続チェックのオプション
    mysql 5以降、長く接続して活動しないと(34,247,052 ms≒9.5時間)、mysqlデータベースが切断されます。これは異常を招きます。
    validationQuery:接続の可用性を確認する文は、一般的にmysqlはSELECT 1に設定され、oracleはselect 1 from dualに設定され、sql serverはSELECT 1に設定され、接続の可用性を確認する時、接続池はこれらの文を実行します。戻り結果が空でない場合、接続が有効と言います。
    validationQueryTimeout:接続チェックステートメントを実行する場合のタイムアウト時間。
    上の二つのオプションは接続池に接続の有効性を確認する方法を教えます。以下のいくつかのオプションは接続池がいつ接続の有効性を確認するかを教えます。
  • test OnConnect:接続初期化時に接続可用性検査
  • testOnBorrow:接続を貸している間に接続の可用性をチェックする
  • testOnReturn:接続をクライアントが返却する際に接続の可用性を確認する
  • testWhileIdle:アイドル接続を確認しながら接続の可用性をチェックする
  • 背景:
    プロジェクトの需要のため、プログラムの中でデータベースの明るい文のパスワードを使うことができません。
    データベース接続池を使ってデータベースにアクセスし、データベース情報をTomcatに配置します。
    環境
    JDK 1.8
    apache-tomcat-7.0.76
    Springboot 2.1.5.RELEASE
    (環境はバージョンが古いので、需要があるから)
    1 Tomcat接続池の配置
    まずmysql-connector-java-80.0.16.jarをTomcatのlibに導入します。
    1.1 content.xml配置
    Contextラベルの下に追加します。
    
    <Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" 
      maxActive="100" maxIdle="10" maxWait="10000" 
      name="jdbc/ZMKTDS" password="XXX" 
      type="javax.sql.DataSource" 
      url="XXX" 
      username="XXX" 
     />
    url、username、passwordは自分で足りないです。
    1.2 web.xmlプロファイル
    web-apラベルの下に追加します。
    
    <resource-ref> 
     <description>mysqlpool</description>
     <res-ref-name>jdbc/ZMKTDS</res-ref-name>
     <res-type>javax.sql.DataSource</res-type>
     <res-auth>Container</res-auth>
     <res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref> 
    
    上記の設定はユーザ名のパスワードを変更するだけです。
    1.3接続池の配置が成功したかどうかをテストする
    tomcat/webapp/exampleの下にtest.jspを置いて、
    そしてTomcatを起動して、localhostにアクセスします。8080/example/test.jsp
    
    <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    
    <sql:query var="rs" dataSource="jdbc/ZMKTDS">
     select id,      from    
    </sql:query>
    
    <html>
      <head>
        <title>DB Test</title>
      </head>
      <body>
    
      <h2>Results</h2>
    
    <c:forEach var="row" items="${rs.rows}">
        Foo ${row.id}<br/>
        Bar ${row.     }<br/>
    </c:forEach>
    
      </body>
    </html>
    
    
    2 Spring Boot整合JNDI
    私たちはSpring Bootフレームを使っていますので、自分で道具を書かなくてもいいです。Tomcatまでプールに繋がっています。
    2.1整合JNDI
  • appication.yml
  • datasource:
  • jndi-name:jdbc/datahub
  • db:あなたのデータベース
  • 2.2 DataSourceConfigの作成
    
    package cn.pconline.config;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.context.properties.EnableConfigurationProperties;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Primary;
    import org.springframework.jndi.JndiLocatorSupport;
    import org.springframework.jndi.JndiObjectFactoryBean;
    
    import javax.naming.NamingException;
    import javax.sql.DataSource;
    
    @Configuration
    @EnableConfigurationProperties
    public class DataSourceConfig {
    
        @Value("${spring.datasource.jndi-name}")
        private String jndiName;
    
        @Bean("dataSource")
        @Primary
        public DataSource primaryDataSource() throws NamingException {
            JndiObjectFactoryBean bean = new JndiObjectFactoryBean();
            bean.setJndiName(JndiLocatorSupport.CONTAINER_PREFIX + jndiName);
            bean.setProxyInterface(DataSource.class);
            bean.setLookupOnStartup(false);
            bean.afterPropertiesSet();
            return (DataSource) bean.getObject();
        }
    }
    
    
    これでSpringプロジェクトはTomcat接続池を通じてアクセスできます。
    ここで、SpringBoot統合Tomcat接続池の使用に関する記事を紹介します。Spring Boot Tomcat接続プールの内容については、以前の文章を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。