关于java使用TDengine数据库以及单体springboot同时搭载mysql和TDengine俩个数据源(下)

本文主要记录是我本身在项目中引用TDengine时序性数据库时踩过的坑。

TDengine的简介:TDengine是涛思数据推出的一款开源的专为物联网、车联网、工业互联网、IT运维等设计和优化的大数据平台。除核心的快10倍以上的时序数据库功能外,还提供缓存、数据订阅、流式计算等功能,最大程度减小研发和运维的复杂度。mysql

具体的陶思大数据简介能够观看TDengine文档:https://www.taosdata.com/cn/
其余语言相关使用过程当中的错误能够咨询陶思的论坛:https://github.com/taosdata/TDengine/issuesgit

下面这些纯属我的理解,若有误解请见谅:

一、针对上篇的一些bug的的修改:

上篇讲到使用spingBoot搭载TDengine的时候有点小问题,如果直接使用集成taos的jdbcdriverjar包的话,上线部署项目的时候仍是会报找不到taos.jdbcdriver的驱动包,因此可使用老式的写法github

在这里插入图片描述
建立一个目录直接把jar包打包进项目里面(但若是看过上篇的同窗须要吧jar删除须要把jar包删除后再从新导入这个目录下的jar包)
在这里插入图片描述
其次须要在pom.xml中指定jar包的位置,直接当成配置写入便可。这样就方便打包后找到jar包了
在这里插入图片描述web

二、作同时搭载的多个数据库配置:

须要在boot的启动类上面添加注解@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, MybatisAutoConfiguration.class})(直接复制无需更改),同时在
@SpringBootApplication(scanBasePackages={"写到本身mapper的上一层"})如果有@MapperScan注解的先删掉。

编写application.yaml配置文件(须要几个数据库配置几个数据源 frist,second,……名字能够本身定义)算法

spring:
  datasource:
    first:
      driver-class-name: com.mysql.jdbc.Driver
      password: 
      url: jdbc:mysql://ip:端口/数据库?useUnicode=true&characterEncoding=utf8&useSSL=false
      username: 
      configuration:
        maximum-pool-size: 10
    second:
      driver-class-name: com.taosdata.jdbc.TSDBDriver
      url: jdbc:TAOS://ip:端口/数据库?user=名字&password=密码&cfgdir=C:/TDengine/cfg
      username: 
      password: 
      configuration:
        maximum-pool-size: 10

编写俩个配置文件(搭载几个数据库就写几个)spring

@Configuration //将在springboot开启的时候开启这个类
@MapperScan(basePackages = "写到本身dao的上一层.dao.first",sqlSessionFactoryRef = "firstSqlSessionFactory")
//链接第一个数据库
public class FirstDataSourceConfig {
    @Bean
    @Primary
    public SqlSessionTemplate firstSqlSessionTemplate() throws Exception {
        return new SqlSessionTemplate(firstSqlSessionFactory());
    }

    @Bean
    @Primary
    public DataSourceTransactionManager firstTransactionManager(){
        return new DataSourceTransactionManager(firstDataSource());
    }

    @Bean
    @Primary
    public SqlSessionFactory firstSqlSessionFactory() throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(firstDataSource());
        factoryBean.setMapperLocations(
                new PathMatchingResourcePatternResolver()
                        .getResources("classpath:写到本身mapper的上一层/mapper/first/*.xml")); // 2. xml 所在路径
        return factoryBean.getObject();
    }

    @Bean
    @Primary
    @ConfigurationProperties("spring.datasource.first")
    public DataSourceProperties firstDataSourceProperties() {
        return new DataSourceProperties();
    }

    @Bean
    @Primary
    @ConfigurationProperties("spring.datasource.first.configuration")
    public DataSource firstDataSource() {
        return firstDataSourceProperties()
                .initializeDataSourceBuilder()
                .type(HikariDataSource.class) // 3. 能够显示指定链接池,也能够不显示指定;即此行代码能够注释掉
                .build();
    }
}

如果须要下一个数据库直接复制出一个把dao层 、xml层、以及配置文件的指定数据源的配置修改一下便可。
同时修改本身的项目成配置文件中的形式,使其dao和mapper层的目录名称对应配置文件
在这里插入图片描述sql

三、简单介绍一下数据库操做:

作几个简单的TDengine数据操做介绍:数据库

如果进行存储查询物联网、传感器等一系列的大型数据的话,创建数据库的同时需同时创建起几张超级表方便之后查询:
create table 超级表名字(字段名 字段类型,字段名 字段类型,)tags(标识名 标识类型,标识名 标识类型)); (标识能够用多个,方便区别超级表下的各个子表,保证子表的惟一性方便查询)。缓存

接下来创建子表 ,子表的创建能够直接写在mybatis的xml文件中,使用sql语句的#{} 或是${}占位符编写,
子表的名字须要区别行直接把数据表的名字写成动态的:
insert into s#{name} using 超级表名字 tags(标识符的值,标识符的值) values(字段的值,字段的值)
这样就可根据接收的不一样数据判断是建立新表仍是在老表进行数据添加springboot

在接下来就是简单的一些查询:select * from s#{name}
年月日分别有数据特定的算法:字段名 > now-1d(日),字段名 > now-1w(周)
具体其余添加、查询等语句的可参考陶思数据的文档:https://www.taosdata.com/cn/

本文紧接上次介绍进行以后的简单简介,若有错误欢迎讨论。