SpringBoot整合Druid数据源的方法实现

SpringBoot整合Druid数据源的方法实现,可以分为以下几个步骤:

步骤一:添加Druid和jdbc依赖

在pom.xml文件中,添加以下两个依赖

<!--Druid数据库连接池-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.21</version>
</dependency>

<!--jdbc驱动-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.41</version>
</dependency>

步骤二:配置Druid数据源

在application.properties/yml文件中添加以下配置项

spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

#Druid配置
#监控地址
spring.datasource.druid.stat-view-servlet.allow=true
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
#用户名和密码
spring.datasource.druid.stat-view-servlet.login-username=admin
spring.datasource.druid.stat-view-servlet.login-password=admin
#IP白名单(没有配置或者为空,则允许所有访问)
spring.datasource.druid.stat-view-servlet.reset-enable=false
spring.datasource.druid.stat-view-servlet.allow=127.0.0.1
#IP黑名单(存在共同时,deny优先于allow)
spring.datasource.druid.stat-view-servlet.deny=192.168.1.73

步骤三:创建数据库连接池

在代码中,通过注解@Configuration创建数据源对象,并注入到spring容器中

@Configuration
public class DruidDBConfig {
    @Value("${spring.datasource.url}")
    private String dbUrl;

    @Value("${spring.datasource.username}")
    private String username;

    @Value("${spring.datasource.password}")
    private String password;

    @Value("${spring.datasource.driver-class-name}")
    private String driverClassName;

    @Bean
    public DataSource dataSource() {
        DruidDataSource datasource = new DruidDataSource();
        datasource.setUrl(this.dbUrl);
        datasource.setUsername(username);
        datasource.setPassword(password);
        datasource.setDriverClassName(driverClassName);

        //configuration
        datasource.setInitialSize(10);
        datasource.setMinIdle(10);
        datasource.setMaxActive(50);
        datasource.setMaxWait(60000);
        datasource.setTimeBetweenEvictionRunsMillis(60000);
        datasource.setValidationQuery("SELECT 1 FROM DUAL");
        datasource.setTestWhileIdle(true);
        datasource.setTestOnBorrow(false);
        datasource.setTestOnReturn(false);
        datasource.setPoolPreparedStatements(true);
        datasource.setMaxPoolPreparedStatementPerConnectionSize(50);
        try {
            datasource.setFilters("stat,wall,slf4j");
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return datasource;
    }
}

步骤四:测试连接

在代码中,创建一个测试Controller,测试是否能成功连接。

@RestController
public class HelloController {
    @Autowired
    private DataSource dataSource;

    @RequestMapping("/hello")
    String index() {
        try {
            Connection connection = dataSource.getConnection();
            return "Hello Spring Boot and Druid!" + connection.getMetaData().getDatabaseProductName();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return "Hello Spring Boot and Druid!";
    }
}

测试连接,访问url:http://localhost:8080/hello

如果连接成功,则会显示以下内容:

Hello Spring Boot and Druid!MySQL

示例一:

以下是一个完整的SpringBoot整合Druid数据源实现的示例,供参考:

pom.xml文件

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.21</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.41</version>
    </dependency>
</dependencies>

application.yml文件

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf-8
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource

# Druid配置
spring.datasource.druid.initialSize=5
spring.datasource.druid.minIdle=5
spring.datasource.druid.maxActive=20
spring.datasource.druid.maxWait=60000
spring.datasource.druid.timeBetweenEvictionRunsMillis=60000
spring.datasource.druid.minEvictableIdleTimeMillis=30000
spring.datasource.druid.validationQuery=SELECT 1 FROM DUAL
spring.datasource.druid.testWhileIdle=true
spring.datasource.druid.testOnBorrow=false
spring.datasource.druid.testOnReturn=false
spring.datasource.druid.poolPreparedStatements=true
spring.datasource.druid.maxPoolPreparedStatementPerConnectionSize=20
spring.datasource.druid.filters=stat,wall

spring.mvc.view.prefix=/templates/
spring.mvc.view.suffix=.html

连接测试Controller

@RestController
public class HelloController {

    @Autowired
    private DataSource dataSource;

    @RequestMapping("/hello")
    public String index() throws SQLException {
        Connection connection = dataSource.getConnection();
        DatabaseMetaData metaData = connection.getMetaData();
        String productName = metaData.getDatabaseProductName();
        String productVersion = metaData.getDatabaseProductVersion();
        return "Hello Spring Boot and Druid!数据库类型: "+productName+",版本: "+productVersion;
    }
}

此示例中,当请求url:http://localhost:8080/hello时,会返回以下内容:

Hello Spring Boot and Druid!数据库类型: MySQL,版本: 5.6.39

示例二:

以下是一个完整的SpringBoot整合Druid数据源实现的示例,供参考:

pom.xml文件中添加以下依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.2.4.RELEASE</version>
    </dependency>
    <!-- 集成 druid -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.1.21</version>
    </dependency>
    <dependency><!-- mysql驱动 -->
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.44</version>
    </dependency>

</dependencies>

application.yml文件

spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimeZone=Asia/Shanghai

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

# Druid监控页面
spring.datasource.druid.stat.enable=true
# Druid连接池监控
spring.datasource.druid.filters=stat,wall,log4j2
spring.datasource.druid.stat-view-servlet.login-username=admin
spring.datasource.druid.stat-view-servlet.login-password=admin
server.servlet.context-path=/druid

Druid数据源配置类

@Configuration
public class DataSourceConfig {

    @Bean
    @Primary
    @ConfigurationProperties("spring.datasource")
    public DataSource druidDataSource(){
        DruidDataSource druidDataSource = new DruidDataSource();
        return druidDataSource;
    }

