SpringBoot整合Druid数据源过程详解

以下是SpringBoot整合Druid数据源的详细攻略。

准备工作

引入相关依赖

为了使用Druid数据源,我们需要在pom.xml文件中添加以下依赖:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.2</version>
</dependency>

在配置文件中添加数据库信息

我们需要在application.propertiesapplication.yml中添加数据库信息,示例:

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=root123

整合Druid数据源

添加Druid数据源配置

application.propertiesapplication.yml中添加Druid配置信息,示例:

spring.datasource.druid.initial-size=5
spring.datasource.druid.max-active=20
spring.datasource.druid.max-wait=60000
spring.datasource.druid.time-between-eviction-runs-millis=60000
spring.datasource.druid.min-evictable-idle-time-millis=300000
spring.datasource.druid.validation-query=SELECT 'x' FROM DUAL
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.filters=stat,wall,log4j
spring.datasource.druid.connection-properties=config.decrypt=false

配置Druid监控

为了更好地管理Druid连接池的使用情况,我们需要配置Druid监控信息。在SpringBoot中,我们需要使用ServletRegistrationBeanFilterRegistrationBean两个类来配置Druid监控。示例:

@Configuration
public class DruidConfig {
    @Bean
    public ServletRegistrationBean<StatViewServlet> statViewServlet() {
        ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
        registrationBean.addInitParameter("allow", "127.0.0.1");
        registrationBean.addInitParameter("loginUsername", "admin");
        registrationBean.addInitParameter("loginPassword", "admin");
        registrationBean.addInitParameter("resetEnable", "false");
        return registrationBean;
    }

    @Bean
    public FilterRegistrationBean<WebStatFilter> webStatFilter() {
        FilterRegistrationBean<WebStatFilter> registrationBean = new FilterRegistrationBean<>(new WebStatFilter());
        registrationBean.addUrlPatterns("/*");
        registrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*");
        return registrationBean;
    }
}

示例

配置多数据源

在实际应用中,我们可能需要连接多个数据库。这时候,我们可以使用SpringBoot的多数据源配置。首先,在application.yml中添加多数据源的配置信息:

spring.datasource.test1.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.test1.url=jdbc:mysql://localhost:3306/db1
spring.datasource.test1.username=root
spring.datasource.test1.password=root123

spring.datasource.test2.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.test2.url=jdbc:mysql://localhost:3306/db2
spring.datasource.test2.username=root
spring.datasource.test2.password=root123

然后,在代码中通过@Qualifier注解和@Primary注解表示使用哪个数据源,示例:

@Configuration
public class DataSourceConfig {
    @Bean
    @Qualifier("test1")
    @ConfigurationProperties(prefix = "spring.datasource.test1")
    public DataSource dataSourceTest1() {
        return DruidDataSourceBuilder.create().build();
    }

    @Bean
    @Qualifier("test2")
    @ConfigurationProperties(prefix = "spring.datasource.test2")
    public DataSource dataSourceTest2() {
        return DruidDataSourceBuilder.create().build();
    }

    @Bean
    @Primary
    public DynamicDataSource dataSource() {
        Map<Object, Object> targetDataSources = new HashMap<>();
        targetDataSources.put("test1", dataSourceTest1());
        targetDataSources.put("test2", dataSourceTest2());

        DynamicDataSource dynamicDataSource = new DynamicDataSource();
        dynamicDataSource.setTargetDataSources(targetDataSources);
        dynamicDataSource.setDefaultTargetDataSource(dataSourceTest1());
        return dynamicDataSource;
    }
}

@Service
public class TestService {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    public List<Map<String, Object>> queryTest1() {
        return jdbcTemplate.queryForList("SELECT * FROM table1");
    }

    public List<Map<String, Object>> queryTest2() {
        return jdbcTemplate.queryForList("SELECT * FROM table2");
    }

}

配置Druid连接池的参数

我们可以在配置文件中指定Druid连接池的各种参数来控制连接池的使用。以下是一些重要的配置参数:

  • initialSize:初始化连接池大小,默认为0;
  • maxActive:最大活动连接数,默认为8;
  • minIdle:最小空闲连接数,默认为0;
  • maxWait:获取连接的最大等待时间(毫秒),默认为-1;
  • timeBetweenEvictionRunsMillis:通过扫描回收线程来回收连接的时间间隔(毫秒),默认为-1;
  • minEvictableIdleTimeMillis:连接在连接池中最小空闲时间,达到此值后会被回收(毫秒),默认为10006030;
  • validationQuery:连接校验语句,用于检测连接是否可用;
  • testWhileIdle:空闲连接是否进行测试,默认为false;
  • testOnBorrow:每次获取连接时是否进行测试,默认为false;
  • testOnReturn:归还连接时是否进行测试,默认为false;
  • poolPreparedStatements:是否缓存PreparedStatement,默认为false;
  • maxPoolPreparedStatementPerConnectionSize:每个连接中最大缓存PreparedStatement大小,默认为10。

