Spring Boot多數(shù)據(jù)源配置

1算墨、application.properties中配置多數(shù)據(jù)源

# qss數(shù)據(jù)庫

datasource.qss.driver-class-name=com.mysql.jdbc.Driver

datasource.qss.url=jdbc:mysql://ip:3306/qssdb?autoReconnectForPools=true&useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false

datasource.qss.username=***

datasource.qss.password=***

# foc測試數(shù)據(jù)庫

datasource.foc.driver-class-name=oracle.jdbc.driver.OracleDriver

datasource.foc.url=jdbc:oracle:thin:@ip:ora817

datasource.foc.username=***

datasource.foc.password=***


2.application.properties中 配置主數(shù)據(jù)源MySQL連接池(一定要注意連接池配置的前綴吊骤,此處用于配置qss數(shù)據(jù)源)

#參考:http://blog.csdn.net/catoop/article/details/50507516

#我們使用Tomcat數(shù)據(jù)源連接池废岂,需要依賴tomcat-jdbc,只要應(yīng)用中添加了spring-boot-starter-jdbc 或 spring-boot-starter-data-jpa依賴唬滑,則無需擔(dān)心這點(diǎn)司蔬,因?yàn)閷詣?dòng)添加 tomcat-jdbc 依賴。

#假如我們想用其他方式的連接池技術(shù)蛋叼,只要配置自己的DataSource bean,即可覆蓋Spring Boot的自動(dòng)配置剂陡。

datasource.qss.max-idle=10

# Number of ms to wait before throwing an exception if no connection is available.

datasource.qss.max-wait=10000

datasource.qss.min-idle=5

datasource.qss.initial-size=5

# Maximum number of active connections that can be allocated from this pool at the same time.

datasource.qss.max-active=100

datasource.qss.validation-query=SELECT 1

#使用testOnBorrow為true(即在獲取Connection對象時(shí)檢測其可用性)狈涮,不過這樣會影響性能

# Validate the connection before borrowing it from the pool.

datasource.qss.test-on-borrow=true

#有些數(shù)據(jù)庫連接的時(shí)候有超時(shí)限制(mysql連接在8小時(shí)后斷開),或者由于網(wǎng)絡(luò)中斷等原因鸭栖,連接池的連接會出現(xiàn)失效的情況歌馍,這時(shí)候設(shè)置一個(gè)testWhileIdle參數(shù)為true,可以保證連接池內(nèi)部定時(shí)檢測連接的可用性纤泵,不可用的連接會被拋棄或者重建骆姐,最大情況的保證從連接池中得到的Connection對象是可用的镜粤。

datasource.qss.test-while-idle=true

#設(shè)置當(dāng)連接被歸還時(shí)捏题,是否要提交所有還未完成的事務(wù)

datasource.qss.test-on-return=false

#如果當(dāng)前連接池中某個(gè)連接在空閑了timeBetweenEvictionRunsMillis時(shí)間后任然沒有使用,則被物理性的關(guān)閉掉肉渴。

datasource.qss.time-between-eviction-runs-millis=60000

# 配置一個(gè)連接在池中最小生存的時(shí)間公荧,單位是毫秒

datasource.qss.min-evictable-idle-time-millis=300000

datasource.qss.jdbc-interceptors=ConnectionState;SlowQueryReport(threshold=0)


3. 配置其他數(shù)據(jù)源連接池(有多少個(gè)配置多少個(gè))

datasource.foc.max-idle=10

datasource.foc.max-wait=10000

datasource.foc.min-idle=5

datasource.foc.initial-size=5

datasource.foc.max-active=100

#SELECT 1(MySQL) select 1 from dual(Oracle) SELECT 1(MySQL Server)。

datasource.foc.validation-query=select 1 from dual

datasource.foc.test-on-borrow=true

datasource.foc.test-while-idle=true

datasource.foc.test-on-return=false

datasource.foc.time-between-eviction-runs-millis=60000

datasource.foc.min-evictable-idle-time-millis=300000

datasource.foc.jdbc-interceptors=ConnectionState;SlowQueryReport(threshold=0)


4. DataSource Bean 主數(shù)據(jù)源(主數(shù)據(jù)源添加@Primary注解)

@Configuration

@EnableTransactionManagement

@EnableJpaRepositories(basePackages = {"cn.com.scal.qss.dao"}, entityManagerFactoryRef = "qssEntityManagerFactory",? transactionManagerRef="qssTransactionManager") //

// basePackages設(shè)置Repository所在位置

@ComponentScan

@PropertySource("classpath:application.properties")

public class QssRepositoryConfig {

@Bean(name = "qssDataSource")

@Qualifier("qssDataSource")

@Primary

@ConfigurationProperties(prefix="datasource.qss")

public DataSource qssDataSource() {

return DataSourceBuilder.create().build();

}

@Bean(name = "qssEntityManagerFactory")

@Primary

public EntityManagerFactory? qssEntityManagerFactory(DataSource qssDataSource) {

LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();

factory.setDataSource(qssDataSource);

factory.setJpaVendorAdapter(new HibernateJpaVendorAdapter());

factory.setJpaProperties(additionalJpaProperties());

factory.setPersistenceUnitName("qssPersistent");

factory.setPackagesToScan("cn.com.scal.qss.domain");? ? //設(shè)置實(shí)體類所在位置

factory.afterPropertiesSet();

return factory.getObject();

}

@Bean(name = "qssTransactionManager")

@Primary

public PlatformTransactionManager qssTransactionManager(EntityManagerFactory qssEntityManagerFactory) {

JpaTransactionManager transactionManager = new JpaTransactionManager();

transactionManager.setEntityManagerFactory(qssEntityManagerFactory);

return transactionManager;

}

public Properties additionalJpaProperties(){

Properties properties = new Properties();

properties.setProperty("hibernate.hbm2ddl.auto", "update");

properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");

properties.setProperty("hibernate.show_sql", "true");

properties.setProperty("hibernate.format_sql", "true");

return properties;

}

}


5. DataSource Bean 其他數(shù)據(jù)源

@Configuration

@EnableTransactionManagement? ? ? ? // 只涉及查詢同规,暫不需要事務(wù)管理

@EnableJpaRepositories(basePackages = {"cn.com.scal.qss.foc.dao"}, entityManagerFactoryRef = "focEntityManagerFactory" ,? transactionManagerRef="focTransactionManager")

@ComponentScan

@PropertySource("classpath:application.properties")

public class FocRepositoryConfig {

@Bean(name = "focDataSource")

@Qualifier("focDataSource")

@ConfigurationProperties(prefix="datasource.foc")

public DataSource focDataSource() {

return DataSourceBuilder.create().build();

}

@Bean(name = "focEntityManagerFactory")

@Qualifier("focEntityManagerFactory")

public EntityManagerFactory focEntityManagerFactory(@Qualifier("focDataSource") DataSource focDataSource) {

LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();

factory.setDataSource(focDataSource);

factory.setPersistenceProviderClass(HibernatePersistenceProvider.class);

factory.setJpaVendorAdapter(new HibernateJpaVendorAdapter());

factory.setJpaProperties(additionalJpaProperties());

factory.setPersistenceUnitName("focPersistent");

factory.setPackagesToScan("cn.com.scal.qss.foc.domain");

factory.afterPropertiesSet();

return factory.getObject();

}

@Bean(name = "focTransactionManager")

@Qualifier("focTransactionManager")

public PlatformTransactionManager focTransactionManager(@Qualifier("focEntityManagerFactory") EntityManagerFactory focEntityManagerFactory) {

JpaTransactionManager transactionManager = new JpaTransactionManager();

transactionManager.setEntityManagerFactory(focEntityManagerFactory);

// JpaTransactionManager transactionManager = new JpaTransactionManager(focEntityManagerFactory);

return transactionManager;

}

public Properties additionalJpaProperties(){

Properties properties = new Properties();

// properties.setProperty("hibernate.hbm2ddl.auto", "update");

properties.setProperty("hibernate.dialect", "org.hibernate.dialect.Oracle10gDialect");

properties.setProperty("hibernate.show_sql", "true");

properties.setProperty("hibernate.format_sql", "true");

return properties;

}

}


6. finally it works!!!

注意事項(xiàng):

1循狰、每個(gè)數(shù)據(jù)源都必須要有自己的數(shù)據(jù)庫連接池配置,使用前綴區(qū)分券勺;

2绪钥、數(shù)據(jù)庫連接驗(yàn)證sql查詢語句validation-query區(qū)分?jǐn)?shù)據(jù)庫

#SELECT 1(MySQL) select 1 from dual(Oracle) SELECT 1(MySQL Server)。

3关炼、EntityManager不能配置在配置文件中(單例)程腹,不許要在使用的時(shí)候才創(chuàng)建,使用完成后關(guān)閉儒拂。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寸潦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子社痛,更是在濱河造成了極大的恐慌见转,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蒜哀,死亡現(xiàn)場離奇詭異斩箫,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門乘客,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赊抖,“玉大人,你說我怎么就攤上這事寨典》昭” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵耸成,是天一觀的道長报亩。 經(jīng)常有香客問我,道長井氢,這世上最難降的妖魔是什么弦追? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮花竞,結(jié)果婚禮上劲件,老公的妹妹穿的比我還像新娘。我一直安慰自己约急,他們只是感情好零远,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著厌蔽,像睡著了一般牵辣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上奴饮,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天纬向,我揣著相機(jī)與錄音,去河邊找鬼戴卜。 笑死逾条,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的投剥。 我是一名探鬼主播师脂,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼薇缅!你這毒婦竟也來了危彩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤泳桦,失蹤者是張志新(化名)和其女友劉穎汤徽,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體灸撰,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谒府,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年拼坎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片完疫。...
    茶點(diǎn)故事閱讀 38,064評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡泰鸡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出壳鹤,到底是詐尸還是另有隱情盛龄,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布芳誓,位于F島的核電站余舶,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏锹淌。R本人自食惡果不足惜匿值,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赂摆。 院中可真熱鬧挟憔,春花似錦、人聲如沸烟号。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽褥符。三九已至龙誊,卻和暖如春抚垃,著一層夾襖步出監(jiān)牢的瞬間喷楣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工鹤树, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铣焊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓罕伯,卻偏偏與公主長得像曲伊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子追他,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容