    @Bean
    public ServletRegistrationBean statViewServlet(){
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
        servletRegistrationBean.addInitParameter("loginUsername", "admin");
        servletRegistrationBean.addInitParameter("loginPassword", "admin");
        servletRegistrationBean.addInitParameter("resetEnable","false");
        return servletRegistrationBean;
    }

    @Bean
    public FilterRegistrationBean webStatFilter(){
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
        filterRegistrationBean.addUrlPatterns("/*");//添加过滤规则
        filterRegistrationBean.addInitParameter("exclusions","*.jpg,*.png,*.gif,*.ico,/druid/*");//过滤掉静态资源请求和Druid的请求
        return filterRegistrationBean;
    }

}

测试Controller

@RestController
@RequestMapping("/druid")
public class TestController {

    private static final String[] USER_NAMES = {"user1", "user2", "user3", "user4"};

    private static final String[] AGES = {"22", "23", "24", "25", "26", "27", "28"};

    @Autowired
    private DataSource dataSource;

    private Random random = new Random(System.currentTimeMillis());

    @RequestMapping("/insertUser")
    public String index() {
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        int row = 0;
        String sql = "INSERT INTO user(name, age) VALUES (?, ?)";
        try {
            connection = dataSource.getConnection();
            preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setString(1, USER_NAMES[random.nextInt(USER_NAMES.length)]);
            preparedStatement.setInt(2, Integer.valueOf(AGES[random.nextInt(AGES.length)]));
            row = preparedStatement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return "成功插入[" + row + "]条用户数据";
    }


}

此示例中,当请求url:http://localhost:8080/druid/insertUser时,会返回以下内容:

成功插入[1]条用户数据

并且,访问http://localhost:8080/druid,可以进入Druid监控页面,查看连接池的状态和信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot整合Druid数据源的方法实现 - Python技术站

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

相关文章

  • 详解Java如何优雅的实现字典翻译

    详解Java如何优雅的实现字典翻译的完整攻略如下: 1. 确定需求和选型 首先,我们需要明确需求:实现一个简单的字典翻译,支持中英文互译。比如输入“hello”,能够输出“你好”。 接下来,我们需要根据需求来选择技术选型。根据需求,我们需要一个能够实现中英文互译的字典。常见的实现方式有两种:使用数据库或者使用变量/文件。由于我们的需求比较简单,可以选择使用变…

    Java 2023年5月20日
    00
  • Spring整合多数据源实现动态切换的实例讲解

    Spring整合多数据源实现动态切换的实例讲解 在系统中,经常需要连接多个数据库,例如MySQL、Oracle等。Spring提供了很好的支持来整合多数据源,下面就来具体讲解如何实现。 基本配置 首先,需要在pom文件中添加Springjdbc依赖。在applicationContext.xml文件中配置数据源和JdbcTemplate。具体配置如下: &l…

    Java 2023年5月20日
    00
  • 详解Java的继承

    详解Java的继承 Java中的继承是一种面向对象编程中非常重要的概念,它可以让子类拥有父类的属性和方法,同时也可以通过继承来实现代码的复用和继承树的建立。本文将详解Java的继承,包括继承的语法、继承的作用和细节问题,通过两个实例来帮助理解。 继承的语法 在Java中,使用关键字 extends 来创建子类并继承父类。例如: class Child ext…

    Java 2023年5月26日
    00
  • java常用工具类之数据库连接类(可以连接多种数据库)

    下面是详细的讲解: 1. 前言 数据库连接是Java应用程序开发的必需环节之一,因为Java应用程序经常需要与数据库打交道。在Java中,可以使用Java内置的JDBC API来实现与数据库的连接操作。不过,每次手动编写连接代码显然不太现实,因此我们通常会使用一些现成的数据库连接工具类来完成这些操作。本文就是讲解如何编写一个通用的数据库连接类。 2. 设计思…

    Java 2023年5月19日
    00
  • 使用spring工厂读取property配置文件示例代码

    首先,需要创建一个property配置文件,我们以”config.properties”为例,文件内容如下: database.url=jdbc:mysql://localhost:3306/mydatabase database.username=root database.password=123456 接下来,我们需要在spring的配置文件中引入该p…

    Java 2023年5月23日
    00
  • java并发JUC工具包AtomicInteger原子整型语法基础

    Java并发JUC工具包提供了一些高效且线程安全的队列、锁和原子变量等工具类,其中AtomicInteger是实现原子性操作整型数据的类。 AtomicInteger类 AtomicInteger类是java.util.concurrent包中的一个类,它提供了一种原子性的更新机制,即多线程环境下对共享的整型变量进行原子性操作,避免了线程安全问题。常用的原子…

    Java 2023年5月26日
    00
  • java通过url下载文件并输出的方法

    以下是完整攻略,包含代码和说明: 通过URL下载文件并输出的方法 基本思路 下载文件的基本思路是,通过URL获取文件的输入流,然后将输入流写入输出流,最终将输出流写入文件中。在Java中,可以利用URLConnection类和BufferedInputStream/BuffferedOutputStream类来实现该过程。 示例1 以下是一个通过URL下载文…

    Java 2023年5月26日
    00
  • Java命令设计模式详解

    Java命令设计模式详解 本文将详细介绍Java命令设计模式。首先,我们会讲解什么是设计模式以及为什么要使用它们。接着,会详细讲解Java命令设计模式的相关概念以及在实际应用中的使用。最后,会提供两个示例说明,以帮助读者更好地掌握Java命令设计模式。 什么是设计模式? 在软件开发阶段,我们经常需要解决一些常见的问题,如对象的创建、系统的分布、通信的实现、异…

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