若依整合TDengine涛思时序库
若依框架默认使用的是mysql数据库,当有写入和查询大量数据而无修改和删除需求时,比如某个硬件每秒钟会存储一条数据,这时候整合一个时序库进来就会极大的提高速度。试了一下taos时序库还不错,就拿来用了,而且作为国产时序库,官方文档资料还是比较全面的。
·
备注
若依框架默认使用的是mysql数据库,当有写入和查询大量数据而无修改和删除需求时,比如某个硬件每秒钟会存储一条数据,这时候整合一个时序库进来就会极大的提高速度。taos作为国产时序库,官方文档资料还是比较全面的。
Maven
此maven放在admin包的pom中
<dependency>
<groupId>com.taosdata.jdbc</groupId>
<artifactId>taos-jdbcdriver</artifactId>
<version>3.0.0</version>
</dependency>
yml
- 若依是设计了多数据源的情况的,但如果数据源不是同一类型数据库的情况下,还是要小改动一下。
- 这里有两点需要注意,driverClassName驱动类型不同和validationQuery配置检测连接是否有效的sql语句不同,其他根据需要配置
- 时序库的连接方式我使用了rest风格,性能会略有下降。可以更改为原生连接,但需要安装客户端驱动,这里只是测试,就不使用原生连接了。
# Spring配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
# 主库数据源
master:
url:
username:
password:
driverClassName: com.mysql.cj.jdbc.Driver
initialSize: 5
minIdle: 10
maxActive: 20
maxWait: 60000
connectTimeout: 30000
socketTimeout: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
maxEvictableIdleTimeMillis: 900000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 从库数据源
slave:
# 从数据源开关
enabled: true
url: jdbc:TAOS-RS://地址:端口/库名
username:
password:
driverClassName: com.taosdata.jdbc.rs.RestfulDriver
validationQuery: select server_status();
initialSize: 5
minIdle: 10
maxActive: 20
maxWait: 60000
config
改了yml当然要改配置文件,以下标示的地方需要改动
/**
* 数据源
*/
public enum DataSourceType
{
/** 主库 */
MASTER,
/** 从库 */
SLAVE
}
/**
* druid 配置属性 主库
*/
@Configuration
public class DruidProperties1
{
@Value("${spring.datasource.druid.master.initialSize}")
private int initialSize;
@Value("${spring.datasource.druid.master.minIdle}")
private int minIdle;
@Value("${spring.datasource.druid.master.maxActive}")
private int maxActive;
@Value("${spring.datasource.druid.master.maxWait}")
private int maxWait;
@Value("${spring.datasource.druid.master.connectTimeout}")
private int connectTimeout;
@Value("${spring.datasource.druid.master.socketTimeout}")
private int socketTimeout;
@Value("${spring.datasource.druid.master.timeBetweenEvictionRunsMillis}")
private int timeBetweenEvictionRunsMillis;
@Value("${spring.datasource.druid.master.minEvictableIdleTimeMillis}")
private int minEvictableIdleTimeMillis;
@Value("${spring.datasource.druid.master.maxEvictableIdleTimeMillis}")
private int maxEvictableIdleTimeMillis;
@Value("${spring.datasource.druid.master.validationQuery}")
private String validationQuery;
@Value("${spring.datasource.druid.master.testWhileIdle}")
private boolean testWhileIdle;
@Value("${spring.datasource.druid.master.testOnBorrow}")
private boolean testOnBorrow;
@Value("${spring.datasource.druid.master.testOnReturn}")
private boolean testOnReturn;
public DruidDataSource dataSource(DruidDataSource datasource)
{
/** 配置初始化大小、最小、最大 */
datasource.setInitialSize(initialSize);
datasource.setMaxActive(maxActive);
datasource.setMinIdle(minIdle);
/** 配置获取连接等待超时的时间 */
datasource.setMaxWait(maxWait);
/** 配置驱动连接超时时间,检测数据库建立连接的超时时间,单位是毫秒 */
datasource.setConnectTimeout(connectTimeout);
/** 配置网络超时时间,等待数据库操作完成的网络超时时间,单位是毫秒 */
datasource.setSocketTimeout(socketTimeout);
/** 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 */
datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
/** 配置一个连接在池中最小、最大生存的时间,单位是毫秒 */
datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
datasource.setMaxEvictableIdleTimeMillis(maxEvictableIdleTimeMillis);
/** 用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。 */
datasource.setValidationQuery(validationQuery);
/** 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 */
datasource.setTestWhileIdle(testWhileIdle);
/** 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 */
datasource.setTestOnBorrow(testOnBorrow);
/** 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 */
datasource.setTestOnReturn(testOnReturn);
return datasource;
}
}
/**
* druid 配置属性 从库
*/
@Configuration
public class DruidProperties2
{
@Value("${spring.datasource.druid.slave.initialSize}")
private int initialSize;
@Value("${spring.datasource.druid.slave.minIdle}")
private int minIdle;
@Value("${spring.datasource.druid.slave.maxActive}")
private int maxActive;
@Value("${spring.datasource.druid.slave.maxWait}")
private int maxWait;
@Value("${spring.datasource.druid.slave.validationQuery}")
private String validationQuery;
public DruidDataSource dataSource(DruidDataSource datasource)
{
/** 配置初始化大小、最小、最大 */
datasource.setInitialSize(initialSize);
datasource.setMaxActive(maxActive);
datasource.setMinIdle(minIdle);
/** 配置获取连接等待超时的时间 */
datasource.setMaxWait(maxWait);
/** 用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。 */
datasource.setValidationQuery(validationQuery);
return datasource;
}
}
测试
流程上与使用mysql时基本无区别,甚至连sql语法大部分都是通用的,只是在Service层需要使用@DataSource注解切换数据源,这个注解既可以放在类上也可以放在方法上
@RequestMapping("/taosData")
@RestController
public class TaosController {
@Autowired
private ITaosService taosService;
@GetMapping("/count")
public int count() {
return taosService.count();
}
}
public interface ITaosService {
int count();
}
@Service
public class TaosServiceImpl implements ITaosService{
@Autowired
private TaosMapper taosMapper;
@DataSource(value = DataSourceType.SLAVE)
@Override
public int count() {
return taosMapper.count();
}
}
public interface TaosMapper {
int count();
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.taos.mapper.TaosMapper">
<select id="count" resultType="java.lang.Integer">
select
count(*)
from
test.stable
</select>
</mapper>
注意
如果你在mybatis-config.xml配置文件中全局参数开启了自动生成主键,使用insert标签会报错,需要单独给语句设置关闭生成主键useGeneratedKeys=“false”
<insert id="" parameterType="" useGeneratedKeys="false">
INSERT INTO USING
TAGS
()
VALUES
()
</insert>
更多推荐
已为社区贡献1条内容
所有评论(0)