zoukankan      html  css  js  c++  java
  • 在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");
        }
    }

    这就大功告成了

  • 相关阅读:
    Spring事务传播特性NOT_SUPPORTED使用演示
    spring配置基于xml的声明式事务
    反射的简单应用
    MyBatis批处理工具类MyBatisBatchHelper.java
    Mybatis分页插件PageHelper的使用
    利用Spring的Profile加载指定数据源
    Nginx状态信息(status)配置及信息详解
    nginx配置基于域名、端口、IP的虚拟主机
    Nginx Linux安装与部署
    rename 批量修改文件名简单用法
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/14900089.html
Copyright © 2011-2022 走看看