国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

解鎖無限可能:使用SpringBoot和MyBatis打造動態數據源

數據庫 其他數據庫
今天分享一個 利用SpringBoot和Mybatis實現動態加載數據源的過程,可以達到服務不停機遷移數據源的目的。

今天分享一個利用SpringBoot和Mybatis實現動態加載數據源的過程,可以達到服務不停機遷移數據源的目的,廢話不多說直接上代碼。

首先 你需要在application.properties或application.yml文件中配置一個數據源的連接信息-用于存儲配置信息,類似于以下示例:
# 主數據源配置
spring.datasource.url=jdbc:mysql://localhost:3306/test_test 
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
接下來,創建一個DataSourceDynamicConfig類來配置多個數據源
@Configuration
@ConditionalOnClass(value = {DataSource.class})
public class DataSourceDynamicConfig {

    String DEFAULT = "default";



    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean("defaultDataSource")
    public DataSource setDefault(){
        return DataSourceBuilder.create()
                .type(DruidDataSource.class).build();
    }

    @Bean
    public DynamicDataSource dynamicDataSource(@Qualifier("defaultDataSource") DataSource defaultDataSource) {
        Map<Object, Object> targetDataSources = new HashMap<>();
        targetDataSources.put(DEFAULT, defaultDataSource);


        DynamicDataSource dataSource = new DynamicDataSource();
        dataSource.setDataSources(targetDataSources);
        dataSource.setDefaultTargetDataSource(defaultDataSource);
        DataSourceContextHolder.setDataSourceName(DEFAULT);
        return dataSource;
    }


    @Bean
    public SqlSessionFactory sqlSessionFactory(DynamicDataSource dataSource) throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(dataSource);
        factoryBean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
        return factoryBean.getObject();
    }

    @Bean
    public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}

在上述代碼中,我們使用@ConfigurationProperties注解將不同數據源的配置注入到DataSource實例中。然后,我們創建一個DynamicDataSource實例。我們使用targetDataSources屬性來存儲所有數據源,每個數據源都有一個標識符。defaultTargetDataSource屬性指定默認的數據源。

接下來,我們需要創建一個DynamicDataSource類來實現動態切換數據源。以下是一個簡化的示例:
public class DynamicDataSource extends AbstractRoutingDataSource {

	// 存儲所有數據源
    private static Map<Object, Object> dataSources = new HashMap<>();


    public void setDataSources(Map<Object, Object> sources){
        this.setTargetDataSources(sources);
        dataSources = sources;
    }

	
    @Override
    protected Object determineCurrentLookupKey() {
        return DataSourceContextHolder.getDataSourceName();
    }


	// 動態添加數據源
    public static void setDataSource(String key,DataSource dataSource){
        dataSources.putIfAbsent(key,dataSource);
    }

    protected DataSource determineTargetDataSource() {
        String dataSourceName = determineCurrentLookupKey().toString();
        DataSource dataSource = (DataSource) dataSources.get(dataSourceName);
        if (dataSource == null) {
            throw new IllegalStateException("DataSource '" + dataSourceName + "' is not configured");
        }
        return dataSource;
    }

}
//存儲當前線程數據源
public class DataSourceContextHolder {

    private static final ThreadLocal<String> CONTEXT_HOLDER = new ThreadLocal<>();

    public static void setDataSourceName(String name){
        CONTEXT_HOLDER.set(name);
    }

    public static String getDataSourceName(){
        return CONTEXT_HOLDER.get();
    }

    public static void clearDataSourceName(){
        CONTEXT_HOLDER.remove();
    }

}
添加一個數據實體,用于接收動態數據源。
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DataSourceEntity {

    String url;

    String userName;

    String pwd;

    String driverClassName;
}
接下來構造點模擬數據。

準備數據測試數據表語句。

