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面试题之Forward与Redirect的区别详解

    JAVA面试题之Forward与Redirect的区别详解 在Java Web开发中,经常会使用到Forward和Redirect这两种方式进行请求转发。它们的实现方式不同,在使用时也需要根据需求选择合适的方式。本文将详细讲解Forward和Redirect的区别以及使用场景。 Forward Forward是什么 Forward是一种请求转发方式,可以将请…

    Java 2023年6月15日
    00
  • javascript分页代码实例分享(js分页)

    下面是关于“JavaScript分页代码实例分享(JS分页)”的详细攻略: 1. 分页功能原理 分页功能是指将一定数量的数据进行分页,在Web应用程序中将其展示给用户。分页的原理是将每页的数据放在一个数据容器中,根据容器高度和每个数据元素的高度计算出每页的元素数量,再通过前后翻页按钮实现翻页。 2. 分页代码实现 2.1 HTML结构 首先,在HTML中需要…

    Java 2023年6月16日
    00
  • AndroidApk混淆编译时,报告java.io.IOException…错误解决办法

    当进行Android APK混淆编译时,可能会遇到java.io.IOException错误,这通常是由于ProGuard或其他混淆工具未能正确读取输入文件而导致的。以下是解决这个问题的一些方法。 检查混淆配置文件 请确认你的混淆配置文件中是否列出了正确的输入、输出文件路径。查看混淆配置文件,确定输入、输出文件路径是否正确。 示例: -injars <…

    Java 2023年5月26日
    00
  • SpringBoot集成Nacos的详细教程

    以下是SpringBoot集成Nacos的详细教程: 准备工作 下载Nacos 可以在Nacos官网中下载最新版本的Nacos服务端。 安装Nacos 解压下载的压缩包,在bin目录下运行以下命令启动Nacos服务: bash sh startup.sh -m standalone 运行成功后,可以通过浏览器访问 http://localhost:8848/…

    Java 2023年5月15日
    00
  • Mybatis如何使用动态语句实现批量删除(delete结合foreach)

    下面是Mybatis如何使用动态语句实现批量删除(delete结合foreach)的完整攻略。 前置知识 在了解如何使用动态语句实现批量删除之前,需要先掌握以下知识: Mybatis的基本操作 SqlSession对象 Mapper.xml配置文件 foreach标签的用法 1. 参数准备 我们假设有一个表user,里面存储了许多用户信息。我们需要批量删除其…

    Java 2023年5月20日
    00
  • asp.net 支付宝及时到帐接口使用详解

    ASP.NET支付宝及时到账接口使用详解: 概述 本文主要介绍如何使用ASP.NET集成支付宝及时到账接口,实现在线支付功能。 支付宝是国内常见的第三方支付平台之一,提供了丰富的支付接口。包括但不限于扫码支付、移动支付、Web支付、网页收银台等方式。今天我们要介绍的是ASP.NET集成支付宝即时到账接口。 开始 使用支付宝即时到账接口,需要注册成为支付宝商家…

    Java 2023年6月15日
    00
  • 将Java程序的输出结果写入文件方法实例

    当我们需要将Java程序输出的结果写入文件时,可以通过Java IO流的方式来实现。下面,我将为大家讲解Java程序中如何将输出结果写入文件的方法。 准备工作 在开始写代码之前,需要进行如下准备工作: 创建File对象,用于操作文件。 创建FileWriter对象,用于写入数据到文件。 创建BufferedWriter对象,用于提高数据写入效率。 实现方法 …

    Java 2023年5月20日
    00
  • Spring mvc 实现用户登录的方法(拦截器)

    下面是实现Spring MVC用户登录的方法(拦截器)的详细攻略: 1. 拦截器的作用 拦截器(Interceptor)在Spring MVC中是一个非常重要的组成部分,它主要用于拦截请求和响应,进行预处理和后处理。拦截器可以应用在如下场景: 用户身份验证 用户请求日志记录 请求响应的编码和解码 访问控制与权限验证等 在用户登录的场景中,我们可以通过拦截器来…

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