Java框架:Spring Boot :配置多數據源

  • 1.數據源掃描的mapper路徑要對應:分包配置,兩種包格式

  • 2.數據源讀取對應的配置名稱要對應

  • 3.主配置數據源和主事務一定加 @Priamry 

目錄結構:分包配置

                                     


步驟:

  • 1.創建兩個/多個數據庫
  • 2.resources/application.properties 配置多個數據源配置
  • #數據源配置
    #數據源1  主數據源
    spring.datasource.sbtest1.driverClassName=com.mysql.jdbc.Driver
    spring.datasource.sbtest1.url=jdbc:mysql://localhost:3306/sbtest1?useUnicode=true&characterEncoding=utf-8
    spring.datasource.sbtest1.username=root
    spring.datasource.sbtest1.password=root
    
    #數據源2
    spring.datasource.sbtest2.driverClassName=com.mysql.jdbc.Driver
    spring.datasource.sbtest2.url=jdbc:mysql://localhost:3306/sbtest2?useUnicode=true&characterEncoding=utf-8
    spring.datasource.sbtest2.username=root
    spring.datasource.sbtest2.password=root
  • 3.主數據源 datasource/DataSource01.class
    //註解到springboot容器中
    @Configuration
    
    //對應目錄結構1
    @MapperScan(basePackages = "com.zjc.sbtest1.mapper", sqlSessionFactoryRef = "sbtest1SqlSessionFactory")
    
    //對應目錄結構2
    //@MapperScan(basePackages = "com.zjc.mapper.sbtest1", sqlSessionFactoryRef = "sbtest1SqlSessionFactory")
    public class DataSource01 {
    
        //獲取sbtest1數據庫的數據源
        @Bean(name = "sbtest1DataSource")
        @Primary  //主數據源
    	//prefix前綴名和application.properties中對應的數據源一樣
        @ConfigurationProperties(prefix = "spring.datasource.sbtest1")
        public DataSource dateSource() {
            return DataSourceBuilder.create().build();
        }
    
        //返回sbtest1數據庫的會話工廠
        @Bean(name = "sbtest1SqlSessionFactory")
        public SqlSessionFactory sqlSessionFactory(@Qualifier("sbtest1DataSource") DataSource ds) throws Exception {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(ds);
            return bean.getObject();
        }
    
        //返回sbtest1數據庫的事務
        @Bean(name = "sbtest1TransactionManager")
        @Primary  //主事務
        public DataSourceTransactionManager transactionManager(@Qualifier("sbtest1DataSource") DataSource dataSource) {
            return new DataSourceTransactionManager(dataSource);
        }
    
        //返回sbtest1數據庫的會話模版
        @Bean(name = "sbtest1SqlSessionTemplate")
        public SqlSessionTemplate sqlSessionTemplate(
                @Qualifier("sbtest1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
            return new SqlSessionTemplate(sqlSessionFactory);
        }
    }
  • 3.配置其他數據源DataSource02.class

  •  一個應用只能有一個主數據源和主事務,可以有多個非主數據源和事務。只在主數據源中寫兩個@priamary,其它數據源和事務不能寫
  • //註解到springboot容器中
    @Configuration
    
    //對應目錄結構1
    
    @MapperScan(basePackages = "com.zjc.sbtest2.mapper", sqlSessionFactoryRef = "sbtest2SqlSessionFactory")
    //對應目錄結構2
    //@MapperScan(basePackages = "com.zjc.mapper.sbtest2", sqlSessionFactoryRef = "sbtest2SqlSessionFactory")
    public class DataSource02 {
    
        //返回sbtest2數據庫的數據源
        @Bean(name = "sbtest2DataSource")
        @ConfigurationProperties(prefix = "spring.datasource.sbtest2")
        public DataSource dateSource() {
            return DataSourceBuilder.create().build();
        }
    
        //返回sbtest2數據庫的會話工廠
        @Bean(name = "sbtest2SqlSessionFactory")
        public SqlSessionFactory sqlSessionFactory(@Qualifier("sbtest2DataSource") DataSource ds) throws Exception {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(ds);
            return bean.getObject();
        }
    
        //返回sbtest2數據庫的事務
        @Bean(name = "sbtest2TransactionManager")
        public DataSourceTransactionManager transactionManager(@Qualifier("sbtest2DataSource") DataSource dataSource) {
            return new DataSourceTransactionManager(dataSource);
        }
    
        //返回sbtest2數據庫的會話模版
        @Bean(name = "sbtest2SqlSessionTemplate")
        public SqlSessionTemplate sqlSessionTemplate(
                @Qualifier("sbtest2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
            return new SqlSessionTemplate(sqlSessionFactory);
        }
    }
  • 4.App.class
  • //根據目錄結構選擇掃描路徑
    @EnableAutoConfiguration
    //@MapperScan(basePackages = "com.zjc.mapper")
    @ComponentScan(basePackages = {"com.zjc.web", "com.zjc.sbtest1","com.zjc.sbtest2","com.zjc.datasource"})
    //@ComponentScan(basePackages = {"com.zjc.web", "com.zjc.service","com.zjc.datasource"})
    public class App {
        public static void main(String[] args) {
            SpringApplication.run(App.class, args);
        }
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章