广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >springboot整合druid及多数据源配置
  • 486
分享到

springboot整合druid及多数据源配置

springbootjavaspring 2023-10-24 18:10:52 486人浏览 安东尼
摘要

前言 本篇主要分两部分 ①SpringBoot整合druid的代码配置,以及druid的监控页面演示;②对实际场景中多数据源的配置使用进行讲解。 一、springboot整合druid的演示demo 可以用idea快速生成一个可运行的dem

前言

本篇主要分两部分 ①SpringBoot整合druid的代码配置,以及druid的监控页面演示;②对实际场景中多数据源的配置使用进行讲解。

一、springboot整合druid的演示demo

可以用idea快速生成一个可运行的demo工程,具体可以参考如何快速创建springboot项目

  • 主要用到的依赖如下:
            org.springframework.boot        spring-boot-starter-data-jdbc                Mysql        mysql-connector-java        runtime                com.alibaba        druid        1.2.17               log4j        log4j        1.2.17                org.springframework.boot        spring-boot-starter-jdbc                org.springframework.boot        spring-boot-starter-WEB    
  •  配置数据库需要的配置文件application.yml(注意格式和空格)
spring:  datasource:    username: root    passWord: root    url: jdbc:mysql://localhost:3306/firsttest?serverTimezone=UTC&useUnicode=true@characterEncoding=utf-8    driver-class-name: com.mysql.jdbc.Driver    type: com.alibaba.druid.pool.DruidDataSource    poolPreparedStatements: true     #配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入     #如果允许时报错  java.lang.ClassNotFoundException: org.apache.log4j.Priority #则导入 log4j 依赖即可,Maven 地址: https://mvnrepository.com/artifact/log4j/log4j     filters: stat,wall,log4j    maxPoolPreparedStatementPerConnectionSize: 20    useGlobalDataSourceStat: true    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
  • 编写durid的启动配置类,加载数据库信息,和druid监控页面的初始化工作 
