Linkis数据中间件 不同数据源比如mysql和orcale怎么自动实现分库分表用springboot框架写一个查询数据的demo
时间: 2023-07-15 12:14:58 浏览: 117
首先,需要使用Linkis数据中间件的相关依赖,可以在pom.xml文件中添加如下代码:
```xml
<dependencies>
<dependency>
<groupId>com.webank.wedatasphere.linkis</groupId>
<artifactId>wedatasphere-linkis-client</artifactId>
<version>${linkis.version}</version>
</dependency>
<dependency>
<groupId>com.webank.wedatasphere.linkis</groupId>
<artifactId>wedatasphere-linkis-commons</artifactId>
<version>${linkis.version}</version>
</dependency>
</dependencies>
```
其中`${linkis.version}`需要根据实际情况进行替换。
接下来,需要配置Linkis数据中间件的相关属性,可以在`application.properties`文件中添加如下代码:
```properties
# 配置Linkis数据中间件的服务地址
linkis.url=http://localhost:9001
# 配置Linkis数据中间件的用户名和密码
linkis.username=admin
linkis.password=admin
```
然后,编写一个查询数据的demo,可以使用Spring JDBC来连接数据库,具体代码如下:
```java
import com.webank.wedatasphere.linkis.DataWorkCloudApplication;
import com.webank.wedatasphere.linkis.common.exception.ErrorException;
import com.webank.wedatasphere.linkis.rpc.Sender;
import com.webank.wedatasphere.linkis.rpc.sender.SpringCloudSender;
import com.webank.wedatasphere.linkis.scheduler.queue.Job;
import com.webank.wedatasphere.linkis.scheduler.queue.JobStatus;
import com.webank.wedatasphere.linkis.scheduler.queue.Queue;
import com.webank.wedatasphere.linkis.scheduler.queue.SchedulerEventState;
import com.webank.wedatasphere.linkis.scheduler.queue.impl.DefaultSchedulerEventState;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@SpringBootApplication(scanBasePackages = "com.webank.wedatasphere.linkis")
public class LinkisDemoApplication {
public static void main(String[] args) throws ErrorException {
SpringApplication.run(LinkisDemoApplication.class, args);
// 获取Linkis数据中间件的发送器
Sender sender = SpringCloudSender.getSender();
// 创建队列
Queue queue = sender.createQueue("test");
// 创建任务
Map<String, Object> params = new HashMap<>();
params.put("dbType", "mysql");
params.put("url", "jdbc:mysql://localhost:3306/test");
params.put("username", "root");
params.put("password", "root");
params.put("sql", "select * from user");
Job job = sender.job().setCreator("test").setParams(params).setReceiver(queue).toJob();
// 提交任务
queue.submit(job);
// 等待任务执行完成
while (job.getStatus() != JobStatus.Succeed && job.getStatus() != JobStatus.Failed) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 获取任务执行结果
SchedulerEventState state = sender.getEventState(job);
if (state instanceof DefaultSchedulerEventState) {
DefaultSchedulerEventState eventState = (DefaultSchedulerEventState) state;
List<Object> outputs = eventState.getOutput();
if (outputs != null && outputs.size() > 0) {
Object output = outputs.get(0);
if (output instanceof JdbcTemplate) {
JdbcTemplate jdbcTemplate = (JdbcTemplate) output;
List<Map<String, Object>> results = jdbcTemplate.queryForList((String) params.get("sql"));
System.out.println(results);
}
}
}
}
}
```
在上面的代码中,首先获取Linkis数据中间件的发送器,然后创建一个队列和一个任务,并将任务提交到队列中。等待任务执行完成后,获取任务执行结果,从而实现查询数据的功能。
需要注意的是,上面的代码中只查询了一个数据源(mysql),如果需要查询多个数据源(比如mysql和oracle),则需要根据实际情况进行配置和编码。另外,分库分表的功能需要在具体的数据源(比如mysql)中实现,Linkis数据中间件本身并不提供该功能。
阅读全文