存在比较大的项目,一个数据库,不满足需求,需要多个数据库来满足需求,那么就需要在一个项目里面配置多个数据库。
在一个项目中,配置连接多个mysql,是通过myabtis-plus来解决的。
首先导入mybatis和mybatis的依赖。
<!-- orm使用mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<!-- 使用tk增强mybatis的单表操作的便利性 -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>4.1.5</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatisplus-spring-boot-starter</artifactId>
<version>1.0.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>2.1.2</version>
</dependency>
然后在yml文件中,配置mysql的连接条件。
在这里我配置了两个连接mysql的信息。
#数据库配置
spring:
datasource:
db:
# url: jdbc:mysql://${server_inner_ip}:3306/data_catalog?useUnicode=true&useSSL=false&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8
jdbc-url: jdbc:mysql://${server_inner_ip}:3308/data_catalog?useUnicode=true&useSSL=false&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8
# username: root
username: dba
# password: root
password: dba1234!
driver-class-name: com.mysql.cj.jdbc.Driver
dmc:
# url: jdbc:mysql://${server_inner_ip}:3306/data_catalog?useUnicode=true&useSSL=false&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8
jdbc-url: jdbc:mysql://${server_inner_ip}:3308/data_catalog?useUnicode=true&useSSL=false&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8
# username: root
username: dba
# password: root
password: dba1234!
driver-class-name: com.mysql.cj.jdbc.Driver
注意:因为我们使用mybatis-plus来配置多个数据源。这里的mysql url为:jdbc-url,如果是单个的数据源,只用mybatis的话,就是url。
然后写配置类,配置具体的多个数据源。
数据源1的配置方法为:
@Configuration
// 配置mybatis的接口类放的地方
@MapperScan(basePackages = "com.catalog.mapper.db", sqlSessionFactoryRef = "userSqlSessionFactory")
public class DataCenterDB1Config {
// 将这个对象放入Spring容器中
@Bean(name = "userDataSource")
// 表示这个数据源是默认数据源
@Primary
// 读取application.properties中的配置参数映射成为一个对象
// prefix表示参数的前缀
@ConfigurationProperties(prefix = "spring.datasource.db")
public DataSource getDataCenterDateSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "userSqlSessionFactory")
// 表示这个数据源是默认数据源
@Primary
// @Qualifier表示查找Spring容器中名字为test1DataSource的对象
public SqlSessionFactory dataCenterSqlSessionFactory(@Qualifier("userDataSource") DataSource datasource)
throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
bean.setDataSource(datasource);
// bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
bean.setMapperLocations(
// 设置mybatis的xml所在位置
new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/db/*.xml"));
return bean.getObject();
}
@Bean("userSqlSessionTemplate")
// 表示这个数据源是默认数据源
@Primary
public SqlSessionTemplate dataCenterSqlsessiontemplate(
@Qualifier("userSqlSessionFactory") SqlSessionFactory sessionfactory) {
return new SqlSessionTemplate(sessionfactory);
}
}
数据源2的配置方法:
@EnableTransactionManagement
@Configuration
@MapperScan(basePackages = {"com.catalog.mapper.dmc"}, sqlSessionFactoryRef = "dataSqlSessionFactory")
public class DataCenterDB2Config {
// 将这个对象放入Spring容器中
@Bean(name = "dataDataSource")
// 表示这个数据源是默认数据源
// 读取application.properties中的配置参数映射成为一个对象
// prefix表示参数的前缀
@ConfigurationProperties(prefix = "spring.datasource.dmc")
public DataSource getDataCenterDateSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "dataSqlSessionFactory")
// 表示这个数据源是默认数据源
// @Qualifier表示查找Spring容器中名字为test1DataSource的对象
public SqlSessionFactory dataCenterSqlSessionFactory(@Qualifier("dataDataSource") DataSource datasource)
throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
bean.setDataSource(datasource);
// bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
bean.setMapperLocations(
// 设置mybatis的xml所在位置
new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/dmc/*.xml"));
return bean.getObject();
}
@Bean("dataSqlSessionTemplate")
// 表示这个数据源是默认数据源
public SqlSessionTemplate dataCenterSqlsessiontemplate(
@Qualifier("dataSqlSessionFactory") SqlSessionFactory sessionfactory) {
return new SqlSessionTemplate(sessionfactory);
}
/**
* 定义事务管理器
* @param dataSource 数据源
* @return 事务管理器
*/
@Bean(name = "dataTransactionManager")
public DataSourceTransactionManager transactionManager(@Qualifier("dataDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
/**
* 定义事务模板
* @param transactionManager 事务管理器
* @return 事务模板
* @throws Exception 异常
*/
@Bean(name = "dataTransactionTemplate")
public TransactionTemplate transactionTemplate(@Qualifier("dataTransactionManager") DataSourceTransactionManager transactionManager) throws Exception {
DefaultTransactionDefinition defaultTransactionDefinition = new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_REQUIRED);
defaultTransactionDefinition.setIsolationLevel(TransactionDefinition.ISOLATION_DEFAULT);
defaultTransactionDefinition.setTimeout(60);
return new TransactionTemplate(transactionManager, defaultTransactionDefinition);
}
}
然后还需要在项目中,配置好mapper文件的格式,例如我们这里就是下面这种格式
然后xml文件的格式,也需要按照上面的格式来配置
这样配置的格式就是为了使用多个不同服务器上的数据库。
681

被折叠的 条评论
为什么被折叠?



