SpringCloud学习心得(八) Springboot与Mabatis集成——多数据源

复制第七节的项目,重命名为quartz-mybatis-multi

pom文件如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.wantceo.eurekaclienttest</groupId>
  <artifactId>ceo-eureka-client-test</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>ceo-eureka-client-test</name>
 
    <parent>
        <groupId>com.hotkidceo.parent</groupId>
        <artifactId>ceo-springcloud-parent</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>

    <dependencies>
        <!--eureka server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- SpringCloud配置启动器 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <!-- 访问数据库模块 -->
<!--         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency> -->
        <!-- MYSQL -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!-- 与数据库操作相关的依赖 -->
        <!-- Jdbc 模块 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.1</version>
        </dependency>
        <!-- druid 线程池模块 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.3</version>
        </dependency>
        <!-- quartz模块 -->
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz-jobs</artifactId>
            <version>2.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
        </dependency>
        <!-- spring boot test-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

配置文件application.yml:

#datasource config
jdbc:
  driverClassName: com.mysql.jdbc.Driver
  url: jdbc:mysql://127.0.0.1/bpm?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
  username: root
  password: 123
 
#datasource config2
jdbc2:
  driverClassName: com.mysql.jdbc.Driver
  url: jdbc:mysql://127.0.0.1/goods?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
  username: root
  password: 123
 
#mybatis config
mybatisbpm:
  typeAliasesPackage: com.hotkidceo.springcloud.domain.bpm
  mapperLocations: classpath:mapper/bpm/*.xml
 
#mybatis config
mybatisgoods:
  typeAliasesPackage: com.hotkidceo.springcloud.domain.goods
  mapperLocations: classpath:mapper/goods/*.xml  

这里要注意由于是多数据源,所以有两个datasource 和 两个 config ,后续会在配置类里面引入。

bootstrap.yml:

spring:
  application:
    name: ceo-eureka-client-test
 
server:
  port: 8644
 
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8601/eureka/

创建一个DataSourceConfig,这里注意@Primary注解,如果不加这个注解,后面会报错:

@Configuration
public class DataSourceConfig {
    
    @Autowired
    private Environment env;
    
    @Bean(name = "bpmDS")
    @Primary
    public DataSource dataSourceBPM(){        
        Properties props = new Properties();
        props.put("driverClass", env.getProperty("jdbc.driverClassName"));
        props.put("url", env.getProperty("jdbc.url"));
        props.put("username", env.getProperty("jdbc.username"));
        props.put("password", env.getProperty("jdbc.password"));
        try {
            return DruidDataSourceFactory.createDataSource(props);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return DataSourceBuilder.create().build();
    }
    
    @Bean(name = "goodsDS")
    public DataSource dataSourceGoods(){
        Properties props = new Properties();
        props.put("driverClass", env.getProperty("jdbc2.driverClassName"));
        props.put("url", env.getProperty("jdbc2.url"));
        props.put("username", env.getProperty("jdbc2.username"));
        props.put("password", env.getProperty("jdbc2.password"));
        try {
            return DruidDataSourceFactory.createDataSource(props);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return DataSourceBuilder.create().build();
    }    
}

这样我们就把两个数据源配好了,下面配置管理器

创建第一个数据源的管理器:

@Configuration
@MapperScan(basePackages = {"com.hotkidceo.springcloud.dao.bpm"},sqlSessionFactoryRef="sqlSessionFactoryBPM")
public class MybatisDBBPMConfig {
    @Autowired
    private Environment env;
    
    @Autowired
    @Qualifier("bpmDS")
    private DataSource bpm;
    
    @Bean
    @Primary
    public SqlSessionFactory sqlSessionFactoryBPM() throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(bpm);
        //下边两句仅仅用于*.xml文件,如果整个持久层操作不需要使用到xml文件的话(只用注解就可以搞定),则不加
        factoryBean.setTypeAliasesPackage(env.getProperty("mybatisbpm.typeAliasesPackage"));
        factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources( env.getProperty("mybatisbpm.mapperLocations")));
        return factoryBean.getObject();
    }


    
    @Bean
    @Primary
    public SqlSessionTemplate sqlSessionTemplateBPM() throws Exception {
        SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactoryBPM()); // 使用上面配置的Factory
        return template;
    }
}


创建第二个数据源的管理器

@Configuration
@MapperScan(basePackages = {"com.hotkidceo.springcloud.dao.goods"},sqlSessionFactoryRef="sqlSessionFactoryGoods")
public class MybatisDBGoodsConfig {
    @Autowired
    private Environment env;
    
    @Autowired
    @Qualifier("goodsDS")
    private DataSource goodsDS;
    
    @Bean
    public SqlSessionFactory sqlSessionFactoryGoods() throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(goodsDS);
        //下边两句仅仅用于*.xml文件,如果整个持久层操作不需要使用到xml文件的话(只用注解就可以搞定),则不加
        factoryBean.setTypeAliasesPackage(env.getProperty("mybatisgoods.typeAliasesPackage"));
        factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources( env.getProperty("mybatisgoods.mapperLocations")));
        return factoryBean.getObject();
    }
    
    @Bean
    public SqlSessionTemplate sqlSessionTemplateBPM() throws Exception {
        SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactoryGoods()); // 使用上面配置的Factory
        return template;
    }
}

上述配置的主要是针对不同的数据源配置了不同的实体类 和 XXX.xml路径,这样调用不同的mapper方法时,会根据路径来选择

SqlSessionTemplate。

下面就是创建DO、DAO、和sql了,这里就省略,大家可以去我的git上下载源码。

https://gitee.com/EricLoveMia/eureka-client-test-quartz-mybatis-muti.git

猜你喜欢

转载自blog.csdn.net/money9sun/article/details/81218391