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;
        }
    
    }
    
  • 相关阅读:
    35 点击全图后发现地图“不见了”
    34 文件地理数据库(GDB)变文件夹了怎么办
    33 ArcToolBox学习系列之数据管理工具箱——投影与变换(Projections and Transformations)未完待续……
    32 ArcToolBox学习系列之数据管理工具箱——属性域(Domains)的两种创建及使用方式
    30 ArcGIS 许可管理器常见问题(持续更新中……)
    算法竞赛入门经典 第三章 简要题解
    SCOI2003 字符串折叠 & NEERC2002 Folding 题解
    Vjios 1617 超级教主
    Codeforces Round #652 题解
    Codeforces Round #655 题解
  • 原文地址:https://www.cnblogs.com/CoolSoul/p/11785017.html
Copyright © 2011-2022 走看看