springBoot多数据源使用、配置

作者 : admin 本文共4256个字,预计阅读时间需要11分钟 发布时间: 2024-06-12 共1人阅读

又参加了一个新的项目,虽然是去年做的项目,拿来复用改造,但是也学到了很多。这个项目会用到其他项目的数据,如果调用他们的接口取数据,我还是觉得太麻烦了。打算直接配置多数据源。

然后去另一个数据库系统中取出数据。

所以就去了解和学习了一下

druid和dynamic配合的多数据源,用起来还是挺简单的:



    4.0.0

    org.example
    dsjyTest
    1.0-SNAPSHOT
    
        org.springframework.boot
        spring-boot-starter-parent
        2.7.8
        
    
    
        
            com.baomidou
            mybatis-plus-boot-starter
            3.5.3.1
        
        
            org.springframework.boot
            spring-boot-starter
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
        
            com.alibaba
            druid-spring-boot-starter
            1.1.22
        
        
        
            mysql
            mysql-connector-java
            8.0.29
        
        
        
            com.baomidou
            dynamic-datasource-spring-boot-starter
            3.1.1
        
        
            org.projectlombok
            lombok
            1.18.30
        
        
            org.springframework.boot
            spring-boot-starter-web
            2.7.17
        
    
    
        8
        8
        UTF-8
    


v

然后就是写application:

spring:
  datasource:
    dynamic:
        #默认主库,平时默认查询这个库
      primary: master
      strict: false
      datasource:
        #数据源名称1
        master:
          type: com.alibaba.druid.pool.DruidDataSource
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://192.168.126.153:3306/dsjy?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
          username: root
          password: 123456
        #数据源名称2
        device:
          type: com.alibaba.druid.pool.DruidDataSource
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
          username: root
          password: 123456

就是配置两个数据库信息,后续使用@DS(“数据源名称”)

将数据源配置到bean中:

package com.dsjy.config;

import javax.annotation.Resource;
import javax.sql.DataSource;

import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
import com.baomidou.dynamic.datasource.provider.DynamicDataSourceProvider;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties;

/**
 * 动态数据源配置
 *
 * @author admin
 */
@Configuration
@AutoConfigureBefore({DynamicDataSourceAutoConfiguration.class, SpringBootConfiguration.class})
public class DataSourceConfiguration {

    @Resource
    private DynamicDataSourceProperties properties;

    /**
     * 将动态数据源设置为首选的
     * 当spring存在多个数据源时, 自动注入的是首选的对象
     */
    @Primary
    @Bean
    public DataSource dataSource(DynamicDataSourceProvider dynamicDataSourceProvider) {
        DynamicRoutingDataSource dataSource = new DynamicRoutingDataSource();
        dataSource.setPrimary(properties.getPrimary());
        dataSource.setStrict(properties.getStrict());
        dataSource.setStrategy(properties.getStrategy());
        dataSource.setProvider(dynamicDataSourceProvider);
        dataSource.setP6spy(properties.getP6spy());
        dataSource.setSeata(properties.getSeata());
        return dataSource;
    }

}

druid监控页面配置:

package com.dsjy.config;


import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

@Configuration
public class DruidConfig {



    /**
     * 配置Druid的监控
     * 配置一个管理后台的Servlet
     * @return
     */
    @Bean
    public ServletRegistrationBean statViewServlet(){
        ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
        Map initParams = new HashMap(4);
        //配置druid页面监控的账户密码
        initParams.put("loginUsername", "sh");
        initParams.put("loginPassword","123456");
        bean.setInitParameters(initParams);
        return bean;
    }


    /**
     * 配置一个web监控的filter
     * @return
     */
    @Bean
    public FilterRegistrationBean webStatFilter(){
        FilterRegistrationBean bean = new FilterRegistrationBean();
        bean.setFilter(new WebStatFilter());

        Map initParams = new HashMap(16);
        initParams.put("exclusions","*.js,*.css,/druid/*");

        bean.setInitParameters(initParams);

        bean.setUrlPatterns(Arrays.asList("/*"));

        return  bean;
    }
}

配置了druid之后,项目运行起来就能访问,http://127.0.0.1:8080/druid,可以看见有两个数据源可以使用。

springBoot多数据源使用、配置插图 

package com.dsjy.mapper;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsjy.entity.UserEntity;

/**
 * @program: springBoot
 * @author: quxiao
 * @create: 2024-06-12 15:36
 **/
public interface UserMapper extends BaseMapper {
    @DS("master")
    String selectNumber1();

    @DS("device")
    String selectNumber2();
}

使用@DS(“数据源名称”) ,就能指定使用某一个数据源。还可以使用

springBoot多数据源使用、配置插图(1)

本站无任何商业行为
个人在线分享 » springBoot多数据源使用、配置
E-->