国产睡熟迷奷白丝护士系列精品,中文色字幕网站,免费h网站在线观看的,亚洲开心激情在线

      <sup id="hb9fh"></sup>
          1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

            手機(jī)站
            千鋒教育

            千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

            千鋒教育

            掃一掃進(jìn)入千鋒手機(jī)站

            領(lǐng)取全套視頻
            千鋒教育

            關(guān)注千鋒學(xué)習(xí)站小程序
            隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

            當(dāng)前位置:首頁(yè)  >  千鋒問(wèn)答  > mybatisplus快速實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)源切換
            mybatisplus快速實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)源切換
            mybatisplus 匿名提問(wèn)者 2023-06-29 09:48:00

            mybatisplus快速實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)源切換

            推薦答案

              在 MyBatis-Plus 中實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)源切換可以通過(guò)以下步驟進(jìn)行快速實(shí)現(xiàn):

              1. 添加依賴:在項(xiàng)目的構(gòu)建文件(如 Maven 的 pom.xml)中添加 MyBatis-Plus 的依賴項(xiàng)。

                com.baomidou
                mybatis-plus-boot-starter
                最新版本

               2. 配置數(shù)據(jù)源:在項(xiàng)目的配置文件中配置多個(gè)數(shù)據(jù)源??梢允褂貌煌臄?shù)據(jù)庫(kù)連接信息來(lái)配置不同的數(shù)據(jù)源。

            spring:
              datasource:
                dynamic:
                  primary: datasource1  # 指定默認(rèn)的主數(shù)據(jù)源
                  datasource:
                    datasource1:
                      url: jdbc:mysql://localhost:3306/db1
                      username: root
                      password: password1
                    datasource2:
                      url: jdbc:mysql://localhost:3306/db2
                      username: root
                      password: password2

               3. 創(chuàng)建數(shù)據(jù)源切換器:自定義一個(gè)數(shù)據(jù)源切換器,實(shí)現(xiàn) `AbstractRoutingDataSource` 接口,并重寫 `determineCurrentLookupKey` 方法,根據(jù)業(yè)務(wù)邏輯返回要使用的數(shù)據(jù)源的名稱。

            import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
            public class DynamicDataSource extends AbstractRoutingDataSource {
                @Override
                protected Object determineCurrentLookupKey() {
                    // 根據(jù)業(yè)務(wù)邏輯返回?cái)?shù)據(jù)源的名稱
                    return DataSourceContextHolder.getDataSource();
                }
            }

               4. 創(chuàng)建數(shù)據(jù)源上下文持有器:創(chuàng)建一個(gè)數(shù)據(jù)源上下文持有器類,用于存儲(chǔ)當(dāng)前線程使用的數(shù)據(jù)源名稱??梢允褂?`ThreadLocal` 來(lái)實(shí)現(xiàn)線程級(jí)別的數(shù)據(jù)源切換。

            public class DataSourceContextHolder {
                private static final ThreadLocal contextHolder = new ThreadLocal<>();
                public static void setDataSource(String dataSourceName) {
                    contextHolder.set(dataSourceName);
                }
                public static String getDataSource() {
                    return contextHolder.get();
                }
                public static void clearDataSource() {
                    contextHolder.remove();
                }
            }

               5. 配置數(shù)據(jù)源切換:在 Spring 的配置文件中配置數(shù)據(jù)源切換器和數(shù)據(jù)源上下文持有器。

            @Configuration
            public class DataSourceConfig {
                @Bean
                @ConfigurationProperties("spring.datasource")
                public DataSource dataSource() {
                    return new DynamicDataSource();
                }
                @Bean
                public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
                    MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
                    sessionFactory.setDataSource(dataSource);
                    // 配置其他 MyBatis 相關(guān)設(shè)置
                    return sessionFactory.getObject();
                }
                @Bean
                public PlatformTransactionManager transactionManager(DataSource dataSource) {
                    return new DataSourceTransactionManager(dataSource);
                }
            }

               6. 使用注解切換數(shù)據(jù)源:在需要切換數(shù)據(jù)源的地方使用 `@DS` 注解指定要使用的數(shù)據(jù)源。

            @Service
            public class UserServiceImpl implements UserService {
                @Autowired
                private UserMapper userMapper;
                @Override
                @DS("
            datasource1")
             // 指定使用 datasource1 數(shù)據(jù)源
                public List getUsers() {
                    return userMapper.selectList(null);
                }
                @Override
                @DS("datasource2") // 指定使用 datasource2 數(shù)據(jù)源
                public void addUser(User user) {
                    userMapper.insert(user);
                }
            }