ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Spring Boot Druid 数据库连接池入门

Spring Boot Druid 数据库连接池入门 1. Druid 单数据源#### 1.1 引入依赖###### 在pom.xml文件中引入相关依赖。 ?xml version1.0 encodingUTF-8? org.springframework.boot spring-boot-starter-parent 2.1.3.RELEASE 4.0.0 lab-19-datasource-pool-druid-single org.springframework.boot spring-boot-starter-jdbc com.alibaba druid-spring-boot-starter 1.1.21 mysql mysql-connector-java 5.1.48 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test #### 1.2 应用配置文件在application.yml中添加 Druid 配置如下 spring: # datasource 数据源配置内容对应 DataSourceProperties 配置属性类 datasource: url: jdbc:mysql://127.0.0.1:3306/test?useSSLfalseuseUnicodetruecharacterEncodingUTF-8 driver-class-name: com.mysql.jdbc.Driver username: root # 数据库账号 password: # 数据库密码 type: com.alibaba.druid.pool.DruidDataSource # 设置类型为 DruidDataSource # Druid 自定义配置对应 DruidDataSource 中的 setting 方法的属性 druid: min-idle: 0 # 池中维护的最小空闲连接数默认为 0 个。 max-active: 20 # 池中最大连接数包括闲置和使用中的连接默认为 8 个。 filter: stat: # 配置 StatFilter 对应文档 https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilter log-slow-sql: true # 开启慢查询记录 slow-sql-millis: 5000 # 慢 SQL 的标准单位毫秒 stat-view-servlet: # 配置 StatViewServlet 对应文档 https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatViewServlet%E9%85%8D%E7%BD%AE enabled: true # 是否开启 StatViewServlet login-username: yudaoyuanma # 账号 login-password: javaniubi # 密码 *spring.datasource配置项设置 Spring 数据源的通用配置。其中spring.datasource.type配置项需要主动设置使用 DruidDataSource 。因为默认情况下spring-boot-starter-jdbc的DataSourceBuilder会按照DATA_SOURCE_TYPE_NAMES的顺序尝试推断数据源的类型。*spring.datasource.druid配置项设置 Druid 连接池的自定义配置。然后DruidDataSourceAutoConfigure会自动化配置 Druid 连接池。 * 在《Druid —— 配置属性》和《DruidDataSource 配置属性列表》下提供了各种 Druid 的配置项胖友可以自己看看。 *filter.stat配置项我们配置了 DruidStatFilter用于统计监控信息。对应文档《Druid —— 配置_StatFilter》。要注意StatFilter 并不是我们说的javax.servlet.Filter而是 Druid 提供的Filter拓展机制。 *filter.stat-view-servlet配置项我们配置了 DruidStatViewServlet用于提供监控信息的展示的 html 页面和JSON API。对应文档《Druid —— 配置_StatViewServlet 配置》。StatViewServlet 就是我们说的javax.servlet.Filter。#### 1.3 Application创建Application.java类配置SpringBootApplication注解即可。代码如下 SpringBootApplication public class Application implements CommandLineRunner { private Logger logger LoggerFactory.getLogger(Application.class); Autowired private DataSource dataSource; public static void main(String[] args) { // 启动 Spring Boot 应用 SpringApplication.run(Application.class, args); } Override public void run(String… args) { logger.info(“[run][获得数据源{}]”, dataSource.getClass()); } } 执行日志如下 2019-11-12 19:34:12.079 INFO 48359 — [ main] c.a.d.s.b.a.DruidDataSourceAutoConfigure : Init DruidDataSource 2019-11-12 19:34:12.156 INFO 48359 — [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} inited 2019-11-12 19:34:12.560 INFO 48359 — [ main] c.i.s.lab19.datasourcepool.Application : [run][获得数据源class com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceWrapper] #### 1.4 监控功能因为我们在 1.2应用配置中做了如下操作* 通过spring.datasource.filter.stat配置了 StatFilter 统计监控信息。* 通过spring.datasource.filter.stat-view-servlet配置了 StatViewServlet 提供监控信息的展示的 html 页面和 JSON API 。所以我们在启动项目后访问http://127.0.0.1:8080/druid地址可以看到监控 html 页面。如下图所示* 在界面的顶部提供了数据源、SQL 监控、SQL 防火墙等等功能。 * 每个界面上可以通过View JSON API获得数据的来源。同时我们可以在JSON API(?http://127.0.0.1:8080/druid/api.html?)菜单对应的界面中看到 StatViewServlet 内置的监控信息的 JSON API 列表。 * 因为监控信息是存储在 JVM 内存中在 JVM 进程重启时信息将会丢失。如果我们希望持久化到 MySQL、Elasticsearch、HBase 等存储器中可以通过 StatViewServlet 提供的 JSON API 接口采集监控信息。另外有个druid-aggregated-monitor开源项目提供了 集中监控分布式服务中的 Druid 连接池的方案和思路。 * 如果 StatViewServlet 提供的 JSON API 接口无法满足我们的诉求我们可以通过自定义 API 接口使用DruidStatManagerFacade获得监控信息。使用示例DruidStatController代码如下 RestController public class DruidStatController { GetMapping(“/monitor/druid/stat”) Deprecated public Object druidStat(){ //DruidStatManagerFacade#getDataSourceStatDataList()方法可以获取所有数据源的监控数据。 // 除此之外DruidStatManagerFacade 还提供了一些其他方法你可以按需选择使用。 return DruidStatManagerFacade.getInstance().getDataSourceStatDataList(); } } 当然绝大多数情况下我们并不需要做这方面的拓展### 2. Druid 多数据源和1.1引入依赖是一致。#### 5.2 应用配置在application.yml中添加 Druid 配置如下 spring: # datasource 数据源配置内容 datasource: # 订单数据源配置 orders: url: jdbc:mysql://127.0.0.1:3306/test_orders?useSSLfalseuseUnicodetruecharacterEncodingUTF-8 driver-class-name: com.mysql.jdbc.Driver username: root password: type: com.alibaba.druid.pool.DruidDataSource # 设置类型为 DruidDataSource # Druid 自定义配置对应 DruidDataSource 中的 setting 方法的属性 min-idle: 0 # 池中维护的最小空闲连接数默认为 0 个。 max-active: 20 # 池中最大连接数包括闲置和使用中的连接默认为 8 个。 # 用户数据源配置 users: url: jdbc:mysql://127.0.0.1:3306/test_users?useSSLfalseuseUnicodetruecharacterEncodingUTF-8 driver-class-name: com.mysql.jdbc.Driver username: root password: type: com.alibaba.druid.pool.DruidDataSource # 设置类型为 DruidDataSource # Druid 自定义配置对应 DruidDataSource 中的 setting 方法的属性 min-idle: 0 # 池中维护的最小空闲连接数默认为 0 个。 max-active: 20 # 池中最大连接数包括闲置和使用中的连接默认为 8 个。 # Druid 自定已配置 druid: # 过滤器配置 filter: stat: # 配置 StatFilter 对应文档 https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilter log-slow-sql: true # 开启慢查询记录 slow-sql-millis: 5000 # 慢 SQL 的标准单位毫秒 # StatViewServlet 配置 stat-view-servlet: # 配置 StatViewServlet 对应文档 https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatViewServlet%E9%85%8D%E7%BD%AE enabled: true # 是否开启 StatViewServlet login-username: yudaoyuanma # 账号 login-password: javaniubi # 密码 * 不同于我们在「3.2 应用配置文件」中我们将 Druid 的自定义配置和url、driver-class-name等数据源的通用配置放在同一级这样后续我们只需要使用ConfigurationProperties(prefix spring.datasource.orders)的方式就能完成 DruidDataSource 的配置属性设置。* 在spring.datasource.druid配置项下我们还是配置了filter.stat和stat-view-servlet配置项用于 Druid 监控功能。#### 2.3 数据源配置类在cn.iocoder.springboot.lab19.datasourcepool.config包路径下我们会创建DataSourceConfig配置类。代码如下 // DataSourceConfig.java Configuration public class DataSourceConfig { /** * 创建 orders 数据源/ Primary Bean(name “ordersDataSource”) ConfigurationProperties(prefix “spring.datasource.orders”) // 读取 spring.datasource.orders 配置到 HikariDataSource 对象 public DataSource ordersDataSource() { return DruidDataSourceBuilder.create().build(); } /* * 创建 users 数据源 */ Bean(name “usersDataSource”) ConfigurationProperties(prefix “spring.datasource.users”) public DataSource usersDataSource() { return DruidDataSourceBuilder.create().build(); } } #### 2.4 Application创建Application.java类配置SpringBootApplication注解即可。代码如下 // Application.java SpringBootApplication public class Application implements CommandLineRunner { private Logger logger LoggerFactory.getLogger(Application.class); Resource(name “ordersDataSource”) private DataSource ordersDataSource; Resource(name “usersDataSource”) private DataSource usersDataSource; public static void main(String[] args) { // 启动 Spring Boot 应用 SpringApplication.run(Application.class, args); } Override public void run(String… args) { // orders 数据源 logger.info(“[run][获得数据源{}]”, ordersDataSource.getClass()); // users 数据源 logger.info(“[run][获得数据源{}]”, usersDataSource.getClass()); } } 执行日志如下 2019-11-12 21:39:24.063 INFO 49670 — [ main] c.i.s.lab19.datasourcepool.Application : [run][获得数据源class com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceWrapper] 2019-11-12 21:39:24.064 INFO 49670 — [ main] c.i.s.lab19.datasourcepool.Application : [run][获得数据源class com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceWrapper] #### 2.5 监控功能和2.4监控功能一致。不过呢我们在监控页面上可以看到两个 Druid 数据库连接池。
返回列表