复制第七节的项目,重命名为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