springboot+springJdbc+postgresql 實現(xiàn)多數(shù)據(jù)源的配置
背景
最近公司在服務(wù)拆遷,接口轉(zhuǎn)移,相同的功能接口到要遷移到對應(yīng)的服務(wù)中,因為時間比較趕,別問為什么沒給時間,沒人,沒資源,但是活還是得干的,為了減少工作量和穩(wěn)妥的需要分兩步走
- 先遷移相關(guān)代碼,保證包的路徑不變,請求接口的路徑不變
- 將遷移的相關(guān)代碼進(jìn)行遷表遷庫(這目前還沒做,計劃9月實施)
實施
配置文件
數(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; }
特別注意的,一定要配置的,因為現(xiàn)在有多數(shù)據(jù)源了就要配置對應(yīng)的事務(wù)配置,單個默認(rèn)的,多個就要指定
@Configuration public class TransactionConfig { @Bean public PlatformTransactionManager bfscrmTransactionManager(@Qualifier("masterDataSource") DataSource masterDataSource) { return new DataSourceTransactionManager(masterDataSource); } }
這就配置好了多個數(shù)據(jù)源了
到此這篇關(guān)于springboot+springJdbc+postgresql 實現(xiàn)多數(shù)據(jù)源的配置的文章就介紹到這了,更多相關(guān)springboot+springJdbc+postgresql多數(shù)據(jù)源內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- spring boot使用sharding jdbc的配置方式
- 詳解springboot采用多數(shù)據(jù)源對JdbcTemplate配置的方法
- springboot2.0.0配置多數(shù)據(jù)源出現(xiàn)jdbcUrl is required with driverClassName的錯誤
- SpringBoot多數(shù)據(jù)源配置詳細(xì)教程(JdbcTemplate、mybatis)
- 詳解Springboot之整合JDBCTemplate配置多數(shù)據(jù)源
- springboot實現(xiàn)以代碼的方式配置sharding-jdbc水平分表
- SpringBoot3+ShardingJDBC5.5.0 讀寫分離配置的實現(xiàn)
- SpringBoot?配置多個JdbcTemplate的實現(xiàn)步驟
- SpringBoot+MybatisPlus+jdbc連接池配置多數(shù)據(jù)源的實現(xiàn)
- Spring?JDBC配置與使用的實現(xiàn)
相關(guān)文章
關(guān)于mybatis的一級緩存和二級緩存的那些事兒
MyBatis自帶的緩存有一級緩存和二級緩存,今天我們就來學(xué)習(xí)一下,文中有非常詳細(xì)的總結(jié),對正在學(xué)習(xí)的小伙伴們很有幫助,需要的朋友可以參考下2021-06-06WebSocket獲取httpSession空指針異常的解決辦法
這篇文章主要介紹了在使用WebSocket實現(xiàn)p2p或一對多聊天功能時,如何獲取HttpSession來獲取用戶信息,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2025-01-01Java使用抽象工廠模式實現(xiàn)的肯德基消費(fèi)案例詳解
這篇文章主要介紹了Java使用抽象工廠模式實現(xiàn)的肯德基消費(fèi)案例,較為詳細(xì)的分析了抽象工廠模式的定義、原理并結(jié)合實例形式分析了Java使用抽象工廠模式實現(xiàn)肯德基消費(fèi)案例的步驟與相關(guān)操作技巧,需要的朋友可以參考下2018-05-05Spring中事務(wù)管理的四種方法(銀行轉(zhuǎn)賬為例)
這篇文章主要給大家介紹了關(guān)于Spring中事務(wù)管理的四種方法,文中是以銀行轉(zhuǎn)賬為例,通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05