zoukankan      html  css  js  c++  java
  • springboot配置多数据源(JdbcTemplate方式)

    在实际开发中可能会遇到需要配置多个数据源的情况,比如:需要使用多个host、需要使用多种数据库(MySql、Oracle、SqlServer...)

    如果使用springboot开发,可做如下配置:

    Config:

    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;
    
    import javax.sql.DataSource;
    
    @Configuration
    public class DataSourceConfig {
    
        @Bean(name = "testDataSource")
        @Primary
        @Qualifier("testDataSource")
        @ConfigurationProperties(prefix="spring.datasource.hikari.mysql")
        public DataSource testDataSource() {
            return DataSourceBuilder.create().build();
        }
    
        @Bean(name = "formalDataSource")
        @Qualifier("formalDataSource")
        @ConfigurationProperties(prefix = "spring.datasource.formal.mysql")
        public DataSource formalDataSource() {
            return DataSourceBuilder.create().build();
        }
    
        @Bean(name="testJdbcTemplate")
        public JdbcTemplate testJdbcTemplate (
                @Qualifier("testDataSource")  DataSource testDataSource ) {
            return new JdbcTemplate(testDataSource);
        }
    
        @Bean(name = "formalJdbcTemplate")
        public JdbcTemplate formalJdbcTemplate(
                @Qualifier("formalDataSource") DataSource formalDataSource){
            return new JdbcTemplate(formalDataSource);
        }
    }
    
    

    配置文件 application.properties

    spring.datasource.hikari.mysql.jdbc-url =jdbc:mysql://mysql2.cdqdops.org:3306/standard?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true
    spring.datasource.hikari.mysql.username = root
    spring.datasource.hikari.mysql.password = 123456
    spring.datasource.hikari.mysql.driver-class-Name = com.mysql.jdbc.Driver
    
    spring.datasource.formal.mysql.jdbc-url =jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true
    spring.datasource.formal.mysql.username = root
    spring.datasource.formal.mysql.password = 1314
    spring.datasource.formal.mysql.driver-class-Name = com.mysql.jdbc.Driver
    

    注意事项

    使用多个数据源时,需要添加@Primary注解

    @Primary:自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者

    当然,primary意味着"主要的",类似与SQL语句中的"primary key",有且只能有一个

    开发时,别人将注释掉的代码恢复,出现了多个"@Primary",就导致了如下错误:

    [root@app4 logs]# tail stdout.log 
    Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'javax.sql.DataSource' available: more than one 'primary' bean found among candidates: [mysqlDataSource, formalDataSource, sqlServerDataSource]
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.determinePrimaryCandidate(DefaultListableBeanFactory.java:1381)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.determineAutowireCandidate(DefaultListableBeanFactory.java:1341)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1110)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory$DependencyObjectProvider.getIfUnique(DefaultListableBeanFactory.java:1728)
    	at org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker.getDataSourceInitializer(DataSourceInitializerInvoker.java:100)
    	at org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker.afterPropertiesSet(DataSourceInitializerInvoker.java:62)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1758)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1695)
    	... 32 common frames omitted
    
  • 相关阅读:
    C++-蓝桥杯-大臣的旅费[dfs][树的直径]
    C++-蓝桥杯-剪格子-[2013真题][爆搜?]
    微信公众平台运营指导
    ALGO-84 大小写转换
    ALGO-84 矩阵乘法
    ALGO-49 寻找数组中最大值
    ALGO-92 前缀表达式
    ALO-42 送分啦
    ALGO-90 出现次数最多的整数
    【微信】公众号群发相关使用
  • 原文地址:https://www.cnblogs.com/rosa-king/p/10482954.html
Copyright © 2011-2022 走看看