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

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

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

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

下面这些纯属个人理解,如有误解请见谅:

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

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

关于java使用TDengine数据库以及单体springboot同时搭载mysql和TDengine俩个数据源(下)_第1张图片
创建一个目录直接把jar包打包进项目里面(但如果看过上篇的同学需要吧jar删除需要把jar包删除后再重新导入这个目录下的jar包)
关于java使用TDengine数据库以及单体springboot同时搭载mysql和TDengine俩个数据源(下)_第2张图片
其次需要在pom.xml中指定jar包的位置,直接当成配置写入即可。这样就方便打包后找到jar包了
关于java使用TDengine数据库以及单体springboot同时搭载mysql和TDengine俩个数据源(下)_第3张图片

2、做同时搭载的多个数据库配置:

需要在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

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

@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层的目录名称对应配置文件
关于java使用TDengine数据库以及单体springboot同时搭载mysql和TDengine俩个数据源(下)_第4张图片

3、简单介绍一下数据库操作:

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

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

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

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

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

你可能感兴趣的:(java)