ruoyi-vue整合tdengine多数据源
时间: 2023-09-09 11:14:07 浏览: 163
Ruoyi-Vue 是一个基于 Spring Boot 和 Vue.js 的前后端分离式开发平台,支持多数据源配置。而 TDengine 是一个高性能、高可靠、分布式的时序数据库。下面是整合 TDengine 多数据源的步骤:
1. 在 pom.xml 文件中引入 TDengine 的 JDBC 驱动包。
```xml
<dependency>
<groupId>com.taosdata.jdbc</groupId>
<artifactId>taos-jdbc</artifactId>
<version>1.1.24</version>
</dependency>
```
2. 在 application.yml 文件中配置 TDengine 数据源信息。
```yaml
spring:
datasource:
primary:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ruoyi?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: root
taos:
driver-class-name: com.taosdata.jdbc.TSDBDriver
url: jdbc:TAOS://localhost:6030/db_name?user=user_name&password=password
```
其中 `primary` 是默认的 MySQL 数据源,`taos` 是配置的 TDengine 数据源。
3. 在 MybatisPlusConfig.java 文件中配置多数据源。
```java
@Configuration
@MapperScan(basePackages = {"com.ruoyi.project.**.mapper"})
public class MybatisPlusConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.primary")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource.taos")
public DataSource taosDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@Primary
public DynamicDataSource dataSource(DataSource primaryDataSource, DataSource taosDataSource) {
Map<Object, Object> targetDataSources = new HashMap<>();
targetDataSources.put(DataSourceType.PRIMARY.name(), primaryDataSource);
targetDataSources.put(DataSourceType.TAOS.name(), taosDataSource);
return new DynamicDataSource(primaryDataSource, targetDataSources);
}
}
```
这里使用了动态数据源,通过 `DataSourceType` 枚举类来区分数据源类型。
4. 在 DynamicDataSource.java 文件中实现动态数据源。
```java
public class DynamicDataSource extends AbstractRoutingDataSource {
private static final ThreadLocal<String> CONTEXT_HOLDER = new ThreadLocal<>();
public DynamicDataSource(DataSource defaultTargetDataSource, Map<Object, Object> targetDataSources) {
super.setDefaultTargetDataSource(defaultTargetDataSource);
super.setTargetDataSources(targetDataSources);
super.afterPropertiesSet();
}
@Override
protected Object determineCurrentLookupKey() {
return CONTEXT_HOLDER.get();
}
public static void setDataSource(String dataSourceType) {
CONTEXT_HOLDER.set(dataSourceType);
}
public static void clearDataSource() {
CONTEXT_HOLDER.remove();
}
}
```
这里使用了 ThreadLocal 来保存当前使用的数据源类型。
5. 在 DataSourceAspect.java 文件中实现切面拦截。
```java
@Aspect
@Component
public class DataSourceAspect {
@Pointcut("@annotation(com.ruoyi.common.annotation.DataSource)")
public void dataSourcePointCut() {
}
@Around("dataSourcePointCut()")
public Object around(ProceedingJoinPoint point) throws Throwable {
MethodSignature signature = (MethodSignature) point.getSignature();
DataSource dataSource = signature.getMethod().getAnnotation(DataSource.class);
if (dataSource != null) {
DynamicDataSource.setDataSource(dataSource.value().name());
}
try {
return point.proceed();
} finally {
DynamicDataSource.clearDataSource();
}
}
}
```
这里使用了 AOP 切面拦截,通过注解 `@DataSource` 来指定使用的数据源类型。
6. 在需要使用 TDengine 数据源的方法上加上 `@DataSource(DataSourceType.TAOS)` 注解。
```java
@DataSource(DataSourceType.TAOS)
public List<Map<String, Object>> listFromTDengine() {
return jdbcTemplate.queryForList("select * from table_name");
}
```
这样就可以在 Ruoyi-Vue 中实现 TDengine 多数据源的配置了。
阅读全文