SpringBoot 设置多数据源访问

1、添加maven依赖注入

        <!--properties所需依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

2、修改application.yml配置文件

mysql-logic-db:
  name: logic
  driver-class-name: com.mysql.jdbc.Driver
  url: jdbc:mysql://192.168.1.113:3306/test1?useUnicode=true&characterEncoding=utf-8
  username: root
  password: root

mysql-dao-db:
  name: dao
  driver-class-name: com.mysql.jdbc.Driver
  url: jdbc:mysql://192.168.1.113:3306/test2?useUnicode=true&characterEncoding=utf-8
  username: root
  password: root

3、多数据源配置

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 javax.sql.DataSource;


/**
 * 多数据源配置(mysql,oracle)
 * @author 陈梓平
 * @date 2017/9/27.
 */
@Configuration
public class MultipleDBConfig {
    @Bean(name = "mysqlDB_logic")
    @Primary
    @ConfigurationProperties(prefix = "mysql-logic-db")
    public DataSource mysqlLogicDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "mysqlDB_dao")
    @ConfigurationProperties(prefix = "mysql-dao-db")
    public DataSource mysqlDAODataSource() {
        return DataSourceBuilder.create().build();
    }
}

注解 备注
@Primary 优先方案,被注解的实现,优先被注入
@Qualifier 先声明后使用,相当于多个实现起多个不同的名字,注入时候告诉我你要注入哪个
4、单元测试多数据源

/**
 * 单元测试多数据源
 * @author 陈梓平
 * @date 2017/9/27.
 */

@RunWith(SpringRunner.class)
@SpringBootTest
public class TestMultipleDB {

    private Logger logger = LoggerFactory.getLogger(TestMultipleDB.class);

    @Autowired
    @Qualifier("mysqlDB_logic")
    private DataSource mysqlDB_logic;

    @Autowired
    @Qualifier("mysqlDB_dao")
    private DataSource mysqlDB_dao;

    @Test
    public void testMysqlDB_logic() throws SQLException {
        if (mysqlDB_logic!=null){
            Connection connection = mysqlDB_logic.getConnection();
            PreparedStatement ppst = null;
            ResultSet rs = null;
            ppst = connection.prepareStatement("SELECT id FROM journal");
            rs = ppst.executeQuery();
            List<String> list = new ArrayList<>();
            while (rs.next()) {
                list.add( rs.getString(1));
            }
            logger.info("size="+list.size());
        }
    }

    @Test
    public void testMysqlDB_dao() throws SQLException {
        if (mysqlDB_dao!=null){
            Connection connection = mysqlDB_dao.getConnection();
            PreparedStatement ppst = null;
            ResultSet rs = null;
            ppst = connection.prepareStatement("SELECT nId FROM news");
            rs = ppst.executeQuery();
            List<String> list = new ArrayList<>();
            while (rs.next()) {
                list.add( rs.getString(1));
            }
            logger.info("size="+list.size());
        }
    }
}

5、测试结果

结果2
结果1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot支持多数据配置,可以使用JPA来访问多个数据库。 首先需要在application.properties文件中配置数据: ``` # 数据1 spring.datasource.url=jdbc:mysql://localhost:3306/test1 spring.datasource.username=root spring.datasource.password=root # 数据2 spring.datasource.test2.url=jdbc:mysql://localhost:3306/test2 spring.datasource.test2.username=root spring.datasource.test2.password=root ``` 然后在配置类中配置多个数据: ``` @Configuration @EnableTransactionManagement @EnableJpaRepositories( entityManagerFactoryRef = "entityManagerFactory1", transactionManagerRef = "transactionManager1", basePackages = { "com.example.repository1" }) public class DataSource1Config { @Primary @Bean(name = "dataSource1") @ConfigurationProperties(prefix = "spring.datasource") public DataSource dataSource() { return DataSourceBuilder.create().build(); } @Primary @Bean(name = "entityManagerFactory1") public LocalContainerEntityManagerFactoryBean entityManagerFactory( EntityManagerFactoryBuilder builder, @Qualifier("dataSource1") DataSource dataSource) { return builder .dataSource(dataSource) .packages("com.example.entity1") .persistenceUnit("dataSource1") .build(); } @Primary @Bean(name = "transactionManager1") public PlatformTransactionManager transactionManager( @Qualifier("entityManagerFactory1") EntityManagerFactory entityManagerFactory) { return new JpaTransactionManager(entityManagerFactory); } } @Configuration @EnableTransactionManagement @EnableJpaRepositories( entityManagerFactoryRef = "entityManagerFactory2", transactionManagerRef = "transactionManager2", basePackages = { "com.example.repository2" }) public class DataSource2Config { @Bean(name = "dataSource2") @ConfigurationProperties(prefix = "spring.datasource.test2") public DataSource dataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "entityManagerFactory2") public LocalContainerEntityManagerFactoryBean entityManagerFactory( EntityManagerFactoryBuilder builder, @Qualifier("dataSource2") DataSource dataSource) { return builder .dataSource(dataSource) .packages("com.example.entity2") .persistenceUnit("dataSource2") .build(); } @Bean(name = "transactionManager2") public PlatformTransactionManager transactionManager( @Qualifier("entityManagerFactory2") EntityManagerFactory entityManagerFactory) { return new JpaTransactionManager(entityManagerFactory); } } ``` 最后在服务类中指定使用哪个数据: ``` @Service @Transactional(transactionManager = "transactionManager1") public class Service1 { @Autowired private Repository1 repository1; // ... } @Service @Transactional(transactionManager = "transactionManager2") public class Service2 { @Autowired private Repository2 repository2; // ... } ``` 以上就是使用Spring Boot和JPA实现多数据的步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值