package com.czing.jdbcdemo.config;import com.alibaba.druid.pool.DruidDataSource;import com.alibaba.druid.support.Http.StatViewServlet;import com.alibaba.druid.support.http.WebStatFilter;import org.springframework.boot.context.properties.ConfigurationProperties;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.servlet.Servlet;import javax.sql.DataSource;import java.util.Arrays;import java.util.HashMap;import java.util.Map;@Configurationpublic class DruidConfig {        @ConfigurationProperties(prefix = "spring.datasource")        @Bean        public DataSource druidDataSource(){            return new DruidDataSource();        }        @Bean    public ServletRegistrationBean druidServletRegistrationBean(){        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean<>(new StatViewServlet(),"/druid@RestControllerpublic class JDBCController {    @Autowired    JdbcTemplate jdbcTemplate;        @RequestMapping("/selectTest")    public List> getTestAccount(){        String sql ="select * from account";        List> maps = jdbcTemplate.queryForList(sql);        return maps;    }}

项目启动日志: 

 

druid的监控页面访问 http://localhost:8080/druid/sql.html

 访问编写的controller测试类:http://localhost:8080/selectTest(访问之后可以观察druid监控页面的情况)

 

二、druid多数据源的配置使用

  • 修改application.yml文件 

spring:  datasource:    local:      username: root      password: root      #注意多数据源配置的时候此处为jdbc-url      jdbc-url: jdbc:mysql://localhost:3306/firsttest?serverTimezone=UTC&useUnicode=true@characterEncoding=utf-8      driver-class-name: com.mysql.jdbc.Driver      type: com.alibaba.druid.pool.DruidDataSource    remote:      username: root      password: root      jdbc-url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true@characterEncoding=utf-8      driver-class-name: com.mysql.jdbc.Driver      type: com.alibaba.druid.pool.DruidDataSource

 

 编写多数据源的配置类:

package com.czing.jdbcdemo.config;import com.czing.jdbcdemo.mult.DataSourceType;import com.czing.jdbcdemo.mult.DynamicDataSource;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 javax.sql.DataSource;import java.util.HashMap;import java.util.Map;@Configurationpublic class DataSourceConfig {    @Bean    @ConfigurationProperties("spring.datasource.remote")    public DataSource remoteDataSource() {        return DataSourceBuilder.create().build();    }    @Bean    @ConfigurationProperties("spring.datasource.local")    public DataSource localDataSource() {        return DataSourceBuilder.create().build();    }    @Bean(name = "dynamicDataSource")    @Primary    public DynamicDataSource dataSource(DataSource remoteDataSource, DataSource localDataSource) {        Map targetDataSources = new HashMap<>();        targetDataSources.put(DataSourceType.REMOTE.name(), remoteDataSource);        targetDataSources.put(DataSourceType.LOCAL.name(), localDataSource);        return new DynamicDataSource(remoteDataSource, targetDataSources);    }}

 使用自定义注解,在查询方法的时候指定对应的数据源:

  • 编写枚举类,用于指定数据源
package com.czing.jdbcdemo.mult;public enum DataSourceType {    REMOTE,    LOCAL}
  • 数据源切换的处理类
package com.czing.jdbcdemo.mult;public class DynamicDataSourceContextHolder {        private static final ThreadLocal CONTEXT_HOLDER = new ThreadLocal<>();        public static void setDataSourceType(String dataSourceType){        System.out.printf("切换到{%s}数据源", dataSourceType);        CONTEXT_HOLDER.set(dataSourceType);    }        public static String getDataSourceType(){        return CONTEXT_HOLDER.get();    }        public static void clearDataSourceType(){        CONTEXT_HOLDER.remove();    }}
  • 数据源信息加载的实现
package com.czing.jdbcdemo.mult;import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;import javax.sql.DataSource;import java.util.Map;public class DynamicDataSource extends AbstractRoutingDataSource {    public DynamicDataSource(DataSource defaultTargetDataSource, Map targetDataSources) {        super.setDefaultTargetDataSource(defaultTargetDataSource);        super.setTargetDataSources(targetDataSources);        // afterPropertiesSet()方法调用时用来将targetDataSources的属性写入resolvedDataSources中的        super.afterPropertiesSet();    }        @Override    protected Object determineCurrentLookupKey() {        return DynamicDataSourceContextHolder.getDataSourceType();    }}
  • 多数据源的配置启动类,注入数据库配置信息
package com.czing.jdbcdemo.config;import com.czing.jdbcdemo.mult.DataSourceType;import com.czing.jdbcdemo.mult.DynamicDataSource;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 javax.sql.DataSource;import java.util.HashMap;import java.util.Map;@Configurationpublic class DataSourceConfig {    @Bean    @ConfigurationProperties("spring.datasource.remote")    public DataSource remoteDataSource() {        return DataSourceBuilder.create().build();    }    @Bean    @ConfigurationProperties("spring.datasource.local")    public DataSource localDataSource() {        return DataSourceBuilder.create().build();    }    @Bean(name = "dynamicDataSource")    @Primary    public DynamicDataSource dataSource(DataSource remoteDataSource, DataSource localDataSource) {        Map targetDataSources = new HashMap<>();        targetDataSources.put(DataSourceType.REMOTE.name(), remoteDataSource);        targetDataSources.put(DataSourceType.LOCAL.name(), localDataSource);        return new DynamicDataSource(remoteDataSource, targetDataSources);    }}
  • 自定义注解
package com.czing.jdbcdemo.mult;import java.lang.annotation.*;@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface DataSource {        DataSourceType value() default DataSourceType.REMOTE;}
  • aop拦截类的实现
package com.czing.jdbcdemo.mult;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Pointcut;import org.aspectj.lang.reflect.MethodSignature;import org.springframework.core.annotation.Order;import org.springframework.stereotype.Component;import java.lang.reflect.Method;@Aspect@Order(1)@Componentpublic class DataSourceAspect {    @Pointcut("@annotation(com.czing.jdbcdemo.mult.DataSource)")    public void dsPointCut() {    }    @Around("dsPointCut()")    public Object around(ProceedingJoinPoint point) throws Throwable {        MethodSignature signature = (MethodSignature) point.getSignature();        Method method = signature.getMethod();        DataSource dataSource = method.getAnnotation(DataSource.class);        if (dataSource != null) {            DynamicDataSourceContextHolder.setDataSourceType(dataSource.value().name());        }        try {            return point.proceed();        } finally {            // 销毁数据源 在执行方法之后            DynamicDataSourceContextHolder.clearDataSourceType();        }    }}
  • controller测试类的编写验证
package com.czing.jdbcdemo.controller;import com.czing.jdbcdemo.mult.DataSource;import com.czing.jdbcdemo.mult.DataSourceType;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.util.List;import java.util.Map;@RestControllerpublic class JDBCController {    @Autowired    JdbcTemplate jdbcTemplate;        @RequestMapping("/selectTest")    @DataSource(value=DataSourceType.LOCAL)    public List> getTestAccount(){        String sql ="select * from account";        List> maps = jdbcTemplate.queryForList(sql);        return maps;    }        @RequestMapping("/selectRemote")    @DataSource(DataSourceType.REMOTE)    public List> getRemoteAccount(){        String sql ="select * from account";        List> maps = jdbcTemplate.queryForList(sql);        return maps;    }}
  •  启动项目,分别访问两个接口查询不同的数据源

http://localhost:8080/selectTest 的访问数据:

http://localhost:8080/selectRemote 的访问数据

 结语

以上为springboot实现druid配置查询的demo,并且演示了如何实现多数据源配置动态切换的代码实现,注意多数据源配置的时候url的配置为jdbc-url,其他运行中遇到的问题欢迎留言交流,希望对您的学习有所帮助。

 

 

来源地址:https://blog.csdn.net/weixin_48583915/article/details/130631197

--结束END--

本文标题: springboot整合druid及多数据源配置

本文链接: https://www.lsjlt.com/news/441763.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • springboot整合druid及多数据源配置
    前言 本篇主要分两部分 ①springboot整合druid的代码配置,以及druid的监控页面演示;②对实际场景中多数据源的配置使用进行讲解。 一、springboot整合druid的演示demo 可以用idea快速生成一个可运行的dem...
    99+
    2023-10-24
    spring boot java spring
  • springboot整合druid及配置依赖
    目录Druid简介配置依赖基本-配置信息扩展-配置 druid 监控功能Druid简介 Java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池。 ...
    99+
    2022-11-12
  • SpringBoot怎么整合Druid数据源
    本篇内容主要讲解“SpringBoot怎么整合Druid数据源”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot怎么整合Druid数据源”吧! SprintBoot 默...
    99+
    2023-07-02
  • springboot整合多数据源配置方式
    目录简介一、表结构二、多数据源整合1. springboot+mybatis使用分包方式整合1.1 主要依赖包1.2 application.yml 配置文件1.3 建立连接数据源的...
    99+
    2022-11-12
  • SpringBoot中如何整合Druid数据源
    这篇文章主要介绍“SpringBoot中如何整合Druid数据源”,在日常操作中,相信很多人在SpringBoot中如何整合Druid数据源问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SpringBoot中...
    99+
    2023-06-08
  • springboot mybatis druid配置多数据源教程
    目录1、项目代码结构2、导入基本依赖3、配置多数据源4、配置类5、启动类6、测试使用的表7、测试表对应的实体类8、持久层:dao层接口1、项目代码结构 2、导入基本依赖 记得需要导...
    99+
    2022-11-12
  • 详解Spring Boot整合Mybatis实现 Druid多数据源配置
    一、多数据源的应用场景目前,业界流行的数据操作框架是 Mybatis,那 Druid 是什么呢?Druid 是 Java 的数据库连接池组件。Druid 能够提供强大的监控和扩展功能。比如可以监控 SQL ,在监控业务可以查询慢查询 SQL...
    99+
    2023-05-31
    spring 多数据源 spring boo
  • SpringBoot使用druid配置多数据源问题
    目录一、背景二、版本介绍三、项目结构四、maven依赖 五、yaml配置文件六、数据源配置文件七、启动类配置八、druid管理页面总结一、背景 使用spring boot配...
    99+
    2023-03-11
    SpringBoot配置多数据源 druid配置多数据源 druid多数据源
  • SpringBoot怎么使用druid配置多数据源
    这篇“SpringBoot怎么使用druid配置多数据源”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SpringBoot怎...
    99+
    2023-07-05
  • SpringBoot怎么进行整合Druid数据源
    今天小编给大家分享一下SpringBoot怎么进行整合Druid数据源的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.自定...
    99+
    2023-07-02
  • 详解Springboot之整合JDBCTemplate配置多数据源
    目录一、前言二、配置文件三、数据源配置类一、前言 现在在我们的项目中,使用多数据源已经是很常见的,下面,这里总结一下springboot整合jdbcTemplate配置多数据源的代码...
    99+
    2022-11-12
  • springboot配置druid多数据源的示例代码
    目录1、配置多数据源所需要的jar2、配置多数据源所需要的工具类3、DataSourceType 枚举类4、DruidProperties druid 配置属性5、DruidConf...
    99+
    2022-11-13
  • SpringBoot整合Druid数据源的方法实现
    目录1、在创建SpringBoot项目的时候,在pom.xml maven中添加依赖:2、在 application.yml(或aproperties)中添加相应的配置:3、 log...
    99+
    2022-11-13
  • Springboot整合多数据源配置流程是什么
    这篇文章主要讲解了“Springboot整合多数据源配置流程是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Springboot整合多数据源配置流程是什么”吧!主要介绍两种整合方式,分别...
    99+
    2023-07-05
  • Springboot整合JPA配置多数据源流程详解
    目录1. Maven2. 基本配置DataSource3. 多数据源配置3.1 JpaConfigOracle3.2 JpaConfigMysql4. Dao层接口1. Maven ...
    99+
    2022-11-21
    Springboot整合JPA配置多数据源 Springboot多数据源
  • Springboot多数据源配置之整合dynamic-datasource方式
    目录多数据源配置之整合dynamic-datasourcePOM里加入依赖包yml增加多数据配置:在需要切换数据源的类或方法上加@DS注解dynamic-datasource-spr...
    99+
    2023-03-21
    Springboot多数据源配置 Springboot整合dynamic-datasource Springboot dynamic-datasource
  • Springboot多数据源配置之怎么整合dynamic-datasource
    本篇内容介绍了“Springboot多数据源配置之怎么整合dynamic-datasource”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2023-07-05
  • springboot 中怎么配置DRUID数据源
    本篇文章为大家展示了springboot 中怎么配置DRUID数据源,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.修改pom.xml<dependency>  &...
    99+
    2023-06-02
  • SpringBoot整合JDBC、Druid数据源的示例代码
    目录1.SpringBoot整合JDBCTemplate1.1.导入jdbc相关依赖包1.2.yaml配置数据源2.SpringBoot整合DruidDataSource2.1.Dr...
    99+
    2022-11-12
  • SpringBoot详解如何进行整合Druid数据源
    目录1.自定义方式1.添加依赖2.编写配置3.测试2.starter方式(推荐)1.添加依赖2.编写配置3.测试Druid是数据库连接池,它能够提供强大的监控和扩展功能。官方文档 S...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作