背景:あなたは複数のデータソースからのデータを照会するため同社は、新しいデータ項目を作成したい、とのプロジェクトは、ノートをビルドする前に、記録を行うには、この時間をしませんでした。箱から出して、おいしい警告!
いくつかの問題に遭遇するプロセスを構築し、我々は、命令をステップインします。コード住所:https://gitee.com/aaron_qc/multi-datasource.git
- メインコースの最初の。多段階データ・ソース構成
- 依存tkmapper +ドルイド+ mysqlの+春ブート・コンフィギュレーション・プロセッサを導入
-
<依存> <groupIdを> org.springframework.boot </ groupIdを> <たartifactId>春・ブート・コンフィギュレーション・プロセッサ</たartifactId> <バージョン> 2.1.5.RELEASE </バージョン> </依存関係> <! - mysqlのそしてMyBatisの等- > <依存性> <のgroupId> tk.mybatis </のgroupId> <たartifactId>マッパースプリングブートスタータ</たartifactId> <バージョン> 2.1.4 </バージョン> </依存> <依存性> <groupIdを> mysqlの</ groupIdを> <たartifactId>のmysql-コネクタ-javaの</たartifactId> <バージョン> 8.0.11 </バージョン> </依存関係> <! -ドルイド- > <依存性> <groupIdを> com.alibaba </ groupIdを> <たartifactId>ドルイドスプリングブートスタータ</たartifactId> <バージョン> 1.1.10 </バージョン> </依存関係>
-
- 以下のように設定があります
- クラスプラス@EnableConfigurationPropertiesを開始します。
- OceanApplication
/ ** * @author 2019年9月16日にQuCheng。 * EnableConfigurationProperties使@ConfigurationProperties注解的类(需要加@Component)生效。 * / @EnableConfigurationProperties @SpringBootApplication パブリッククラスOceanApplication { パブリック静的無効メイン(文字列[] args){ SpringApplication.run(OceanApplication.class、引数)。 } }
- OceanApplication
- YMLのプロパティを設定します
- application.ymlカスタムname属性、およびのみ対応するクラスのJavaに対応
ドルイド: #データソース構成 ユーザー:ルート パスワード:XXXX driverClass:com.mysql.cj.jdbc.Driver #最小最大初期 INITIALSIZE :. 5 minIdle :. 5 MAXACTIVEについて:20です testOnBorrow:Falseに urlIceberg:JDBC:MySQLの://106.12.176.120 ?/氷山serverTimezone = GMT%2B8 &characterEncoding = UTF-8&useSslオプション= falseの#は、タイムゾーンを設定するとき urlOceanます。jdbc:mysqlの://106.12.176.120/ocean serverTimezone = GMT%2B8&characterEncoding = UTF-8&useSslオプション= 偽#はタイムゾーンを設定するとき? urlAccountます。jdbc:MySQLの:?//106.12.176.120/account serverTimezone = GMT%2B8 &characterEncoding = UTF-8&useSslオプション= falseの#は、タイムゾーンを設定します
- application.ymlカスタムname属性、およびのみ対応するクラスのJavaに対応
- カスタムプロパティ親クラスローディングBaseProperty
- マッピングYML構成。
パッケージcom.hb.ocean.druid。 輸入com.alibaba.druid.pool.DruidDataSource。 輸入lombok.Data。 輸入org.springframework.boot.context.properties.ConfigurationProperties。 輸入org.springframework.stereotype.Component。 インポートするjavax.sql.DataSource; / ** *データソースの基本クラス * @author qucheng * / @Data @ConfigurationProperties(接頭辞= "ドルイド") @Component クラスBaseProperty { 保護された文字列ユーザー; 保護された文字列のパスワード。 保護された文字列driverClass。 保護されたint型INITIALSIZE。 保護されたint型MAXACTIVE。 保護されたint型minIdle。 保護されたブールtestOnBorrow。 保護された文字列urlAccount。 保護された文字列urlOcean。 保護された文字列urlIceberg。 データソースcreateDataSource(文字列のURL){ DruidDataSourceのdataSource =新しいDruidDataSource(); dataSource.setDriverClassName(driverClass)。 dataSource.setUrl(URL); dataSource.setUsername(ユーザ)。 dataSource.setPassword(パスワード); dataSource.setInitialSize(INITIALSIZE)。 dataSource.setMaxActive(MAXACTIVE)。 dataSource.setMinIdle(minIdle)。 dataSource.setTestOnBorrow(testOnBorrow)。 DataSourceを返します。 } }
- マッピングYML構成。
- それぞれのデータソース構成マップパス(マッパーインターフェース+ xmlファイル)
- パス構成 - 2つのその他の構成は、ここでは省略されます
com.hb.ocean.druidパッケージ; インポートorg.apache.ibatis.session.SqlSessionFactory; インポートorg.mybatis.spring.SqlSessionFactoryBean; インポートorg.springframework.beans.factory.annotation.Qualifier; インポートorg.springframework.context.annotation .Bean; インポートorg.springframework.core.io.support.PathMatchingResourcePatternResolver; インポートorg.springframework.jdbc.datasource.DataSourceTransactionManager; インポートorg.springframework.stereotype.Component; インポートtk.mybatis.spring.annotation.MapperScan; インポートのjavax。 sql.DataSource; / ** *アカウントのDataSource * MapperScanパッケージを結合するための注釈を(テーブル名マッピングエンティティTKを使用する)と注釈を追加することなく、指定したデータソース、および指定されたディレクトリマッパープロセスをスキャン * *を@ qucheng著者 * / @Component 公衆SqlSessionFactory masterSqlSessionFactory(@Qualifier( "accountDataSource")データソースaccountDataSource) @MapperScan(basePackages = "com.hb.ocean.mapper.account"、sqlSessionFactoryRef = "accountSqlSessionFactory") パブリッククラスAccountConfigがBaseProperty {延び @Bean(名= "accountDataSource") 公衆データソースcreateDataSourceを(){ (urlAccount)createDataSourceを返します。 } @Bean(名= "accountTransactionManager") 公衆DataSourceTransactionManager accountTransactionManager(){ 戻り新しいDataSourceTransactionManager(createDataSource())。 } @Bean(名= "accountSqlSessionFactory")は 例外{スロー 最終SqlSessionFactoryBeanのSessionFactory =新しいSqlSessionFactoryBeanを(); sessionFactory.setDataSource(accountDataSource)。 文字列mapperLocation = "クラスパス:マッパー/アカウント/ * xmlの"; sessionFactory.setMapperLocations(新しいPathMatchingResourcePatternResolver() .getResources(mapperLocation)); sessionFactory.getObjectを返します(); } }
- パス構成 - 2つのその他の構成は、ここでは省略されます
- 適切なディレクトリにファイルを作成します。このプロジェクトは、起動時にロードされます。
- 構造図。
- 構造図。
- クラスプラス@EnableConfigurationPropertiesを開始します。
- 次のように試験結果の打ち上げ成功後にあり
- テストコード
com.hb.ocean.controllerパッケージ; インポートcom.hb.ocean.mapper.account.UserMapper; インポートcom.hb.ocean.mapper.iceberg.ItemOrderMapper; インポートorg.springframework.web.bind.annotation.GetMapping; インポートORG .springframework.web.bind.annotation.RequestMapping; インポートorg.springframework.web.bind.annotation.RestController; インポートjavax.annotation.Resourceを; / ** 。* @author QuCheng 2019年9月17日ON * / @RestController @ (「/ QC」)@RequestMapping パブリッククラスTestViewに{ / ** *直接制御層に導入ダオ層を推奨しません。ここだけの使用を証明 * / @Resource プライベートUserMapper UserMapperを、 @Resource プライベートItemOrderMapper itemOrderMapper。 ( "/テスト")@GetMapping パブリック文字列試験(){ System.out.printlnは( "用户数:" + userMapper.selectCountUser(NULL、NULL)); System.out.println( "订单数:" + itemOrderMapper.selectCountSuccessOrder(NULL、NULL)); 「OK」を返します。 } }
- テスト結果
- テストコード
- 依存tkmapper +ドルイド+ mysqlの+春ブート・コンフィギュレーション・プロセッサを導入
いくつかの質問には、プロセス上で発生します
- 複数のデータソースは、一貫性のないデータ・ソースのURLに加えて、基本的な構成を共有YML。
- カスタム構成項目はYMLプロパティを必要とします
- 引入春・ブート・コンフィギュレーション・プロセッサ。
- クラスは、アノテーションを使用して起動します@EnableConfigurationProperties
- 解析クラス3は、便宜上のために上記のコメント@Dataに導入されます。(接頭辞=「ドルイド」)が指定されている@ConfigurationPropertiesプロパティを起動する「ドルイド」読み取ります。コンテナ管理によって表さ@Component
- Configurationクラス@MapperScan注釈はtk.mybatis.spring.annotation.MapperScanコメントを使用しています。org.mybatis.spring.annotation.MapperScanも使用することができますが、それは一緒@Table注釈マップで使用することはできません。
上記の方法は、マルチデータソース構成をspringboot。これはデモバージョンです。さらにデータの実用化にも関します
- 登録のユーレカの発見。クラスのノートの導入を開始します
- インターフェース呼び出しと失敗したヒューズを装います
- エレガントでシンプルなプロセスのシャットダウン
- 闊歩ドキュメント
- Redisの分散トランザクション