Spring Boot 自定义数据源DruidDataSource代码

那么关于Spring Boot自定义数据源DruidDataSource的完整攻略,主要分为以下几个步骤:

  1. 导入相关依赖

首先,在Spring Boot项目中,需要导入Druid和JDBC相关的依赖。可以在pom.xml文件中加入如下代码:

<!-- 导入Druid数据源依赖 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.6</version>
</dependency>

<!-- 导入JDBC依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
    <version>2.4.3</version>
</dependency>
  1. 配置Druid数据源

其次,我们需要在application.properties或application.yml文件中配置Druid数据源。可配置的项如下:

spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root

#Druid参数配置
spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-active=20
spring.datasource.druid.max-wait=60000
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
spring.datasource.druid.pool-prepared-statements=true
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
spring.datasource.druid.log-slow-sql=true
spring.datasource.druid.allow=true
spring.datasource.druid.remove-abandoned=true
spring.datasource.druid.remove-abandoned-timeout=1800
  1. 提供自定义Druid数据源

接着,我们需要定义一个类,该类继承AbstractRoutingDataSource抽象类,用于切换不同的数据源。示例代码如下:

public class DynamicDataSource extends AbstractRoutingDataSource {

    public static final ThreadLocal<String> contextHolder = new ThreadLocal<>();

    @Override
    protected Object determineCurrentLookupKey() {
        return getDataSource();
    }

    public static void setDataSource(String dataSource) {
        contextHolder.set(dataSource);
    }

    public static String getDataSource() {
        return contextHolder.get();
    }

    public static void clearDataSource() {
        contextHolder.remove();
    }

}
  1. 配置自定义的数据源

最后,我们需要在Spring Boot的配置文件中设置我们刚才定义的数据源:

@Configuration
public class DataSourceConfig {

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.druid")
    public DruidDataSource dataSource() {
        return new DruidDataSource();
    }

    @Bean(name = "dataSourceProxy")
    public DataSource dataSourceProxy() {
        Map<Object, Object> targetDataSources = new HashMap<>();
        DruidDataSource dataSource = dataSource();
        targetDataSources.put("dataSource", dataSource);
        DynamicDataSource dataSourceProxy = new DynamicDataSource();
        dataSourceProxy.setTargetDataSources(targetDataSources);
        dataSourceProxy.setDefaultTargetDataSource(dataSource);
        return dataSourceProxy;
    }

    @Bean
    public JdbcTemplate jdbcTemplate(DataSource dataSourceProxy) {
        return new JdbcTemplate(dataSourceProxy);
    }
}

至此,我们结束了整个自定义数据源DruidDataSource的配置过程。

下面是两个示例:

  1. 示例一:切换数据源
@Service
public class UserService {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    public void addUser(User user) {
        String sql = "insert into user(id, name, age) values(?, ?, ?)";
        Object[] params = new Object[] {user.getId(), user.getName(), user.getAge()};
        int count = jdbcTemplate.update(sql, params);
        System.out.println("新增用户数:" + count);
    }

    public void findAll() {
        DynamicDataSource.setDataSource("dataSource2");
        String sql = "select * from user";
        List<User> userList = jdbcTemplate.query(sql, new BeanPropertyRowMapper(User.class));
        System.out.println("查询结果:" + userList);
        DynamicDataSource.clearDataSource();
    }
}
  1. 示例二:手动配置数据源
@Configuration
public class DataSourceConfig {

    @Bean
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai");
        dataSource.setUsername("root");
        dataSource.setPassword("root");
        dataSource.setInitialSize(5);
        dataSource.setMinIdle(5);
        dataSource.setMaxActive(20);
        dataSource.setMaxWait(60000);
        dataSource.setTestWhileIdle(true);
        dataSource.setTestOnBorrow(false);
        dataSource.setTestOnReturn(false);
        dataSource.setPoolPreparedStatements(true);
        dataSource.setMaxPoolPreparedStatementPerConnectionSize(20);
        dataSource.setLogSlowSql(true);
        return dataSource;
    }

    @Bean(name = "dataSourceProxy")
    public DataSource dataSourceProxy() {
        Map<Object, Object> targetDataSources = new HashMap<>();
        DruidDataSource dataSource = (DruidDataSource) dataSource();
        targetDataSources.put("dataSource", dataSource);
        DynamicDataSource dataSourceProxy = new DynamicDataSource();
        dataSourceProxy.setTargetDataSources(targetDataSources);
        dataSourceProxy.setDefaultTargetDataSource(dataSource);
        return dataSourceProxy;
    }

    @Bean
    public JdbcTemplate jdbcTemplate(DataSource dataSourceProxy) {
        return new JdbcTemplate(dataSourceProxy);
    }
}

