zoukankan      html  css  js  c++  java
  • JdbcTemplate 多数据源 jdbc

    参考1: https://www.cnblogs.com/tangzekai/p/7782773.html

    参考2  https://blog.csdn.net/baochanghong/article/details/54134018

    依赖:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
     </dependency>

    jdbcTemplate:

    List<ReportDetailInfo> list = ediPdJdbcTemplate.query(getShipSql,new BeanPropertyRowMapper(ReportDetailInfo.class)) ;

    配置:

    package com.icil.report.config;
    
    import javax.sql.DataSource;
    
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.boot.jdbc.DataSourceBuilder;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Primary;
    import org.springframework.jdbc.core.JdbcTemplate;
    
    @Configuration
    public class DataSourceConfig {
     
        @Bean(name = "primaryDataSource")
        @Qualifier("primaryDataSource")//原博主这里加上@Qualify 没有必要 删了也没有影响
        @ConfigurationProperties("jdbc.datasource.edi")
        public DataSource primaryDataSource() {
            return DataSourceBuilder.create().build();
        }
     
    //    @Primary
        @Bean(name = "secondaryDataSource")
        @Qualifier("secondaryDataSource") //原博主这里加上@Qualify 没有必要 删了也没有影响
        @ConfigurationProperties("jdbc.datasource.booking")
        public DataSource secondaryDataSource() {
            return DataSourceBuilder.create().build();
        }
     
     
        /**
         * @param dataSource
         * @return
         * @Bean明确地指示了一种方法,什么方法呢——产生一个bean的方法, 并且交给Spring容器管理;从这我们就明白了为啥@Bean是放在方法的注释上了,
         * 因为它很明确地告诉被注释的方法,你给我产生一个Bean,然后交给Spring容器,
         * 实现依赖注入
         */
        @Bean(name = "primaryJdbcTemplate")
        public JdbcTemplate primaryTemplate(@Qualifier("primaryDataSource") DataSource dataSource) {
            return new JdbcTemplate(dataSource);
        }
     
        
        
        
        @Bean(name = "secondaryJdbcTemplate")
        public JdbcTemplate secondaryTemplate(@Qualifier("secondaryDataSource") DataSource dataSource) {
            return new JdbcTemplate(dataSource);
        }
     
     
    }
    View Code

    application.properties

    ### database EDI configure
    jdbc.datasource.edi.jdbc-url=jdbc:mysql:///EDI
    jdbc.datasource.edi.driverClassName=com.mysql.cj.jdbc.Driver
    jdbc.datasource.edi.username=root
    jdbc.datasource.edi.password=hhaa
    jdbc.datasource.edi.sql-script-encoding=UTF-8
    
    
    ### database booking configure
    jdbc.datasource.booking.jdbc-url=jdbc:mysql:///booking
    jdbc.datasource.booking.driverClassName=com.mysql.cj.jdbc.Driver
    jdbc.datasource.booking.username=root
    jdbc.datasource.booking.password=hahahaha
    jdbc.datasource.booking.sql-script-encoding=UTF-8
    View Code

    test:

    package top.zekk.twodatasource;
     
    import org.junit.Assert;
    import org.junit.Before;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.context.annotation.Bean;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.test.context.junit4.SpringRunner;
     
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class TwoDatasourceApplicationTests {
     
        @Autowired
        /*@Qualify 多个同类型bean?存在时  Spring不知道应该绑定哪个实现类
        指定绑定的类名@Bean(name="**")
        */
        @Qualifier("primaryJdbcTemplate")
        protected JdbcTemplate jdbcTemplate1;
     
        @Autowired
        //@Qualify 多个同类型bean?存在时 指定绑定的类名@Bean(name="**")
        @Qualifier("secondaryJdbcTemplate")
        protected JdbcTemplate jdbcTemplate2;
     
        @Before //首先执行清空数据库操作
        public void setUp(){
            jdbcTemplate1.update("DELETE FROM USER ");
            jdbcTemplate2.update("DELETE FROM USER ");
        }
     
        @Test
        public void test(){
            jdbcTemplate1.update
                    ("INSERT INTO USER (id,name,age) VALUES (?,?,?)",1,"aaa",20);
            jdbcTemplate2.update
                    ("INSERT INTO USER (id,name,age) VALUES (?,?,?)",1,"bbb",30);
            jdbcTemplate2.update
                    ("INSERT INTO USER (id,name,age) VALUES (?,?,?)",2,"bbb",31);
     
            Assert.assertEquals("1",jdbcTemplate1.queryForObject("select count(1) from user",String.class));
     
            Assert.assertEquals("2",jdbcTemplate2.queryForObject("select count(1) from user",String.class));
        }
     
    }
    View Code
  • 相关阅读:
    滴水穿石Pydoop 架构和模块包介绍
    滴水穿石SSH Secure Shell Client安装和使用
    安装memcache到CentOS(另附yum法)
    php文件锁(转)
    MySQL中distinct和group by性能比较
    php中的自动加载
    php注释标准
    新浪API40310错误解决方法
    CentOS 5.5使用yum来安装LAMP(php运行环境)(转)
    MySQL优化之COUNT()效率
  • 原文地址:https://www.cnblogs.com/lshan/p/10791230.html
Copyright © 2011-2022 走看看