引入依赖
xml
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver18</artifactId>
<version>8.1.3.140</version>
</dependency>
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmDialectForHibernate</artifactId>
<version>5.3</version>
</dependency>
yml配置:
yml
spring:
datasource:
druid:
stat-view-servlet:
enabled: false
loginUsername: admin
loginPassword: Usdf!239dLOsdYT
allow:
web-stat-filter:
enabled: false
dynamic:
druid:
initial-size: 5
min-idle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
filters: stat,slf4j
stat:
merge-sql: true
slow-sql-millis: 5000
primary: master
datasource:
master:
url: jdbc:mysql://127.0.0.1:3306/mysql_db?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&autoReconnect=true&autoReconnectForPools=true&connectTimeout=30000&socketTimeout=60000&serverTimezone=Asia/Shanghai
username: mysql_db
password: mysql_db
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
druid:
db-type: mysql
#达梦数据源dm
dm:
url: jdbc:dm://127.0.0.1:5236/?DM_DB&schema=DM_DB&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&compatibleMode=oracle
username: DM_DB
password: Dm123456
driver-class-name: dm.jdbc.driver.DmDriver
type: com.alibaba.druid.pool.DruidDataSource
druid:
db-type: oracle #强制oracle
validationQuery: select 1 from dual #达梦心跳SQL
Java配置:
java
package org.jeecg.config.mybatis;
import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties;
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
import com.baomidou.mybatisplus.extension.plugins.inner.DynamicTableNameInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
import lombok.extern.slf4j.Slf4j;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.LongValue;
import org.apache.ibatis.mapping.DatabaseIdProvider;
import org.jeecg.common.config.TenantContext;
import org.jeecg.common.constant.TenantConstant;
import org.jeecg.common.util.SpringContextUtils;
import org.jeecg.common.util.TokenUtils;
import org.jeecg.common.util.oConvertUtils;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.annotation.Resource;
import javax.sql.DataSource;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
/**
* 单数据源配置(jeecg.datasource.open = false时生效)
*/
@Slf4j
@Configuration
@MapperScan(value = {"com.database.modules.**.mapper*"})
public class MybatisPlusSaasConfig {
// 省略非关键内容......
@Resource
private DynamicDataSourceProperties dynamicDataSourceProperties;
@Bean
public DatabaseIdProvider databaseIdProvider() {
return new DatabaseIdProvider() {
@Override
public String getDatabaseId(DataSource dataSource) {
// 1.优先取当前线程@DS注解指定的数据源
String dsKey = DynamicDataSourceContextHolder.peek();
// 2.线程无指定数据源,从yml配置读取primary主库名称
if (dsKey == null) {
dsKey = dynamicDataSourceProperties.getPrimary();
}
// 数据源名称是dm返回dm,其余返回mysql
return "dm".equalsIgnoreCase(dsKey) ? "dm" : "mysql";
}
};
}
}
mapper.xml文件写法:
xml
<select id="selectDB" databaseId="mysql" resultType="string">
select 'mysql'
</select>
<select id="selectDB" databaseId="dm" resultType="string">
select 'dm'
</select>