ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

SpringBoot数据库连接池入门

2022-04-20 21:03:23  阅读:179  来源: 互联网

标签:SpringBoot name 数据源 配置 class DataSource public 连接池 入门


1.HikariCP单数据源

1.1 应用配置文件

application.yml文件中配置属性,分别为:IP地址、用户名、密码、Driver
HikariCP连接池及其在springboot中的配置

#IP地址、用户名、密码、驱动注册
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/springbootdemo?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
#HikariCP配置
    hikari:
      minimum-idle: 10 #池中维护的最小连接数,默认是10个
      maximum-pool-size: 10 #池中最大连接数,包括空闲和使用的,默认是10个

1.2 测试是否配置成功

@SpringBootApplication
public class Demo03Application implements CommandLineRunner {

    private final static Logger logger = LoggerFactory.getLogger(Demo03Application.class);

    @Autowired
    DataSource dataSource;

    public static void main(String[] args) {
        SpringApplication.run(Demo03Application.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        try(Connection conn = dataSource.getConnection()) {
            logger.info("[run][获得连接:{}]",conn);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}

运行结果如下图所示:

2.HikariCP多数据源

2.1 应用配置文件

spring:
  #datasource配置内容
  datasource:
    ##订单数据源配置内容
    orders:
      url: jdbc:mysql://localhost:3306/springbootdemo?useSSL=false&useUnicode=true&characterEncoding=utf-8
      username: root
      password: 123456
      driver-class-name: com.mysql.cj.jdbc.Driver
      hikari:
        minimum-idle: 10 #最小空闲连接数,默认是10
        maximum-pool-size: 10 #维护的最大连接数,默认是10

    ##用户数据源配置内容
    users:
      url: jdbc:mysql://localhost:3306/springbootdemo?useSSL=false&useUnicode=true&characterEncoding=true
      username: root
      password: 123456
      driver-class-name: com.mysql.cj.jdbc.Driver
      hikari:
        minimum-idle: 15 #最小空闲连接数
        maximum-pool-size: 15 #维护的最大连接数

2.2 创建数据源配置类

在config包下创建DataSourceConfig类

下面这段代码主要是创建了DataSourceProperties,再通过其去创建DataSource。
DataSourceProperties.initializeDataSourceBuilder()创建一个DataSourceBuilder
DataSource.type(HikariDataSource.class)为DataSource指定类型
DataSource.build()创建type中的指定数据源对象

@Configuration
public class DataSourceConfig {
    //创建数据源配置对象,并将一级属性读入到配置对象中
    @Primary//作为主DataSourceProperties Bean
    @Bean(name = "ordersDataSourceProperties")
    @ConfigurationProperties(prefix = "spring.datasource.orders")
    public DataSourceProperties ordersDataSourceProperties() {
        return new DataSourceProperties();
    }
    //创建数据源对象,并将二级属性读入到数据源对象中
    @Bean(name = "ordersDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.orders.hikari")
    public DataSource ordersDataSource() {
        DataSourceProperties properties = this.ordersDataSourceProperties();
        return createHikariDataSource(properties);
    }
    
    @Bean(name = "usersDataSourceProperties")
    @ConfigurationProperties(prefix = "spring.datasource.users")
    public DataSourceProperties usersDataSourceProperties() {
        return new DataSourceProperties();
    }
    
    @Bean(name = "usersDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.users.hikari")
    public DataSource usersDataSource(DataSourceProperties properties) {
        return createHikariDataSource(properties);
    }
    //创建HikariDataSource对象的静态方法
    private static HikariDataSource createHikariDataSource(DataSourceProperties properties) {
        HikariDataSource dataSource = properties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
        if(StringUtils.hasText(properties.getName())) {
            dataSource.setPoolName(properties.getName());
        }
        return dataSource;
    }
}

2.3 测试是否配置成功

@Resource是代替setter方法,自动注入对象中,根据byName
@Autowires是代替setter方法,自动注入对象中,根据byType

@SpringBootApplication
public class Demo032Application implements CommandLineRunner {

    private final static Logger logger = LoggerFactory.getLogger(Demo032Application.class);

    @Resource(name = "ordersDataSource")
    private DataSource ordersDataSource;

    @Resource(name = "usersDataSource")
    private DataSource usersDataSource;

    public static void main(String[] args) {
        SpringApplication.run(Demo032Application.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        try (Connection conn = ordersDataSource.getConnection()) {
            logger.info("获得ordersDataSource连接:{}",conn);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

        try (Connection conn = usersDataSource.getConnection()) {
            logger.info("获得usersDataSource连接:{}",conn);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}

运行结果如下图所示:

3. Druid单数据源

3.1 应用配置文件

application.yml文件中配置属性,分别为:IP地址、用户名、密码、Driver、监控器

  • 添加依赖
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.21</version>
        </dependency>
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/springbootdemo?useSSL=false&useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456
    type: com.alibaba.druid.pool.DruidDataSource #自定义数据库连接池
  druid:
    min-idle: 0 #池中维护的最小空闲连接数,默认为0
    max-active: 20 #池中最大连接数
    filter:
      stat: #配置StatFilter,统计监控信息
        log-slow-sql: true #开启慢查询记录
        slow-sql-millis: 5000 #超过5000ms,就是慢查询
    stat-view-servlet: #配置StatViewServlet,展示监控信息
      enabled: true
      login-username: guowenchao
      login-password: 123456

3.2 测试是否配置成功

@Slf4j
@SpringBootApplication
public class Demo033Application implements CommandLineRunner {

    @Autowired
    private DataSource dataSource;

    public static void main(String[] args) {
        SpringApplication.run(Demo033Application.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        log.info("获取连接:{}",dataSource.getClass());
    }
}

运行结果如下图所示:

4. Druid多数据源

4.1 应用配置文件

  • 添加依赖
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.21</version>
        </dependency>
spring:
  # datasource 数据源配置内容
  datasource:
    # 订单数据源配置
    orders:
      url: jdbc:mysql://127.0.0.1:3306/springbootdemo?useSSL=false&useUnicode=true&characterEncoding=UTF-8
      driver-class-name: com.mysql.jdbc.Driver
      username: root
      password: 123456
      type: com.alibaba.druid.pool.DruidDataSource
      # Druid 自定义配置,对应 DruidDataSource 中的 setting 方法的属性
      min-idle: 0
      max-active: 20
    # 用户数据源配置
    users:
      url: jdbc:mysql://127.0.0.1:3306/tspringbootdemo?useSSL=false&useUnicode=true&characterEncoding=UTF-8
      driver-class-name: com.mysql.jdbc.Driver
      username: root
      password:
      type: com.alibaba.druid.pool.DruidDataSource
      # Druid 自定义配置,对应 DruidDataSource 中的 setting 方法的属性
      min-idle: 0
      max-active: 20
    druid:
      # 过滤器配置
      filter:
        stat: # 配置 StatFilter
          log-slow-sql: true
          slow-sql-millis: 5000
      # StatViewServlet 配置
      stat-view-servlet:
        enabled: true
        login-username: guowenchao
        login-password: 123456

4.2 创建数据源配置类

在config包下创建DataSourceConfig类

因为druid的默认配置放在orders和users下面,所以可以按照下面方式创建:

@Configuration
public class DataSourceConfig {

    @Primary
    @Bean(name = "ordersDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.orders")
    public DataSource ordersDataSource() {
        return DruidDataSourceBuilder.create().build();
    }

    @Bean(name = "usersDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.users")
    public DataSource usersDataSource() {
        return DruidDataSourceBuilder.create().build();
    }
}

4.3 测试是否配置成功

@Slf4j
@SpringBootApplication
public class Demo034Application implements CommandLineRunner {

    @Resource(name = "ordersDataSource")
    private DataSource ordersDataSource;

    @Resource(name = "usersDataSource")
    private DataSource usersDataSource;

    public static void main(String[] args) {
        SpringApplication.run(Demo034Application.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        log.info("获得连接1:{}",ordersDataSource.getClass());
        log.info("获得连接2:{}",usersDataSource.getClass());
    }
}

运行结果如下图所示:

声明:上述文章参考自:芋道SpringBoot数据库连接池入门

环环无敌大可爱

标签:SpringBoot,name,数据源,配置,class,DataSource,public,连接池,入门
来源: https://www.cnblogs.com/yanxiaoguo/p/16171258.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有