微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JdbcTemplate 多数据源 jdbc

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

配置:

package top.zekk.twodatasource.config;
 
 
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.core.JdbcTemplate;
 
import javax.sql.DataSource;
 
 
@Configuration
public class DataSourceConfig {
 
    @Bean(name = "primaryDataSource")
 
//    @Qualifier("primaryDataSource")//原博主这里加上@Qualify 没有必要 删了也没有影响
    @ConfigurationProperties("spring.datasource.primary")
    public DataSource primaryDataSource() {
        return DataSourceBuilder.create().build();
    }
 
    @Primary
    @Bean(name = "secondaryDataSource")
 
//    @Qualifier("secondaryDataSource") //原博主这里加上@Qualify 没有必要 删了也没有影响
    @ConfigurationProperties("spring.datasource.secondary")
    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

 

 

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

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