springboot+springJdbc+postgresql 實(shí)現(xiàn)多數(shù)據(jù)源的配置
背景
最近公司在服務(wù)拆遷,接口轉(zhuǎn)移,相同的功能接口到要遷移到對(duì)應(yīng)的服務(wù)中,因?yàn)闀r(shí)間比較趕,別問為什么沒給時(shí)間,沒人,沒資源,但是活還是得干的,為了減少工作量和穩(wěn)妥的需要分兩步走
- 先遷移相關(guān)代碼,保證包的路徑不變,請(qǐng)求接口的路徑不變
- 將遷移的相關(guān)代碼進(jìn)行遷表遷庫(這目前還沒做,計(jì)劃9月實(shí)施)
實(shí)施
配置文件

數(shù)據(jù)庫配置相關(guān)類
import com.alibaba.druid.pool.DruidDataSource;
import java.io.Serializable;
import java.sql.SQLException;
public class JdbcConfig implements Serializable {
public JdbcConfig() {
super();
// TODO Auto-generated constructor stub
}
public boolean isDecrypt() {
return decrypt;
}
public void setDecrypt(boolean decrypt) {
this.decrypt = decrypt;
}
public String getDriverClass() {
return driverClass;
}
public void setDriverClass(String driverClass) {
this.driverClass = driverClass;
}
public String getTerminalUrl() { return terminalUrl; }
public void setTerminalUrl(String terminalUrl) { this.terminalUrl = terminalUrl; }
public String getSlaveurl() {
return slaveurl;
}
public void setSlaveurl(String slaveurl) {
this.slaveurl = slaveurl;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getInitialSize() {
return initialSize;
}
public void setInitialSize(int initialSize) {
this.initialSize = initialSize;
}
public int getMinIdle() {
return minIdle;
}
public void setMinIdle(int minIdle) {
this.minIdle = minIdle;
}
public int getMaxActive() {
return maxActive;
}
public void setMaxActive(int maxActive) {
this.maxActive = maxActive;
}
private boolean decrypt;
private String driverClass;
private String terminalUrl;
private String slaveurl;
private String username;
private String password;
private int initialSize;
private int minIdle;
private int maxActive;
public DruidDataSource mainds() throws SQLException {
DruidDataSource ds = ds();
ds.setUrl(terminalUrl);
return ds;
}
public DruidDataSource slaveds() throws SQLException {
DruidDataSource ds = ds();
ds.setUrl(slaveurl);
return ds;
}
private DruidDataSource ds() throws SQLException {
DruidDataSource ds = new DruidDataSource();
ds.setUrl(terminalUrl);
ds.setUsername(username);
ds.setPassword(password);
ds.setFilters("config");
ds.setConnectionProperties("config.decrypt=" + decrypt);
ds.setInitialSize(initialSize);
ds.setMaxActive(maxActive);
ds.setTimeBetweenEvictionRunsMillis(60000);
ds.setMinEvictableIdleTimeMillis(300000);
ds.setValidationQuery("select 'X'");
ds.setTestWhileIdle(true);
ds.setTestOnBorrow(false);
ds.setTestOnReturn(false);
System.out.println("terminalUrl: " + terminalUrl);
return ds;
}
}
相關(guān)配置
@Bean
@ConfigurationProperties(prefix = "jdbc")
public JdbcConfig jdbcConfig() {
return new JdbcConfig();
}
@Bean
@ConfigurationProperties(prefix = "business.jdbc")
public JdbcConfig businessJdbcConfig() {
return new JdbcConfig();
}
@Bean(initMethod = "init", destroyMethod = "close")
public DruidDataSource businessDataSource() throws SQLException {
return businessJdbcConfig().mainds();
}
@Bean(initMethod = "init", destroyMethod = "close")
public DruidDataSource masterDataSource() throws SQLException {
return jdbcConfig().mainds();
}
@Bean("jdbctemplate")
public JdbcTemplate jdbcTemplate() throws SQLException {
JdbcTemplate t = new JdbcTemplate();
t.setDataSource(masterDataSource());
return t;
}
@Bean("businessJdbctemplate")
public JdbcTemplate businessjdbcTemplate() throws SQLException {
JdbcTemplate t = new JdbcTemplate();
t.setDataSource(businessDataSource());
return t;
}
使用
@Bean
public RobotDataDao robotDataDao() throws SQLException {
RobotDataDao dao = new RobotDataDao();
dao.setJdbcTemplate(jdbcTemplate());
dao.setTableName("t_business_robot_data");
dao.setPrimaryKey("id");
dao.setSeqName("seq_t_business");
return dao;
}
@Bean
public VDeviceDao vdeviceDao() throws SQLException {
VDeviceDao dao = new VDeviceDao();
dao.setJdbcTemplate(businessjdbcTemplate());
dao.setTableName("t_device");
dao.setPrimaryKey("id");
dao.setSeqName("seq_t_default");
return dao;
}
特別注意的,一定要配置的,因?yàn)楝F(xiàn)在有多數(shù)據(jù)源了就要配置對(duì)應(yīng)的事務(wù)配置,單個(gè)默認(rèn)的,多個(gè)就要指定
@Configuration
public class TransactionConfig {
@Bean
public PlatformTransactionManager bfscrmTransactionManager(@Qualifier("masterDataSource") DataSource masterDataSource) {
return new DataSourceTransactionManager(masterDataSource);
}
}
這就配置好了多個(gè)數(shù)據(jù)源了
到此這篇關(guān)于springboot+springJdbc+postgresql 實(shí)現(xiàn)多數(shù)據(jù)源的配置的文章就介紹到這了,更多相關(guān)springboot+springJdbc+postgresql多數(shù)據(jù)源內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- spring boot使用sharding jdbc的配置方式
- 詳解springboot采用多數(shù)據(jù)源對(duì)JdbcTemplate配置的方法
- springboot2.0.0配置多數(shù)據(jù)源出現(xiàn)jdbcUrl is required with driverClassName的錯(cuò)誤
- SpringBoot多數(shù)據(jù)源配置詳細(xì)教程(JdbcTemplate、mybatis)
- 詳解Springboot之整合JDBCTemplate配置多數(shù)據(jù)源
- springboot實(shí)現(xiàn)以代碼的方式配置sharding-jdbc水平分表
- SpringBoot3+ShardingJDBC5.5.0 讀寫分離配置的實(shí)現(xiàn)
- SpringBoot?配置多個(gè)JdbcTemplate的實(shí)現(xiàn)步驟
- SpringBoot+MybatisPlus+jdbc連接池配置多數(shù)據(jù)源的實(shí)現(xiàn)
- Spring?JDBC配置與使用的實(shí)現(xiàn)
相關(guān)文章
關(guān)于mybatis的一級(jí)緩存和二級(jí)緩存的那些事兒
MyBatis自帶的緩存有一級(jí)緩存和二級(jí)緩存,今天我們就來學(xué)習(xí)一下,文中有非常詳細(xì)的總結(jié),對(duì)正在學(xué)習(xí)的小伙伴們很有幫助,需要的朋友可以參考下2021-06-06
WebSocket獲取httpSession空指針異常的解決辦法
這篇文章主要介紹了在使用WebSocket實(shí)現(xiàn)p2p或一對(duì)多聊天功能時(shí),如何獲取HttpSession來獲取用戶信息,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2025-01-01
Java使用抽象工廠模式實(shí)現(xiàn)的肯德基消費(fèi)案例詳解
這篇文章主要介紹了Java使用抽象工廠模式實(shí)現(xiàn)的肯德基消費(fèi)案例,較為詳細(xì)的分析了抽象工廠模式的定義、原理并結(jié)合實(shí)例形式分析了Java使用抽象工廠模式實(shí)現(xiàn)肯德基消費(fèi)案例的步驟與相關(guān)操作技巧,需要的朋友可以參考下2018-05-05
Spring中事務(wù)管理的四種方法(銀行轉(zhuǎn)賬為例)
這篇文章主要給大家介紹了關(guān)于Spring中事務(wù)管理的四種方法,文中是以銀行轉(zhuǎn)賬為例,通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05

