前言
之前不使用 mbatis-plus 下面的dynamic多数据源,对于多数据源的项目,都需要针对每个数据源写一个配置文件,很繁琐很麻烦。如下,针对Tdengine的配置。
首先在 application.yml 中配置。
其次创建配置类:
import com.alibaba.druid.pool.DruidDataSource;
import com.chain.common.utils.StringUtils;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import javax.sql.DataSource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* 类名: TDengineConfig
* 描述: TDengine配置类
* 时间: 2022/5/13,0016 1:14
* 开发人: wxy
*/
@Configuration
@MapperScan(basePackages = {"com.chain.iot.tdengine.dao"}, sqlSessionTemplateRef = "tdengineSqlSessionTemplate") // 声明此数据源作用的包
@ConditionalOnProperty(name = "spring.datasource.druid.tdengine-server.enabled", havingValue = "true")
public class TDengineConfig {
@Value("${spring.datasource.druid.tdengine-server.dbName}")
private String dbName;
@Value("${spring.datasource.druid.tdengine-server.url}")
private String jdbc;
@Bean(name = "tDengineDataSource")
@ConfigurationProperties(prefix = "spring.datasource.druid.tdengine-server")
public DataSource tdengineDataSource() {
return new DruidDataSource();
}
@Bean(name = "tDengineSqlSessionFactory")
public SqlSessionFactory tDengineSqlSessionFactory(@Qualifier("tDengineDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setMapperLocations(resolveMapperLocations(StringUtils.split("classpath:mapper/tdengine/*Mapper.xml", ",")));
sqlSessionFactoryBean.setDataSource(dataSource);
return sqlSessionFactoryBean.getObject();
}
@Bean(name = "tdengineSqlSessionTemplate")
public SqlSessionTemplate tdengineSqlSessionTemplate(@Qualifier("tDengineSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
public String getDbName() {
return dbName;
}
public void setDbName(String dbName) {
this.dbName = dbName;
}
public Resource[] resolveMapperLocations(String[] mapperLocations)
{
ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();
List<Resource> resources = new ArrayList<Resource>();
if (mapperLocations != null)
{
for (String mapperLocation : mapperLocations)
{
try
{
Resource[] mappers = resourceResolver.getResources(mapperLocation);
resources.addAll(Arrays.asList(mappers));
}
catch (IOException e)
{
// ignore
}
}
}
return resources.toArray(new Resource[resources.size()]);
}
}
导入依赖
<!-- mp多数据源 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<!-- TDEngine -->
<dependency>
<groupId>com.taosdata.jdbc</groupId>
<artifactId>taos-jdbcdriver</artifactId>
<version>3.0.0</version>
</dependency>
<!-- Druid数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.9</version>
</dependency>
配置文件 application.yml
server:
port: 8085
servlet:
context-path: /lmh
# 将resources下的mapper下的xml文件都读取到 target
mybatis-plus:
mapper-locations: classpath:/mapper/*.xml
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
dynamic:
primary: master # 默认数据源
datasource:
master:
url: jdbc:mysql://localhost/my_schema?useUnicode=true&useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
tdengine:
url: jdbc:TAOS://master:6030/db?charset=utf-8
driver-class-name: com.taosdata.jdbc.TSDBDriver
username: root
password: taosdata
druid:
initialSize: 5
minIdle: 5
maxActive: 200
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: false
filters: stat,wall,log4j2
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
Mapper接口与xml编写
TdengineInfoMapper.xml :
测试查询
运行结果: