在springboot中使用jdbcTemplate(2)-多数据源

最近项目中开发后端接口需要从多个数据源获取数据,本来想用mybatis-plus结果失败了。

又重新配置了JdbcTemplate竟然成功了,感觉还是得用成熟得技术啊。

不多说,上代码,首先application.propterties配置多个数据源信息

一、配置文件

复制代码
spring.datasource.dynamic.primary=master

#master库
spring.datasource.dynamic.datasource.master.username=user
spring.datasource.dynamic.datasource.master.password=pswd
spring.datasource.dynamic.datasource.master.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.dynamic.datasource.master.url=jdbc:mysql://ip:3306/db?useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.dynamic.datasource.master.hikari.connection-timeout=60000
spring.datasource.dynamic.datasource.master.hikari.minIdle=10
spring.datasource.dynamic.datasource.master.hikari.maxPoolSize=20
spring.datasource.dynamic.datasource.master.hikari.isAutoCommit=true
spring.datasource.dynamic.datasource.master.hikari.idle-timeout=600000
spring.datasource.dynamic.datasource.master.hikari.max-lifetime=28740000
spring.datasource.dynamic.datasource.master.hikari.connection-test-query=SELECT 1

#slave库
spring.datasource.dynamic.datasource.slave1.username=user
spring.datasource.dynamic.datasource.slave1.password=pswd
spring.datasource.dynamic.datasource.slave1.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.dynamic.datasource.slave1.url=jdbc:mysql://ip:3306/db2?useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.dynamic.datasource.slave1.hikari.connection-timeout=60000
spring.datasource.dynamic.datasource.slave1.hikari.minIdle=10
spring.datasource.dynamic.datasource.slave1.hikari.maxPoolSize=20
spring.datasource.dynamic.datasource.slave1.hikari.isAutoCommit=true
spring.datasource.dynamic.datasource.slave1.hikari.idle-timeout=600000
spring.datasource.dynamic.datasource.slave1.hikari.max-lifetime=28740000
spring.datasource.dynamic.datasource.slave1.hikari.connection-test-query=SELECT 1
复制代码

二、maven依赖

项目依赖中用到了druid,这里把部分依赖包也发一下

复制代码
   <!--druid-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.9</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
复制代码

三、数据源配置类

复制代码
@Configuration
public class DataSourceConfig {
    private static final Logger logger = LoggerFactory.getLogger(DataSourceConfig.class);

    @Primary
    @Bean(name = "masterDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.master")
    public DataSource masterDataSource() {
        return DruidDataSourceBuilder.create().build();
    }


    @Bean(name = "slave1DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.slave1")
    public DataSource slave1DataSource() {
        return DruidDataSourceBuilder.create().build();
    }

    @Bean(name = "masterJdbcTemplate")
    public JdbcTemplate primaryJdbcTemplate(@Qualifier("masterDataSource") DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }

    @Bean(name = "slave1JdbcTemplate")
    public JdbcTemplate secondaryJdbcTemplate(@Qualifier("slave1DataSource") DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }
}
复制代码

四、使用

复制代码
@Service
public class PatrolServiceImpl implements PatrolService {


    @Autowired
    @Qualifier("masterJdbcTemplate")
    private JdbcTemplate masterJdbcTemplate;

    @Autowired
    @Qualifier("slave1JdbcTemplate")
    private JdbcTemplate slave1JdbcTemplate;

    @Override
    public List<Patrol1> selectAll() {
        List<Patrol1> query = masterJdbcTemplate.query("select * from table1 limit 10", new BeanPropertyRowMapper<>(Patrol1.class));
        return  query;
    }

    @Override
    public Integer selectCount() {
        Integer count = masterJdbcTemplate.queryForObject("select count(id) from patrol_task ", Integer.class);
        return  count;
    }


    @Override
    public List selectByCondition() {
        return  slave1JdbcTemplate.queryForList("select * from customer limit 10");
    }
}
复制代码

这就大功告成了

posted @   Mars.wang  阅读(600)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示