springboot 數據庫連接 多數據源配置(最終篇)

1、Bean配置。這裏bean名字和方法一樣,bean名字註冊

package com.tx.config;

import com.zaxxer.hikari.HikariDataSource;
import lombok.extern.slf4j.Slf4j;
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;

/**
 * 數據源配置
 *
 * @author bluewelkin
 * @date 2019-04-14 12:03
 * @since 1.0.0
 */
@Slf4j
@Configuration
public class DataSourceConfig {

    @Bean
    @ConfigurationProperties("spring.datasource")
    @Primary
    public DataSource dataSource4oa() {
        System.out.println("創建主數據庫連接池");
        return new HikariDataSource();
    }

    /*多數據源之oa測試環境數據源*/
    @Bean
    @ConfigurationProperties("spring.datasource.nimo")
    public DataSource dataSource4nimo() {
        System.out.println("創建nimo測試數據庫連接池");
        return new HikariDataSource();
    }
    /*多數據源之oa測試環境數據源*/
    @Bean
    @ConfigurationProperties("spring.datasource.anchor")
    public DataSource dataSource4anchor() {
        System.out.println("創建anchor測試數據庫連接池");
        return new HikariDataSource();
    }

}

2、配置文件,要jdbc-url,不然會報錯。多個數據源配置,和上面一 一對應

server.port=8087


spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.jdbc-url=jdbc:mysql://10.64.102.29/hy_oa?useUnicode=true&rewriteBatchedStatements=true
spring.datasource.username=hyoa
spring.datasource.password=123456789
# 等待連接池分配連接的最大時長(毫秒),超過這個時長還沒可用的連接則發生SQLException, 默認:30秒
spring.datasource.hikari.connection-timeout=30000
# 連接的生命時長(毫秒),超時而且沒被使用則被釋放(retired),默認:30分鐘 1800000ms
spring.datasource.hikari.max-lifetime=1800000
spring.datasource.hikari.minimum-idle=5
# 最大連接數
spring.datasource.hikari.maximum-pool-size=20
# 連接超時的最大時長(毫秒),超時則被釋放(retired),默認:10分鐘
spring.datasource.hikari.idle-timeout=600000
# 自動提交
spring.datasource.hikari.auto-commit=true
# 連接池名字
spring.datasource.hikari.pool-name=DateSourceHikariCP
spring.datasource.hikari.connection-test-query=SELECT 1


spring.datasource.anchor.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.anchor.jdbc-url=jdbc:mysql://127.0.0.1:3306/mysql1?useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.anchor.username=root
spring.datasource.anchor.password=root


spring.datasource.nimo.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.nimo.jdbc-url=jdbc:mysql://127.0.0.1:3306/mysql2?useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.nimo.username=root
spring.datasource.nimo.password=root

3、測試,jdbctemplate 默認注入,說明Hikari 默認就有,同時要哪個數據源,注入相應的bean就可以,qulifiey就可以

package com.tx;

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 javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = SdkApiApplication.class)
public class AppHikariTest {
    @Autowired
    private DataSource dataSource;
     @Autowired
      private JdbcTemplate jdbcTemplate;
            @Test
            public void test() throws SQLException {
                Connection data = dataSource.getConnection();
//                輸出結果如下,數據源獲取成功,說明SpringBoot2.1.7默認使用的是Hikari連接池**(SpringBoot2.0之前使用的是tomcat連接池)
                System.out.println("------" + data.getClass());
                System.out.println("------" + dataSource.getClass());

                data.close();
            }

    @Test
    public void test2() throws SQLException {
        List<Map<String, Object>> list = jdbcTemplate.queryForList("SELECT * FROM employee");
        System.out.println("------" + list.get(0));
    }

    @Autowired
    @Qualifier("dataSource4nimo")
    private DataSource dataSource4nimo;
    @Autowired
    @Qualifier("dataSource4anchor")
    private DataSource dataSource4anchor;


    @Test
    public void test3()  {
        System.out.println("測試與oa數據庫連接");
        String sql = "select count(id) from employee ";
        Integer num = new JdbcTemplate(dataSource4nimo).queryForObject(sql, Integer.class);
        System.out.println(num);
    }

    @Test
    public void test4()  {
        System.out.println("測試與oa數據庫連接");
        String sql = "select count(id) from employee ";
        Integer num = new JdbcTemplate(dataSource4anchor).queryForObject(sql, Integer.class);
        System.out.println(num);
    }



}

最終成功

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章