本篇內(nèi)容介紹了“SpringBoot-MySQL模板多數(shù)據(jù)源加載的方法”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
官渡網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站開發(fā)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。成都創(chuàng)新互聯(lián)成立于2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。
在 java 項(xiàng)目里常用到 mysql 多數(shù)據(jù)源操作。結(jié)合 springboot 使用原有的還是很方便的。 不過需要配置多套數(shù)據(jù)源的配置。
在微服務(wù)里, 數(shù)據(jù)庫連接之類的配置是單獨(dú)拆開讀取。相當(dāng)于一個(gè)模板。
如下mysql:
spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://127.0.0.1:3306/${config.mysql.name}?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&autoReconnect=true spring.datasource.username=root spring.datasource.password=root spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.driverClassName=com.mysql.jdbc.Driver
redis
rabbitmq
MongoDB
等等中間件連接配置通過單獨(dú)配置分開,以便后續(xù)方便修改ip等連接信息。
當(dāng)然 springboot
在注入多數(shù)據(jù)源時(shí)要讀取相應(yīng)前綴的數(shù)據(jù)配置。
代碼:
@Bean @ConfigurationProperties(prefix = "spring.datasource.onemysql") public DataSource originalDataSource(DataSourceFactory dataSourceFactory) { return DataSourceBuilder.create().build(); }
配置:
spring.datasource.onemysql.driver-class-name=com.mysql.jdbc.Driver spring.datasource.onemysql.url=jdbc:mysql://127.0.0.1:3306/${config.mysql.name}?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&autoReconnect=true spring.datasource.onemysql.username=root spring.datasource.onemysql.password=root spring.datasource.onemysql.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.onemysql.driverClassName=com.mysql.jdbc.Driver
上面方式加載以 onemysql 開始的數(shù)據(jù)源配置。如果是多個(gè)的話,相應(yīng)配置多個(gè)bean和配置文件。
根據(jù)上述方式, 我們可以使用一個(gè)mysql模板, 通過一定方式去加載創(chuàng)建對應(yīng)的數(shù)據(jù)源。微服務(wù)下只需要維護(hù)一個(gè)mysql配置模板。
ps:實(shí)際version版本請使用最新版
點(diǎn)擊查看最新新版本
com.purgeteam mysql-datasource-spring-boot-starter 0.1.0.RELEASE
我們先按照原有的方式配置mysql數(shù)據(jù)源配置。
config.mysql.name=user config.mysql.hosturl=127.0.0.1:3306 # mysql spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://${config.mysql.hosturl}/${config.mysql.name}?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&autoReconnect=true spring.datasource.jdbc-url=${spring.datasource.url} spring.datasource.username=root spring.datasource.password=root spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.driverClassName=com.mysql.jdbc.Driver spring.datasource.filters=stat spring.datasource.maxActive=20 spring.datasource.initialSize=1 spring.datasource.maxWait=60000 spring.datasource.minIdle=1 spring.datasource.timeBetweenEvictionRunsMillis=60000 spring.datasource.minEvictableIdleTimeMillis=300000 spring.datasource.validationQuery=select 'x' spring.datasource.testWhileIdle=true spring.datasource.testOnBorrow=false spring.datasource.testOnReturn=false spring.datasource.poolPreparedStatements=true spring.datasource.maxOpenPreparedStatements=20
config.mysql.name
為數(shù)據(jù)庫名稱, 為下面代碼注入做準(zhǔn)備。
通過 DataSourceFactory#createDataSource
方法可以將指定數(shù)據(jù)庫注入。模板配置為之前的配置, 數(shù)據(jù)庫名稱通過 ${config.mysql.name}
進(jìn)行替換。
/** * 數(shù)據(jù)庫名稱替換方式生成 {@link DataSource} * @author purgeyao * @since 1.0 */ @Configuration public class OneDataSourceConfiguration { ... /** * DataSourceFactory#createDataSource 方式加載 one_mysql 數(shù)據(jù)庫 * @param dataSourceFactory dataSourceFactory * @return {@link DataSource} */ @Primary @Bean public DataSource oneDataSource(DataSourceFactory dataSourceFactory) { return dataSourceFactory.createDataSource("one_mysql"); } }
這樣可以把名為 one_mysql
數(shù)據(jù)庫數(shù)據(jù)源進(jìn)行加載。
當(dāng)然只有上面方式只適合數(shù)據(jù)庫地址密碼一致的情況下,庫名不一致,注入多數(shù)據(jù)源。
下面方式支持?jǐn)?shù)據(jù)庫信息不一致情況下使用模板注入多數(shù)據(jù)源。
需要先配置 mysql (1 配置模板),另行加下下面配置。
配置:
config.datasource.mysql.source-info-map
包含 4 個(gè)信息 host-url數(shù)據(jù)庫地址
、 name數(shù)據(jù)庫名稱
、username數(shù)據(jù)庫用戶名
、 password數(shù)據(jù)庫密碼
。
config.datasource.mysql.source-info-map.tow_mysql
里的 tow_mysql
為 map 集合的 key。
# mysql-datasource-spring-boot-starter config.datasource.mysql.source-info-map.tow_mysql.host-url=127.0.0.1:3306 config.datasource.mysql.source-info-map.tow_mysql.name=tow_mysql config.datasource.mysql.source-info-map.tow_mysql.username=root config.datasource.mysql.source-info-map.tow_mysql.password=root
代碼:
先在 DataSourceConfigProperties
對象里獲取相應(yīng) SourceInfoMap
配置。
將 DataSourceConfigProperties.SourceInfo towMysq
配置通過 DataSourceFactory#createDataSource
方法進(jìn)行創(chuàng)建即可。
/** * {@link DataSourceConfigProperties} 配置方式生成 {@link DataSource} * * @author purgeyao * @since 1.0 */ @Configuration public class TowDataSourceConfiguration { /** * DataSourceFactory#createDataSource 方式加載 tow_mysql 數(shù)據(jù)庫 * * @param dataSourceFactory dataSourceFactory * @return {@link DataSource} */ @Bean public DataSource towDataSource(DataSourceFactory dataSourceFactory, DataSourceConfigProperties properties) { DataSourceConfigProperties.SourceInfo towMysql = properties.getSourceInfoMap().get("tow_mysql"); if (towMysql == null) { throw new IllegalArgumentException("未獲取到相應(yīng)配置"); } return dataSourceFactory.createDataSource(towMysql); } }
@DataSourceSelector
注解可以使用配置模板生成相應(yīng)數(shù)據(jù)源對象。
DataSourceSelector#value
為數(shù)據(jù)庫配置key(詳情2的配置), 其他寫法和原有的數(shù)據(jù)庫創(chuàng)建方法一致。
只是把原有的 @ConfigurationProperties(prefix = "spring.datasource.onemysql")
替換為 @DataSourceSelector("tow_mysql")
/** * 注解方式注入 {@link DataSource} * * @author purgeyao * @since 1.0 */ @Configuration public class AnnotationsDataSourceConfiguration { ... /** * {@link DataSourceSelector} 方式選擇注入 {@link DataSource} * * @return {@link DataSource} */ @DataSourceSelector("tow_mysql") public DataSource selectorDataSource() { return DataSourceBuilder.create().build(); } }
@DataSourceSelector("tow_mysql")
方式推薦使用。和之前的方法基本無差別, 簡單方便點(diǎn)。
mysql 配置文件分開之后方便之后多個(gè)服務(wù)使用。
“SpringBoot-Mysql模板多數(shù)據(jù)源加載的方法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!