实现Java多数据源查询
一、流程图
erDiagram
CUSTOMER ||--o| SALES : has
CUSTOMER ||--o| PRODUCTS : buy
二、步骤
步骤 | 操作 |
---|---|
1 | 配置多数据源 |
2 | 创建数据源类 |
3 | 编写查询服务类 |
4 | 调用查询方法 |
三、具体操作
1. 配置多数据源
首先,在application.properties
或application.yml
文件中配置多个数据源信息。
2. 创建数据源类
// 主数据源配置
@Configuration
public class PrimaryDataSourceConfig {
@Bean(name = "primaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.primary")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "primaryJdbcTemplate")
public JdbcTemplate primaryJdbcTemplate(@Qualifier("primaryDataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
// 第二个数据源配置
@Configuration
public class SecondaryDataSourceConfig {
@Bean(name = "secondaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.secondary")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "secondaryJdbcTemplate")
public JdbcTemplate secondaryJdbcTemplate(@Qualifier("secondaryDataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
3. 编写查询服务类
@Service
public class DataService {
@Autowired
@Qualifier("primaryJdbcTemplate")
private JdbcTemplate primaryJdbcTemplate;
@Autowired
@Qualifier("secondaryJdbcTemplate")
private JdbcTemplate secondaryJdbcTemplate;
public List<Map<String, Object>> queryFromPrimary() {
String sql = "SELECT * FROM table1";
return primaryJdbcTemplate.queryForList(sql);
}
public List<Map<String, Object>> queryFromSecondary() {
String sql = "SELECT * FROM table2";
return secondaryJdbcTemplate.queryForList(sql);
}
}
4. 调用查询方法
@RestController
public class DataController {
@Autowired
private DataService dataService;
@GetMapping("/primary")
public List<Map<String, Object>> queryPrimaryData() {
return dataService.queryFromPrimary();
}
@GetMapping("/secondary")
public List<Map<String, Object>> querySecondaryData() {
return dataService.queryFromSecondary();
}
}
四、总结
通过以上步骤,你已经成功实现了Java多数据源查询。在实际项目中,可以根据需要配置更多的数据源,并编写相应的查询服务类。
希望这篇文章对你有所帮助,祝你在Java开发的路上越走越远!