以上就是对Spring Boot自定义数据源DruidDataSource的完整攻略和示例讲解。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot 自定义数据源DruidDataSource代码 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • C#如何从byte[]中直接读取Structure实例详解

    这里是一份完整的攻略,教你在 C# 中如何从 byte[] 中直接读取 Structure 实例。 什么是结构体(Structure) 结构体是 C# 中一种可自定义数据类型。可以将结构体看作是一种轻量级的类,它包含了一组相关的数据类型,可以通过单个变量进行访问和管理。每个结构体变量在内存中都是独立的。 如何从byte[]中直接读取Structure实例 由…

    Java 2023年5月19日
    00
  • GC 日志的作用是什么?

    以下是关于 GC 日志的作用的完整使用攻略: GC 日志的作用是什么? GC 日志是 Java 虚拟机在进行垃圾回收时所产生的日志信息,它记录了垃圾回收的详细过程,包括垃圾回收的类型、回收的时间、回收的对象数量、回收所占用的时间等。GC 日志可以帮助开发人员了解垃圾回收的情况,优化程序的性能和效率。 GC 日志的作用 GC 日志的作用主要有以下几点: 监控垃…

    Java 2023年5月12日
    00
  • netty中pipeline异常事件分析

    请允许我对“netty中pipeline异常事件分析”的攻略进行详细说明。 1. 理解pipeline异常事件 在Netty中,ChannelPipeline是消息处理的管道,消息在这条管道中流转,每个节点都可以做一些特定的处理。 在应用程序的运行过程中,有可能会发生一些异常情况,比如消息处理节点出错了,网络连接中断等。为了保证应用程序的健壮性,Netty提…

    Java 2023年5月25日
    00
  • jsp 中HttpClient中的POST方法实例详解

    下面我将详细讲解“jsp 中HttpClient中的POST方法实例详解”的攻略。 1.介绍 首先,我们需要了解 HttpClient 的作用。HttpClient 是 Apache 的开源 HTTP 客户端,可用于与 HTTP 服务器通信。它支持 HTTP 协议、HTTPS 协议、FTP 协议等。 本文主要介绍 HttpClient 中的 POST 方法,…

    Java 2023年6月15日
    00
  • JAVA序列化和反序列化的底层实现原理解析

    JAVA序列化和反序列化的底层实现原理解析 序列化与反序列化的概念 序列化 序列化是指将对象转换成可传输的格式(例如字节码),并且可以在将来重新创建出与原对象完全相同的副本。序列化操作可以在网络上传输对象,或者将对象存储到本地磁盘上。 反序列化 反序列化是指将序列化后的数据流还原为原来的对象的操作。也就是说,反序列化能够重新创建出一个和已序列化的对象完全相同…

    Java 2023年5月19日
    00
  • Java Swagger使用教程

    下面是Java Swagger使用教程的完整攻略: 1. 什么是Swagger? Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务。Swagger包含了许多强大的工具,可以使用它们来构建、文档化和测试RESTful API。 2. Swagger的优点 Swagger最大的好处是它使API文档变得容易,让API…

    Java 2023年6月15日
    00
  • tomcat部署简单的html静态网页的方法

    下面我将详细讲解“Tomcat部署简单的HTML静态网页的方法”的完整攻略。步骤如下: 步骤一:下载和安装Tomcat 进入Tomcat的官方网站:https://tomcat.apache.org/ 点击左侧的“Downloads”进入下载页面,选择对应版本的Tomcat压缩包进行下载。 解压下载好的Tomcat压缩包。 在Tomcat的bin目录下找到s…

    Java 2023年5月19日
    00
  • spring boot实战之内嵌容器tomcat配置

    这里是“spring boot实战之内嵌容器tomcat配置”的完整攻略。 简介 Spring Boot作为现今最火的Java开发框架,可以很方便地搭建Web应用程序。其中内嵌容器Tomcat作为Spring Boot的默认Web容器,在使用中需要进行相应的配置来满足不同的需求。 配置内嵌Tomcat端口号 内嵌Tomcat默认的端口号为8080,但是在实际…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部