JPAでの学習春データ-JPA(二十から一)--- DataSourceプロパティの設定

1、SpringBoot 2.2.xのデフォルトのデータソースを使用

  SpringBoot 2.2.xのバージョン、データソースは、注射のDataSourceにより、デフォルトHikariCPで使用され、あなたが見ることができ、完全修飾名を印刷する直接印刷します。

    

  ジャーパッケージMETA-INF / spring.factoriesがorg.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration->は発見後JpaRepositoriesAutoConfigurationを入力して見つけることができます> @EnableAutoConfiguration - @SpringBootApplication:または自動的に設定するには、ソースコードを見ることで見つけることができます発見を入力するSpringBootはApacheが提供する私たちのために、3つのデフォルト構成では、TomcatのオファーJDBC、HikariCPを、提供DataSourceAutoConfigurationを入力した後、インポートDataSourcePoolMetadataProvidersConfiguration構成を見つけた>、ポイント- HibernateJpaAutoConfigurationを入力した後、あなたがDataSourceAutoConfigurationを設定する必要があることを見つける> -あなたはHibernateJpaAutoConfigurationを設定する必要がありますDbcp2は、とMavenの依存関係により、JARパッケージが導入された外観を使用すると、ばねブートスターター-DATA-知ることができ 、JPA 導入
しながら、ばねブートスターター-JDBC参照され、春・ブート・スターター-JDBCをHikariCPは、そのデフォルトはHikariCPです。

