• Spring Boot 数据库操作Druid和HikariDataSource


    目录

    Spring Boot  数据库操作

    应用实例-需求

    创建测试数据库和表

    进行数据库开发, 在pom.xml 引入data-jdbc starter

    参考官方文档

    需要在pom.xml 指定导入数据库驱动

    在application.yml 配置操作数据源的信息

    创建bean\Furn.java

    测试结果

    整合Druid 到Spring-Boot 

    官方文档

    Durid 基本使用

    修改pom.xml , 引入druid 依赖

    创建DruidDataSourceConfig.java 配置类

    完成测试,运行ApplicationTests.java , 观察数据源的运行类型

    Durid 监控功能-SQL 监控

     完成测试

    修改DruidDataSourceConfig.java , 加入监控功能 

     创建DruidSqlController.java

    SQL 监控数据-测试页面

    Durid 监控功能-Web 关联监控

    Web 关联监控配置-Web 应用、URI 监控

    为了测试方便,修改/WebConfig.java, 放行/sql 请求

    重启项目,看看Web 应用和URI 监控页面

    Durid 监控功能-SQL 防火墙

     修改DruidDataSourceConfig.java ,加入防火墙监控

     完成测试,重启项目,看看SQL 防火墙监控是否生效

    Durid 监控功能-Session 监控

    Session 监控

    Druid Spring Boot Starter

    基本介绍

    修改pom.xml 注销druid 的依赖

    注销DruidDataSourceConfig.java

    查看druid 文档https://github.com/alibaba/druid,引入druid starter

    确认druid starter 引入哪些依赖

    ​编辑

    修改resources/application.yml 增加配置参数 

    重启项目,完成测试


    Spring Boot  数据库操作

    JDBC+HikariDataSource

    应用实例-需求

    ● 需求:演示Spring Boot 如何通过jdbc+HikariDataSource 完成对Mysql 操作

    说明: HikariDataSource : 目前市面上非常优秀的数据源, 是springboot2 默认数据源

    创建测试数据库和表

    1. -- 创建furns_ssm
    2. DROP DATABASE IF EXISTS spring_boot;
    3. CREATE DATABASE spring_boot;
    4. USE spring_boot;
    5. -- 创建家居表
    6. CREATE TABLE furn(
    7. `id` INT(11) PRIMARY KEY AUTO_INCREMENT, ## id
    8. `name` VARCHAR(64) NOT NULL, ## 家居名
    9. `maker` VARCHAR(64) NOT NULL, ## 厂商
    10. `price` DECIMAL(11,2) NOT NULL, ## 价格
    11. `sales` INT(11) NOT NULL, ## 销量
    12. `stock` INT(11) NOT NULL, ## 库存
    13. `img_path` VARCHAR(256) NOT NULL ## 照片路径
    14. );
    15. -- 初始化家居数据
    16. INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock` , `img_path`)
    17. VALUES(NULL , ' 北欧风格小桌子' , ' 熊猫家居' , 180 , 666 , 7 ,
    18. 'assets/images/product-image/1.jpg');
    19. INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock` , `img_path`)
    20. VALUES(NULL , ' 简约风格小椅子' , ' 熊猫家居' , 180 , 666 , 7 ,
    21. 'assets/images/product-image/2.jpg');
    22. INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock` , `img_path`)
    23. VALUES(NULL , ' 典雅风格小台灯' , ' 蚂蚁家居' , 180 , 666 , 7 ,
    24. 'assets/images/product-image/3.jpg');
    25. INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock` , `img_path`)
    26. VALUES(NULL , ' 温馨风格盆景架' , ' 蚂蚁家居' , 180 , 666 , 7 ,
    27. 'assets/images/product-image/4.jpg');
    28. SELECT * FROM furn;

    进行数据库开发, 在pom.xml 引入data-jdbc starter

    参考官方文档

    https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.build-syst
    ems.starters .

    1. <dependency>
    2. <groupId>org.springframework.bootgroupId>
    3. <artifactId>spring-boot-starter-data-jdbcartifactId>
    4. dependency>

     

     

    需要在pom.xml 指定导入数据库驱动

    因为Spring Boot 不知道项目要操作Mysql 还是Oracle , 需要在pom.xml 指定导入数据库驱动, 并指定对应版本.

    1. <dependency>
    2. <groupId>mysqlgroupId>
    3. <artifactId>mysql-connector-javaartifactId>
    4. <version>5.1.49version>
    5. dependency>

    在application.yml 配置操作数据源的信息

    1. spring:
    2. servlet:
    3. multipart:
    4. max-file-size: 10MB
    5. max-request-size: 50MB
    6. datasource: #配置数据源
    7. # 说明: 如果你没有指定useSSL=true ,启动项目会报红警告, 环境的问题,要灵活处理
    8. url: jdbc:mysql://localhost:3306/spring_boot?useSSL=true&useUnicode=true&characterEncoding=UTF-8
    9. username: root
    10. password: 自己的密码
    11. driver-class-name: com.mysql.jdbc.Driver

    创建bean\Furn.java

    1. public class Furn {
    2. private Integer id;
    3. private String name;
    4. private String maker;
    5. private BigDecimal price;
    6. private Integer sales;
    7. private Integer stock;
    8. private String imgPath = "assets/images/product-image/1.jpg";
    9. public Furn(Integer id, String name, String maker, BigDecimal price, Integer sales, Integer stock, String imgPath) {
    10. this.id = id;
    11. this.name = name;
    12. this.maker = maker;
    13. this.price = price;
    14. this.sales = sales;
    15. this.stock = stock;
    16. this.imgPath = imgPath;
    17. }
    18. public Furn() {
    19. }
    20. public Integer getId() {
    21. return id;
    22. }
    23. public void setId(Integer id) {
    24. this.id = id;
    25. }
    26. public String getName() {
    27. return name;
    28. }
    29. public void setName(String name) {
    30. this.name = name;
    31. }
    32. public String getMaker() {
    33. return maker;
    34. }
    35. public void setMaker(String maker) {
    36. this.maker = maker;
    37. }
    38. public BigDecimal getPrice() {
    39. return price;
    40. }
    41. public void setPrice(BigDecimal price) {
    42. this.price = price;
    43. }
    44. public Integer getSales() {
    45. return sales;
    46. }
    47. public void setSales(Integer sales) {
    48. this.sales = sales;
    49. }
    50. public Integer getStock() {
    51. return stock;
    52. }
    53. public void setStock(Integer stock) {
    54. this.stock = stock;
    55. }
    56. public String getImgPath() {
    57. return imgPath;
    58. }
    59. public void setImgPath(String imgPath) {
    60. this.imgPath = imgPath;
    61. }
    62. @Override
    63. public String toString() {
    64. return "Furn{" +
    65. "id=" + id +
    66. ", name='" + name + '\'' +
    67. ", maker='" + maker + '\'' +
    68. ", price=" + price +
    69. ", sales=" + sales +
    70. ", stock=" + stock +
    71. ", imgPath='" + imgPath + '\'' +
    72. '}';
    73. }
    74. }

    测试结果

    test 目录下的usersys/ApplicationTests.java , 完成测试

    如果不知道JdbcTemplate请看一下spring的博客文章 

    使用BeanPropertyRowMapper时,是给query()方法传递一个BeanPropertyRowMapper对象让JdbcTemplate帮我们把执行sql语句的结果集自动帮我们封装到对应的属性

    1. @SpringBootTest
    2. public class ApplicationTests {
    3. //如果不知道JdbcTemplate请看一下spring的博客文章
    4. @Resource
    5. private JdbcTemplate jdbcTemplate;
    6. @Test
    7. public void contextLoads() {
    8. BeanPropertyRowMapper rowMapper =
    9. new BeanPropertyRowMapper<>(Furn.class);
    10. List furns = jdbcTemplate.query("SELECT * FROM `furn`", rowMapper);
    11. for (Furn furn : furns) {
    12. System.out.println(furn);
    13. }
    14. System.out.println(jdbcTemplate.getDataSource().getClass());
    15. }
    16. }

    整合Druid 到Spring-Boot 

    官方文档

    使用手册: https://github.com/alibaba/druid 

    中文手册: https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

    基本介绍
    1. HiKariCP: 目前市面上非常优秀的数据源, 是springboot2 默认数据源

    2. Druid: 性能优秀,Druid 提供性能卓越的连接池功能外 这个在专题javaEE的数据库和jdbc的这篇博客中有说明 链接

    ,还集成了SQL 监控,黑名单拦截等功能,强大的监控特性,通过Druid 提供的监控功能,可以清楚知道连接池和SQL 的工作情况,所以根据项目需要,我们也要掌握Druid 和SpringBoot 整合

    3. 整合Druid 到Spring-Boot 方式

            ● 自定义方式
            ● 引入starter 方式

    Durid 基本使用

    需求: 将Spring-Boot 的数据源切换成Druid

    修改pom.xml , 引入druid 依赖

    1. <dependency>
    2. <groupId>com.alibabagroupId>
    3. <artifactId>druid-spring-boot-starterartifactId>
    4. <version>1.1.17version>
    5. dependency>

    创建DruidDataSourceConfig.java 配置类

    1. @Configuration
    2. public class DruidDataSourceConfig {
    3. //编写方法,注入DruidDataSource
    4. //还有说明一下为什么我们注入自己的DataSource , 默认的HiKariDatasource失效?
    5. //1. 默认的数据源是如配置? @ConditionalOnMissingBean({ DataSource.class, XADataSource.class })
    6. // 解读通过@ConditionalOnMissingBean({ DataSource.class}) 判断如果容器有DataSource Bean 就不注入默认的HiKariDatasource
    7. @ConfigurationProperties("spring.datasource")
    8. @Bean
    9. public DataSource dataSource() throws SQLException {
    10. //1. 配置了 @ConfigurationProperties("spring.datasource")
    11. // 就可以读取到application.yml的配置
    12. //2. 我们就不需要调用DruidDataSource 对象的setXxx, 会自动关联
    13. DruidDataSource druidDataSource = new DruidDataSource();
    14. return druidDataSource;
    15. }
    16. }

    完成测试,运行ApplicationTests.java , 观察数据源的运行类型

    Durid 监控功能-SQL 监控

    需求: 配置Druid 的监控功能,包括SQL 监控、SQL 防火墙、Web 应用、Session 监控等 

    修改DruidDataSourceConfig.java , 增加druid 监控功能

    地址:
    https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatViewServlet%E9%85%8D%E7%BD%AE 

    1. //配置druid的监控页功能
    2. @Bean
    3. public ServletRegistrationBean statViewServlet() {
    4. //创建StatViewServlet
    5. StatViewServlet statViewServlet = new StatViewServlet();
    6. ServletRegistrationBean registrationBean =
    7. new ServletRegistrationBean<>(statViewServlet, "/druid/*");
    8. //设置init-parameter, 设置用户名和密码
    9. registrationBean.addInitParameter("loginUsername", "wyx");
    10. registrationBean.addInitParameter("loginPassword", "666666");
    11. return registrationBean;
    12. }

     完成测试

    访问http://localhost:10000/druid/index.html 不会被拦截, 如果没有问题,会看到这个页面

    修改DruidDataSourceConfig.java , 加入监控功能 

    参考: https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilter

     创建DruidSqlController.java

    1. @Controller
    2. public class DruidSqlController {
    3. @Resource
    4. private JdbcTemplate jdbcTemplate;
    5. @ResponseBody
    6. @GetMapping("/sql")
    7. public List crudDB() {
    8. BeanPropertyRowMapper rowMapper = new BeanPropertyRowMapper<>(Furn.class);
    9. List furns = jdbcTemplate.query("select * from `furn`", rowMapper);
    10. for (Furn furn : furns) {
    11. System.out.println(furn);
    12. }
    13. return furns;
    14. }
    15. }

    SQL 监控数据-测试页面

    ● 完成测试, 观察SQL 监控数据, 浏览器http://localhost:10000/druid/sql.html

    Durid 监控功能-Web 关联监控

    需求: 配置Web 关联监控配置:Web 应用、URI 监控

    官方文档

    https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

    Web 关联监控配置-Web 应用、URI 监控

    DruidDataSourceConfig.java , 注入/ 增加WebStatFilter 用于采集web-jdbc 关联监控的数据

    1. //配置WebStatFilter, 用于采集web-jdbc关联的监控数据
    2. @Bean
    3. public FilterRegistrationBean webStatFilter() {
    4. //创建 WebStatFilter
    5. WebStatFilter webStatFilter = new WebStatFilter();
    6. FilterRegistrationBean filterRegistrationBean =
    7. new FilterRegistrationBean<>(webStatFilter);
    8. //默认对所有的url请求进行监控
    9. filterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));
    10. //排除指定的url
    11. filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
    12. return filterRegistrationBean;
    13. }

    为了测试方便,修改/WebConfig.java, 放行/sql 请求

    重启项目,看看Web 应用和URI 监控页面

    完成测试,重启项目,看看Web 应用和URI 监控是否生效

     

     

    Durid 监控功能-SQL 防火墙

    需求: 配置SQL 防火墙

    官方文档https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

     

     修改DruidDataSourceConfig.java ,加入防火墙监控

    1. @ConfigurationProperties("spring.datasource")
    2. @Bean
    3. public DataSource dataSource() throws SQLException {
    4. //1. 配置了 @ConfigurationProperties("spring.datasource")
    5. // 就可以读取到application.yml的配置
    6. //2. 我们就不需要调用DruidDataSource 对象的setXxx, 会自动关联
    7. DruidDataSource druidDataSource = new DruidDataSource();
    8. //加入监控功能, 加入了sql防火墙监控
    9. druidDataSource.setFilters("stat,wall");
    10. return druidDataSource;
    11. }

     完成测试,重启项目,看看SQL 防火墙监控是否生效

     

    Durid 监控功能-Session 监控

    需求: 配置Session 监控

    官方文档https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98 

      

    Session 监控

    重启项目, 先登录管理系统

    完成测试, 查看监控页需要输入用户名和密码, 点击Session 监控,可以看到相关信息
    (注意要登录用户系统,才能看到Session 监控信息)

     

     

    Druid Spring Boot Starter

    基本介绍

    1. 前面我们使用的是自己引入druid+配置类方式整合Druid 和监控
    2. Druid Spring Boot Starter 可以让程序员在Spring Boot 项目中更加轻松集成Druid 和监控 

    修改pom.xml 注销druid 的依赖

    注销DruidDataSourceConfig.java

    这时测试,druid 失效 

    查看druid 文档https://github.com/alibaba/druid,引入druid starter

    确认druid starter 引入哪些依赖

    修改resources/application.yml 增加配置参数 

    1. spring:
    2. servlet:
    3. multipart:
    4. max-file-size: 10MB
    5. max-request-size: 50MB
    6. datasource: #配置数据源
    7. # 说明: 如果你没有指定useSSL=true ,启动项目会报红警告, 环境的问题,灵活处理
    8. url: jdbc:mysql://localhost:3306/spring_boot?useSSL=true&useUnicode=true&characterEncoding=UTF-8
    9. username: root
    10. password: 自己的密码
    11. driver-class-name: com.mysql.jdbc.Driver
    12. #配置druid和监控功能
    13. druid:
    14. stat-view-servlet:
    15. enabled: true
    16. login-username: jack
    17. login-password: 666
    18. reset-enable: false
    19. web-stat-filter: #配置web监控
    20. enabled: true
    21. url-pattern: /*
    22. exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
    23. filter:
    24. stat: #sql监控
    25. slow-sql-millis: 1000
    26. log-slow-sql: true
    27. enabled: true
    28. wall: #配置sql防火墙
    29. enabled: true
    30. config:
    31. drop-table-allow: false
    32. select-all-column-allow: false

    重启项目,完成测试

    测试完成后,记得改回成原来的代码.(个人习惯) ...

  • 相关阅读:
    springboot rabbitmq
    决策树模型(3)决策树的生成与剪枝
    力扣刷题第二十七天--二叉树
    高级词汇和句子(二)-day15
    如何清理mac磁盘空间?该删不该删的你都知道了吗
    CSS3新增特性(一)
    【Python】Numpy傅里叶变换总结
    什么是长轮询
    推荐一款免费的内网穿透工具ngrok
    解析位运算
  • 原文地址:https://blog.csdn.net/apple_67445472/article/details/130738772