以上就是整合Druid数据源的详细攻略和示例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot整合Druid数据源过程详解 - Python技术站

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

相关文章

  • java swing编程入门代码编写(java编程入门)

    Java Swing是一种基于Java语言的GUI(图形用户界面)编程框架。通过使用Swing框架,开发人员可以轻松地构建具有丰富功能和良好交互性的应用程序。 以下是Java Swing编程入门的完整攻略: 1. 准备工作 在开始编写Java Swing代码之前,需要准备以下工具: JDK:Java开发工具包(JDK)是编写Java应用程序所必需的。确保已安…

    Java 2023年5月19日
    00
  • jsp实现上一页下一页翻页功能(示例代码)

    实现上一页下一页翻页功能是网站开发中常见的需求。我们可以使用JSP语言来编写翻页功能的代码。下面将详细讲解JSP实现翻页功能的完整攻略。 第一步:获取页面传入的参数 在JSP页面中,我们需要获取上一页下一页翻页功能需要用到的参数。我们可以通过JSP内置对象request来获取传入的参数。如果我们需要获取当前页码,则可以从request中取出page参数,如下…

    Java 2023年6月15日
    00
  • java静态工具类注入service出现NullPointerException异常处理

    首先,需要明确一点的是,Java中的静态工具类是不应该与Spring中的Service进行耦合的。如果我们在静态工具类中注入了Service,那么在使用该工具类时就有可能出现NullPointerException异常,因为Service需要在Spring容器中进行初始化才能使用,而静态工具类是在类初始化时就会被加载的,而不是在容器启动时被Spring容器进…

    Java 2023年5月27日
    00
  • 基于java时区转换夏令时的问题及解决方法

    当涉及到时区转换和夏令时的问题时,对于Java开发者来说可能很容易遇到困惑和挑战。本篇攻略将详细讲解java时区夏令时的相关问题,并提供一些解决方案,帮助开发者更好地应对这些问题。 什么是时区和夏令时? 在深入讨论Java中时区和夏令时的问题之前,需要先理解这两个概念的基本含义。 时区:时区是由一系列位置使用相同的标准时间而形成的区域。通常使用UTC(协调世…

    Java 2023年5月20日
    00
  • 一文带你搞懂Java中Object类和抽象类

    一文带你搞懂Java中Object类和抽象类 1. Object类 在Java中,所有的类都继承自Object类。Object类是Java的基类,提供了一些通用的方法,如equals()、hashCode()、toString()等。 equals() equals()方法用来判断两个对象是否相等。Object类的equals()方法实现的是比较两个对象的引…

    Java 2023年5月26日
    00
  • 讲解ssm框架整合(最通俗易懂)

    下面是详细的“讲解ssm框架整合(最通俗易懂)”攻略,希望对你有帮助。 SSM框架整合 介绍 SSM框架整合是一种结合了Spring、SpringMVC和MyBatis的Web开发框架。其中,Spring用来管理和注入Bean,SpringMVC用来实现Web应用程序的MVC模式,而MyBatis则用来将Java对象映射到数据库表中的记录。 整合步骤 下面是…

    Java 2023年5月20日
    00
  • SpringBoot下Mybatis的缓存的实现步骤

    SpringBoot下Mybatis的缓存实现步骤如下所述: 1. 配置缓存 在 Spring Boot 中,使用 Mybatis 需要先在 pom.xml 文件中引入相关的依赖和插件,然后在 application.yml 或 application.properties 文件中配置Mybatis即可。 在配置的时候,需要在 mybatis-config.…

    Java 2023年5月20日
    00
  • Java实现的JSONUtil工具类与用法示例

    Java实现的JSONUtil工具类与用法示例 简介 在Java语言中,我们常常需要处理JSON格式的数据。为了能够更加方便、快速、安全地处理JSON数据,我们可以使用JSONUtil工具类。本文将详细讲解如何使用JSONUtil工具类。 JSONUtil的概述 JSONUtil是由JFinal官方提供的一个JSON工具类库,它提供了JSON与Java Be…

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