@Configuration(proxyBeanMethods = パブリック クラスDataSourcePoolMetadataProvidersConfiguration {

    @Configuration(proxyBeanMethods = 
    @ConditionalOnClass(org.apache.tomcat.jdbc.pool.DataSource。クラス静的 クラスTomcatDataSourcePoolMetadataProviderConfiguration {

        @豆
        DataSourcePoolMetadataProvider tomcatPoolDataSourceMetadataProvider(){
            リターン(データソース) - > {
                org.apache.tomcat.jdbc.pool.DataSource tomcatDataSource = DataSourceUnwrapper.unwrap(データソース、
                        org.apache.tomcat.jdbc.pool.DataSource。クラス);
                もし(!tomcatDataSource = ヌル){
                     リターン 新しいTomcatDataSourcePoolMetadata(tomcatDataSource)。
                }
                リターン ヌル
            }。
        }

    }

    @Configuration(proxyBeanMethods = 
    @ConditionalOnClass(HikariDataSource。クラス静的 クラスHikariPoolDataSourceMetadataProviderConfiguration {

        @豆
        DataSourcePoolMetadataProvider hikariPoolDataSourceMetadataProvider(){
            リターン(データソース) - > {
                HikariDataSource hikariDataSource = DataSourceUnwrapper.unwrap(dataSource, HikariDataSource.class);
                if (hikariDataSource != null) {
                    return new HikariDataSourcePoolMetadata(hikariDataSource);
                }
                リターン ヌル
            }。
        }

    }

    @Configuration(proxyBeanMethods = 
    @ConditionalOnClass(のBasicDataSource。クラス静的 クラスCommonsDbcp2PoolDataSourceMetadataProviderConfiguration {

        @豆
        DataSourcePoolMetadataProvider commonsDbcp2PoolDataSourceMetadataProvider(){
            リターン(データソース) - > {
                BasicDataSource dbcpDataSource = DataSourceUnwrapper.unwrap(データソース、のBasicDataSource。クラス)。
                もし(!dbcpDataSource = ヌル){
                     リターン 新しいCommonsDbcp2DataSourcePoolMetadata(dbcpDataSource)。
                }
                リターン ヌル
            }。
        }

    }

}

  あなたが別の二つの接続プールを使用する場合は、あなただけが対応する依存関係にポンポンを追加する必要があり、およびプロパティは、完全修飾名で指定されたspring.datasource.typeことができます。

2、データソース関連の設定

  我々 DataSourceAutoConfigurationクラスの@EnableConfigurationProperties(DataSourceProperties.class)は、あなたがspring.datasource構成を属性し始めている、関連する構成DataSourcePropertiesクラスを知ることができます。
  名前:データソースの名前、組み込みデータベースを使用して、デフォルトの名前がTESTDBです。
  generateUniqueName:ランダムなデータソース名を生成するかどうか。
  タイプ:達成するために、接続プールの完全修飾名を使用します。デフォルトでは、自動的にクラスパスから検出されました。
  driverClassName:JDBCドライバの完全修飾名。デフォルトでは、URLに基づいて自動検出。
  URL:JDBCデータベースURL。
  ユーザ名:データベースのログインユーザー名。
  パスワード:パスワードデータベース。
  jndiName:データソースのJNDIの場所。あなたが設定した場合、クラス、URL、ユーザー名とパスワードを無視します。
  initializationMode:利用可能利用DDLとDMLスクリプトの初期化データソースを使用して、デフォルトの組み込みデータベースを使用します。
  プラットフォーム:プラットフォームは、DDLまたはDMLスクリプトで使用される(例えば、スキーマ- $ {プラットフォーム} .SQL又はデータ- $ {プラットフォーム} .SQL) 。
  スキーマ:DDLスクリプトリソース位置。この設定の後、あなたがプログラムを起動するたびに、プログラムは、データベース操作の構造に指定されたSQLファイルを実行します。
  schemaUsername:データベースのユーザー名のDDLスクリプトの実装。
  schemaPassword:データベースパスワードDDLスクリプトを実行します。
  データ:DMLスクリプトリソース位置。この設定の後、あなたがプログラムを起動するたびに、プログラムがデータベースに指定されたSQLファイル、データ操作を実行します。
  dataUsername:データベースのユーザー名DMLスクリプトの実装。
  dataPassword:データベースパスワードDMLスクリプトを実行します。
  ContinueOnError:停止するかどうか、データベースの初期化中にエラーが発生した場合。デフォルトはfalse
  セパレーター:SQL初期化スクリプト文の区切り文字。
  sqlScriptEncoding:SQLスクリプトコード。
  XA:XA設定。

3、春ブーツは、接続プールのドルイドで使用されます

  アリは多くのユーザーが接続プーリングをドルイド、だけでなく、監視機能を提供し、それは非常に簡単に使用することもあります。POMに依存してドルイドスプリング・ブート・スターターを追加します主なカテゴリは、内部がDruidDataSourceWrapper、互換DataSourceProperties構成を備えている、DruidDataSourceAutoConfigureあります。接続プールの設定は、デフォルト設定のDruidDataSourceとDruidAbstractDataSourceで見ることができます。

        <依存>
            <groupIdを> com.alibaba </ groupIdを>
            <たartifactId>ドルイドスプリング・ブート・スターター</たartifactId>
            <バージョン> $ {ドルイド-ばねブートstarter.version} </バージョン>
        </依存関係>

  3.1、ユニバーサル接続プールの設定

接続プールの設定#druid
#接続サイズを初期化します
spring.datasource.druid.initial -size = 1
#接続の最小数
spring.datasource.druid.min -idle = 1
接続の最大数#
spring.datasource.druid.max -active = 20
#接続タイムアウトを待機する時間を取得します。
spring.datasource.druid.max -wait = 60000
#そのような検出間隔頻度、アイドル状態の接続はミリ秒単位で閉じることが検出されます
spring.datasource.druid.time -between-立ち退きラン-ミリ秒= 60000
#最小生存時間をミリ秒単位での接続プール、
spring.datasource.druid.min -evictable-アイドルタイムミリ秒= 300000
#オープンPSCache、および指定した各接続PSCacheのサイズ
spring.datasource.druid.poolは -prepared-ステートメントを= trueに
spring.datasource.druid.maxの -pool-準備-の声明あたりの接続サイズ= 20 
#イニシャルがある場合 - サイズの大きな数は、アプリケーション起動時のオープンをスピードアップします
spring.datasource.druid.async -init = 
モニタの統計はフィルターをブロック#、属性の型が文字列、別名を介して設定の拡張機能である、一般的なプラグインは以下のとおりです。フィルター付きの監視統計:STAT;フィルター付きログ:log4jは、防衛SQLインジェクションのフィルタ:壁
spring.datasource.druid.filters = STAT

  3.2、次のように構成され、私たちのために監視機能を提供してもドルイド:

#druid構成の監視
#StatViewServlet構成情報、ドルイドウィキ、構成_StatViewServlet構成を参照
spring.datasource.druid.stat -view-servlet.enabled = trueに
#設定のURLを - アクセスのパターン内蔵のモニタページ
spring.datasource.druid.stat -view-servlet.urlパターン= /ドルイド/ *
#かどうかは、空の統計を許可します
spring.datasource.druid.stat  - ビュー -  servlet.reset有効=真
#ユーザー名とパスワード
spring.datasource.druid.stat  - ビュー -  servlet.login  - ユーザ名=ドルイド
spring.datasource.druid.stat  - ビュー -  servlet.loginパスワード=ドルイド
許可するように構成されたか、空でない場合は#ホワイトリスト、そして、すべてのアクセスを許可します
#spring.datasource.druid.stat  - ビュー -  servlet.allow = 127.0.0.1
#ブラックリストにリストを拒否した場合、許可リストが拒否される場合でも、許可するように優先順位を否定
#spring.datasource.druid.stat  - ビュー -  servlet.deny = 127.0.0.1

#WebStatFilter構成情報、ドルイドのWikiを参照して、設定_設定WebStatFilter
spring.datasource.druid.web-STAT-filter.enabled =真
spring.datasource.druid.web-STAT-filter.urlパターン= / *
#など、/ JS / *など* .jsファイルとして、不要なURLを除外する
spring.datasource.druid.web-STAT-filter.exclusions = *。jsファイル、*。GIF、*。JPG、*。PNG、*。CSS、*。ICO、/ドルイド/ *
#session統計
spring.datasource.druid.web-STAT-filter.session-STAT-有効=​​真
#spring.datasource.druid.web-STAT-filter.session-STAT-MAXカウント=
#spring.datasource.druid.web-STAT-filter.principalセッション名=
#spring.datasource.druid.web-STAT-filter.principalクッキー名=
#spring.datasource.druid.web-STAT-filter.profile有効=

#スプリング監視設定情報、ドルイドGitHubのWikiとスプリング構成_Druidおよび関連する監視構成を参照
例えばxyzserviceよう#スプリングAOPモニタエントリポイント、*、設定複数カンマ区切り
spring.datasource.druid.aop-パターン= cn.caofanqi.study.studyspringdatajpa.controller。*

  設定後は、プロジェクトの訪問起動  にhttp:// localhostを:8080 /ドルイド / index.htmlの ように、次のとおりです。

  

  3.3、複数のデータソースの構成

  設定ファイルをapplication.properties、接続プールの設定を追加します。

データソース#1の設定
spring.datasource.druid.one.driver - クラス -name = はcom.mysql.jdbc.Driver
spring.datasource.druid.one.url=jdbc:mysql://localhost:3306/study-spring-data-jpa1?characterEncoding=UTF-8&useSSL=false
spring.datasource.druid.one.username=root
spring.datasource.druid.one.password=root
spring.datasource.druid.one.initial-size=1
spring.datasource.druid.one.min-idle=1
spring.datasource.druid.one.max-active=10
spring.datasource.druid.one.max-wait=10000

#数据源2配置
spring.datasource.druid.two.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.druid.two.url=jdbc:mysql://localhost:3306/study-spring-data-jpa2?characterEncoding=UTF-8&useSSL=false
spring.datasource.druid.two.username=root
spring.datasource.druid.two.password=root
spring.datasource.druid.two.initial-size=2
spring.datasource.druid.two.min-idle=2
spring.datasource.druid.two.max-active=20
spring.datasource.druid.two.max-wait=20000

  JavaConfig配置

/**
 * 多数据源配置
 * @author caofanqi
 */
@Configuration
@Profile("multi-datasource")
public class MultiDataSourceConfig {


    @Primary
    @Bean(initMethod = "init")
    @ConfigurationProperties("spring.datasource.druid.one")
    public DataSource dataSourceOne(){
        return DruidDataSourceBuilder.create().build();
    }


    @Bean(initMethod = "init")
    @ConfigurationProperties("spring.datasource.druid.two")
    public DataSource dataSourceTwo(){
        return DruidDataSourceBuilder.create().build();
    }

}

  测试用例:

/**
 * 多数据源测试
 * @author caofanqi
 */
@SpringBootTest
@ActiveProfiles("multi-datasource")
class MultiDataSourceConfigTest {

    @Resource
    private DruidDataSource dataSourceOne;
    @Resource
    private DruidDataSource dataSourceTwo;

    @Test
    void testDataSourceOne(){

        assertThat(dataSourceOne.getUrl()).isEqualTo("jdbc:mysql://localhost:3306/study-spring-data-jpa1?characterEncoding=UTF-8&useSSL=false");
        assertThat(dataSourceOne.getUsername()).isEqualTo("root");
        assertThat(dataSourceOne.getPassword()).isEqualTo("root");
        assertThat(dataSourceOne.getDriverClassName()).isEqualTo("com.mysql.jdbc.Driver");

        assertThat(dataSourceOne.getInitialSize()).isEqualTo(1);
        assertThat(dataSourceOne.getMinIdle()).isEqualTo(1);

        assertThat(dataSourceOne.getMaxActive()).isEqualTo(10);
        assertThat(dataSourceOne.getMaxWait()).isEqualTo(10000);
    }


    @Test
     void testDataSourceTwo() {

        assertThat(dataSourceTwo.getUrl()).isEqualTo("jdbc:mysql://localhost:3306/study-spring-data-jpa2?characterEncoding=UTF-8&useSSL=false");
        assertThat(dataSourceTwo.getUsername()).isEqualTo("root");
        assertThat(dataSourceTwo.getPassword()).isEqualTo("root");
        assertThat(dataSourceTwo.getDriverClassName()).isEqualTo("com.mysql.jdbc.Driver");

        assertThat(dataSourceTwo.getInitialSize()).isEqualTo(2);
        assertThat(dataSourceTwo.getMinIdle()).isEqualTo(2);

        assertThat(dataSourceTwo.getMaxActive()).isEqualTo(20);
        assertThat(dataSourceTwo.getMaxWait()).isEqualTo(20000);
    }

}

  更多druid请看 https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter

4、Jpa相关属性配置

  主要在JpaProperties和HibernateProperties中。

  JpaProperties类:
    properties:Jpa提供商的本地属性。
    mappingResources:映射资源(相当于persistence.xml中的“Mapping file”)
    databasePlatform:要操作的目标数据库的名称,默认情况下自动检测。也可以使用“Database”枚举类设置。
    database:要操作的目标数据库,默认情况下自动检测。也可以使用“databasePlatform”属性进行设置。
    generateDdl:是否在启动时初始化ddl(根据实体生成表结构),默认不初始化。
    showSql:是否打印SQL,默认不显示。
    openInView:注册OpenEntityManagerInViewInterceptor。在请求的整个处理过程中将JPA EntityManager绑定到线程。

  HibernateProperties类:
    naming:命名策略。
    ddlAuto:DDL模式。这实际上是“hibernate.hbm2ddl.auto”属性的快捷方式。在使用嵌入式数据库且未检测到架构管理器时,默认为“create-drop”。否则,默认为“none”。
    useNewIdGeneratorMappings:是否使用Hibernate新的IdentifierGenerator来实现AUTO、TABLE和SEQUENCE。这实际上是“hibernate.id.new_generator_mappings”属性的快捷方式。未指定时将默认为“true”。

 

源码地址:https://github.com/caofanqi/study-spring-data-jpa

おすすめ

転載: www.cnblogs.com/caofanqi/p/12174021.html