zoukankan      html  css  js  c++  java
  • 关于springboot访问多个mysql库

    源码

    依赖

    注:github中源码依赖是精简后的结果.

        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!-- spring's support of jdbc -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</artifactId>
            </dependency>
            <!-- mysql connector -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
            <!-- spring's support of test -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    

    配置

    取消数据库自动配置

    • 自动配置默认加载spring.datasource.*配置
    • 若此配置不存在,spring boot报错
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
    import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
    
    @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class})
    public class Application {
        public static void main(String args[]) {
            SpringApplication.run(Application.class, args);
        }
    }
    

    配置多个数据库

    src/main/resources/application.yml

    src:
      datasource:
        jdbc-url: jdbc:mysql://{serverIP}:{port}/{db}?useUnicode=true&characterEncoding=utf-8&serverTimezone=CST
        username: user
        password: pwd
    
    target:
      datasource:
        jdbc-url: jdbc:mysql://{serverIP}:{port}/{db}?useUnicode=true&characterEncoding=utf-8&serverTimezone=CST
          username: user
          password: pwd
    

    加载多数据库配置

    • @Primary指定默认的主要数据库
    • @Bean的name属性指定名称,可与@Qualifier配置使用,装载指定名称的bean
    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 {
    
        @Primary
        @Bean(name = "srcDs")
        @ConfigurationProperties(prefix = "src.datasource")
        public DataSource srcDs() {
            return DataSourceBuilder.create().build();
        }
    
        @Bean(name = "targetDs")
        @ConfigurationProperties(prefix = "target.datasource")
        public DataSource targetDs() {
            return DataSourceBuilder.create().build();
        }
    
        @Bean(name = "srcJdbcTemplate")
        public JdbcTemplate srcJdbcTemplate(
                @Qualifier("srcDs") DataSource dataSource) {
            return new JdbcTemplate(dataSource);
        }
    
        @Bean(name = "targetJdbcTemplate")
        public JdbcTemplate targetJdbcTemplate(
                @Qualifier("targetDs") DataSource dataSource) {
            return new JdbcTemplate(dataSource);
        }
    
    }
    

    使用

    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.jdbc.core.JdbcTemplate;
    import org.springframework.test.context.junit4.SpringRunner;
    
    import java.util.List;
    import java.util.Map;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = Application.class)
    public class DataSourcesTest {
    
        @Autowired
        @Qualifier("srcJdbcTemplate")
        protected JdbcTemplate srcJdbcTemplate;
    
        @Autowired
        @Qualifier("targetJdbcTemplate")
        protected JdbcTemplate targetJdbcTemplate;
    
        @Test
        public void test() throws Exception {
    
            List<Map<String, Object>> srcMaps = srcJdbcTemplate.queryForList(" select * from user limit 10 ");
    
            List<Map<String, Object>> targetMaps = targetJdbcTemplate.queryForList(" select * from user limit 10 ");
    
            return;
        }
    
    }
    
  • 相关阅读:
    MacOS Sierra允许运行任何来源的程序
    Windows Server2008 R2中的角色
    Linux根目录解析
    Linux安装配置SVN服务器
    Linux6.x修改出eth0网卡的解决方法
    如何利用mount命令挂载另一台服务器上的目录
    Arcgis水文分析-Dem提取集水区
    前端布局之Flex布局
    其实我就是想好好的写写代码(一个伪程序猿的独白)
    WebApi关于配置全局返回Json数据格式时间以及命名小写
  • 原文地址:https://www.cnblogs.com/CoolSoul/p/11785017.html
Copyright © 2011-2022 走看看