create database test_test;
CREATE TABLE `t_t` (
  `id` int DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='test'

插入兩個數據庫測試數據。

## test_test
INSERT INTO test_test.t_t
(id, name)
VALUES(1, 'test_test');
## full_dev
INSERT INTO test_test.t_t
(id, name)
VALUES(1, 'full_dev');

創建一個查詢TestMapper類。

@Mapper
public interface TestMapper {


    @Select("select * from t_t")
    Map<String,Object> selectMap();
}

創建SpringBoot Main函數。

@SpringBootApplication
@MapperScan(basePackages = {"com.xlc.common.datasource.mapper.test"})
public class Main {
    public static void main(String[] args) {
        SpringApplication.run(Main.class,args);
    }
}
最后 單元測試。
@SpringBootTest(classes = Main.class)
@RunWith(SpringRunner.class)
public class TestApp {

    String userName = "root";

    String pwd = "root";

    String url = "jdbc:mysql://192.168.15.130:32691/test_test?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false";

    String driver = "com.mysql.cj.jdbc.Driver";


    @Resource
    TestMapper testMapper;


    @Before
    public void before(){
      DataSource dataSource =  DataSourceBuilder.create()
                .url(url)
                .username(userName)
                .password(pwd)
                .driverClassName(driver)
                .build();
        DynamicDataSource.setDataSource("hhh",dataSource);

    }

    @Test
    public void t2(){
        System.out.println(JSONUtil.toJsonStr(testMapper.selectMap()));
        DataSourceContextHolder.setDataSourceName("hhh");
        System.out.println(JSONUtil.toJsonStr(testMapper.selectMap()));

    }
}

運行結果:

責任編輯:姜華 來源: 今日頭條
相關推薦

2023-01-04 09:33:31

SpringBootMybatis

2023-06-07 08:08:37

MybatisSpringBoot

2025-12-12 07:35:19

SpringBoot業務系統數據庫

2025-11-26 01:25:00

數據源系統分庫分表

2024-01-10 08:14:10

Java反射工具

2024-10-30 10:22:17

2024-09-05 15:48:21

2025-01-09 11:21:25

2020-12-31 07:55:33

spring bootMybatis數據庫

2023-09-07 08:39:39

copy屬性數據源

2025-08-26 01:15:00

Spring項目數據源

2024-03-18 08:33:16

2023-12-13 12:20:36

SpringMySQL數據源

2025-10-22 14:35:27

AI模型開源

2014-11-20 09:47:06

Java

2020-06-02 07:55:31

SpringBoot多數據源

2021-03-10 19:01:02

SQL數據源

2024-05-20 00:00:00

2011-07-13 15:32:38

ODBC數據庫驅動程序系統DSN
點贊
收藏

51CTO技術棧公眾號

男女啪啪免费观看| 国产对白国语对白| 国产95亚洲| 欧美精品一卡两卡| 国产性生交xxxxx免费| 视频在线观看91| 国产精品成熟老女人| 777午夜精品电影免费看| 色综合久久88色综合天天| www亚洲成人| 成人免费福利片| 五月天亚洲综合小说网| 国产精品精品| 国产精品成人在线| 97一区二区国产好的精华液| 日韩国产在线播放| 黄色在线论坛| 在线看不卡av| 簧片在线观看| 亚洲色图视频网| 91淫黄看大片| 久久理论电影网| 国内自拍在线观看| 成人黄色小视频在线观看| 在线观看成人一级片| 久久亚洲视频| 欧美激情第六页| 亚洲深夜激情| 久久精品国产综合精品| 亚洲看片一区| 精品在线不卡| 国产精品一二| 任我爽在线视频精品一| 久久精品一本| 亚洲国产高清国产精品| 日韩avvvv在线播放| 亚洲人成人77777线观看| 奇米一区二区三区| 亚洲成人蜜桃| 麻豆91精品91久久久的内涵| 午夜精品美女久久久久av福利| 日本视频在线一区| 国产精品啪啪啪视频| 国产成人av资源| 日韩 欧美 高清| 亚洲婷婷国产精品电影人久久| 成人黄网18免费观看的网站| 一区二区三区免费| 免费a在线观看| 日韩一区二区三区高清免费看看| 亚洲一区免费在线观看| 无遮挡又爽又刺激的视频| 久久日韩粉嫩一区二区三区 | 日韩欧美在线网站| 婷婷丁香在线| 亚洲天堂av高清| 精品三级久久久| 2019亚洲日韩新视频| 欧美一级淫片| 久久99精品久久久久久三级 | 欧美午夜xxx| yiren22综合网成人| 日韩午夜电影av| 免费高清视频在线一区| 欧美肥老妇视频| 波多野结衣在线观看一区二区 | 亚洲视频在线观看三级| 成人网免费看| 欧美视频不卡中文| 国产后进白嫩翘臀在线观看视频 | 亚洲一区二区三区四区五区午夜| 日韩尤物视频| 99精品视频在线播放观看| 8x8x视频在线| 91精品国产美女浴室洗澡无遮挡| 玛雅亚洲电影| 国产成人精品免高潮在线观看| 欧美黄色一级视频| 91黄色在线看| 夜间精品视频| 日韩精品电影网站| 久久久国产精华| 国产午夜在线观看| 国产亚洲欧美日韩美女| 成人精品天堂一区二区三区| 亚洲二区自拍| 综合电影一区二区三区 | 色婷婷综合久色| 久久电影tv| 国产精品久久久久久一区二区| 亚洲尤物影院| 乱小说综合网站| 日韩精品一区二| 欧美猛男男男激情videos| 日韩亚洲不卡在线| 一区二区在线观看视频| av在线私库| 成人欧美一区二区三区黑人孕妇| 国产精品69久久久久水密桃| 日韩影院免费视频| 国产黄色高清在线| 久久亚洲精品视频| 青青一区二区三区| 最近中文字幕免费mv| 在线观看国产高清视频| 中文成人av在线| 神马午夜dy888| 成人9ⅰ免费影视网站| 在线综合亚洲| 97久久国产亚洲精品超碰热| 欧美一区=区| 在线观看av网站永久| 亚洲成人免费网站| 手机在线电影一区| av网站在线免费观看| 国产日韩专区在线| 亚洲久草在线视频| 日韩在线视频网站| 国产精品igao视频网网址不卡日韩| 欧美一区三区四区| 亚洲男人天堂| 亚洲欧美国产77777| 99久久综合狠狠综合久久止| 欧美色图一区| 欧日韩免费视频| 欧美精品日韩精品| 你懂的在线网址| 羞羞视频网站在线观看| 最好看的2019的中文字幕视频| 激情一区二区| 超碰在线电影| 一级毛片视频| 欧美精品日韩三级| 久久综合综合久久综合| 精品久久av| 国产精品视频xxx| 成人欧美一区二区三区黑人麻豆| 成人毛片免费| 国产盗摄视频在线观看| 欧美一区二区在线观看| 午夜精品久久久久99热蜜桃导演 | 国产欧美一区二区精品性色| 国产美女高潮在线观看| 97久草视频| 欧美性猛交xxxx免费看漫画| 少妇精品久久久一区二区| 亚洲四虎av| 69视频在线播放| 中文字幕av一区二区三区| 亚洲啊v在线免费视频| 免费日韩视频在线观看| 大量国产精品视频| 国产色产综合产在线视频| 欧美久久一区二区三区| 日本老熟妇毛茸茸| 韩国美女主播一区| 亚洲理论在线观看| 国产高清一区二区| 激情小视频在线| 国产一区在线免费观看| 欧美亚洲综合一区| 亚洲韩日在线| 四虎影视国产在线视频| 亚洲午夜激情| 在线视频日本亚洲性| 91在线国产福利| 九九热播视频在线精品6| 日本中文视频| 成人高清在线观看| 欧美电影精品一区二区| 国产乱码精品一区二区三区忘忧草 | 亚洲7777| 亚洲欧美日韩精品久久亚洲区| 99久久久国产精品免费蜜臀| 欧美成人精品午夜一区二区| 1069男同网址| 亚洲最大福利视频网| 日韩视频在线观看一区二区| 蜜乳av一区二区| 日韩黄色碟片| 狠狠干夜夜操| 国产精品久久精品国产| 亚洲国产精品成人av| 99国产欧美久久久精品| 伊人成综合网yiren22| 日韩av视屏| 日韩电影免费观看在| 亚洲视频999| 国产精品私人自拍| 欧美区日韩区| 色婷婷综合久久久中字幕精品久久| 北条麻妃在线一区| 成人国产精品日本在线| 日韩精品综合一本久道在线视频| 成av人片一区二区| 日韩国产欧美| 成人免费网站视频| 国产美女在线播放| 最新不卡av| 国产精品一区av|