Springboot从两个库抽数据
时间: 2024-02-01 07:04:32 浏览: 134
springboot双数据源
在 Spring Boot 中,从两个库的两个表通过左连接抽取数据,可以通过配置多个数据源来实现。以下是具体的步骤:
1. 在 application.properties 文件中,配置两个数据源:
```
# 配置数据源1
spring.datasource.db1.url=jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
spring.datasource.db1.username=root
spring.datasource.db1.password=root
spring.datasource.db1.driver-class-name=com.mysql.cj.jdbc.Driver
# 配置数据源2
spring.datasource.db2.url=jdbc:mysql://localhost:3306/db2?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
spring.datasource.db2.username=root
spring.datasource.db2.password=root
spring.datasource.db2.driver-class-name=com.mysql.cj.jdbc.Driver
```
2. 创建两个数据源的 DataSource 对象:
```
@Configuration
public class DataSourceConfig {
@Bean(name = "db1DataSource")
@ConfigurationProperties(prefix = "spring.datasource.db1")
public DataSource db1DataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "db2DataSource")
@ConfigurationProperties(prefix = "spring.datasource.db2")
public DataSource db2DataSource() {
return DataSourceBuilder.create().build();
}
}
```
3. 创建两个 JdbcTemplate 对象,分别使用上面创建的两个数据源:
```
@Configuration
public class JdbcTemplateConfig {
@Bean(name = "db1JdbcTemplate")
public JdbcTemplate db1JdbcTemplate(@Qualifier("db1DataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
@Bean(name = "db2JdbcTemplate")
public JdbcTemplate db2JdbcTemplate(@Qualifier("db2DataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
```
4. 在需要访问数据库的 Service 中,使用 JdbcTemplate 对象执行 SQL 查询语句:
```
@Service
public class DataServiceImpl implements DataService {
@Autowired
@Qualifier("db1JdbcTemplate")
private JdbcTemplate db1JdbcTemplate;
@Autowired
@Qualifier("db2JdbcTemplate")
private JdbcTemplate db2JdbcTemplate;
@Override
public List<Data> getData() {
String sql = "SELECT * FROM db1.table1 LEFT JOIN db2.table2 ON db1.table1.id = db2.table2.id";
List<Data> data = db1JdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Data.class));
return data;
}
}
```
以上就是从两个库的两个表通过左连接抽取数据的完整步骤。
阅读全文