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