5、SpringBoot2之整合Durid

海哥  金牌会员 | 2024-3-5 19:25:23 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 899|帖子 899|积分 2697

创建名为springboot_druid的新module,过程参考3.1节
5.1、引入相关依赖


注意:虽然本文使用的是 spring boot 2.7.18 和 MySQL 5.7 ,但是出于可移植性、可扩展性和兼容性方面的考虑,
druid 的启动器使用的是 spring boot 3 版本的,MySQL 的驱动使用的是 MySQL 8 版本的。
  1.         
  2.         <dependency>
  3.             <groupId>org.springframework.boot</groupId>
  4.             <artifactId>spring-boot-starter-jdbc</artifactId>
  5.         </dependency>
  6.         
  7.         <dependency>
  8.             <groupId>com.alibaba</groupId>
  9.             <artifactId>druid-spring-boot-3-starter</artifactId>
  10.             <version>1.2.20</version>
  11.         </dependency>
  12.         
  13.         <dependency>
  14.             <groupId>mysql</groupId>
  15.             <artifactId>mysql-connector-java</artifactId>
  16.             <version>8.0.28</version>
  17.         </dependency>
复制代码
5.2、配置druid相关参数


注意:在 spring boot 2 中,类似 spring.datasource.druid.url 的参数名称可以省略 druid 写成 spring.datasource.url ,
但是在 spring boot 3 中 druid 不能省略,因此为了能同时适用 spring boot 2 和 3,本文配置示例没有 druid 。
  1. # 连接池类型(核心配置)
  2. spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
  3. # 数据库驱动名称(核心配置)
  4. spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
  5. # 数据库url(核心配置)
  6. spring.datasource.druid.url=jdbc:mysql://localhost:3306/ssm?characterEncoding=utf-8
  7. # 数据库用户名(核心配置)
  8. spring.datasource.druid.username=root
  9. # 数据库密码(核心配置)
  10. spring.datasource.druid.password=root
  11. # 初始化时建立物理连接的个数
  12. spring.datasource.druid.initial-size=5
  13. # 连接池的最小空闲数量
  14. spring.datasource.druid.min-idle=5
  15. # 连接池最大连接数量
  16. spring.datasource.druid.max-active=20
  17. # 获取连接时最大等待时间,单位毫秒
  18. spring.datasource.druid.max-wait=60000
  19. # 申请连接的时候检测,如果等待时间大于time-between-eviction-runs-millis,执行validation-query检测连接是否有效。
  20. spring.datasource.druid.test-while-idle=true
  21. # 既作为检测的间隔时间,又作为test-while-idle执行的依据
  22. spring.datasource.druid.time-between-eviction-runs-millis=60000
  23. # 销毁线程时,检测当前连接的最后活动时间与当前时间的差值,差值大于该值时关闭当前连接
  24. spring.datasource.druid.min-evictable-idle-time-millis=30000
  25. # 用来检测数据库连接是否有效的sql,必须是一个查询语句(oracle中为 select 1 from dual)
  26. spring.datasource.druid.validation-query=select 1
  27. # 申请连接时会执行validation-query检测连接是否有效,开启会降低性能,默认为true
  28. spring.datasource.druid.test-on-borrow=false
  29. # 归还连接时会执行validation-query检测连接是否有效,开启会降低性能,默认为true
  30. spring.datasource.druid.test-on-return=false
  31. # 是否缓存preparedStatement,也就是PSCache,
  32. # PSCache对支持游标的数据库性能提升巨大,比如说oracle,但在mysql下建议关闭。
  33. spring.datasource.druid.pool-prepared-statements=false
  34. # 要启用PSCache,必须配置大于0,当大于0时,pool-prepared-statements自动触发修改为true,
  35. # 在Druid中,不会存在Oracle的PSCache占用内存过多的问题,所以要启用PSCache时可以把这个数值配置大一些,比如说100
  36. spring.datasource.druid.max-pool-prepared-statement-per-connection-size=-1
  37. # 合并多个DruidDataSource的监控数据
  38. spring.datasource.druid.use-global-data-source-stat=true
复制代码
5.3、创建实体类

  1. package online.liaojy.pojo;
  2. import java.io.Serializable;
  3. /**
  4. * @author liaojy
  5. * @date 2023/12/21 - 6:24
  6. */
  7. public class Employee implements Serializable {
  8.     private Integer empId;
  9.     private String empName;
  10.     private Integer age;
  11.     private String sex;
  12.     private String email;
  13.     public Employee() {
  14.     }
  15.     public Employee(Integer empId, String empName, Integer age, String sex, String email) {
  16.         this.empId = empId;
  17.         this.empName = empName;
  18.         this.age = age;
  19.         this.sex = sex;
  20.         this.email = email;
  21.     }
  22.     public Integer getEmpId() {
  23.         return empId;
  24.     }
  25.     public void setEmpId(Integer empId) {
  26.         this.empId = empId;
  27.     }
  28.     public String getEmpName() {
  29.         return empName;
  30.     }
  31.     public void setEmpName(String empName) {
  32.         this.empName = empName;
  33.     }
  34.     public Integer getAge() {
  35.         return age;
  36.     }
  37.     public void setAge(Integer age) {
  38.         this.age = age;
  39.     }
  40.     public String getSex() {
  41.         return sex;
  42.     }
  43.     public void setSex(String sex) {
  44.         this.sex = sex;
  45.     }
  46.     public String getEmail() {
  47.         return email;
  48.     }
  49.     public void setEmail(String email) {
  50.         this.email = email;
  51.     }
  52.     @Override
  53.     public String toString() {
  54.         return "Employee{" +
  55.                 "empId=" + empId +
  56.                 ", empName='" + empName + '\'' +
  57.                 ", age=" + age +
  58.                 ", sex='" + sex + '\'' +
  59.                 ", email='" + email + '\'' +
  60.                 '}';
  61.     }
  62. }
复制代码
5.4、使用JdbcTemplate查询数据


注意:在pom中,引入的是jdbc的启动器,除了有一系列业务情景相关的依赖之外,还会有对应的配置;
jdbcTemplate 也会自动被加载到ioc容器中,因此可以直接注入使用;
在编译阶段,因为没有手动使用注解将JdbcTemplate标识为一个bean组件,所以idea可能会提示(误报)找不到bean;
此外,还因为配置的是 druid 数据库连接池,所以 jdbcTemplate 也会自动使用 druid 数据库连接池
  1.     @Autowired
  2.     private JdbcTemplate jdbcTemplate;
  3.     @RequestMapping("/getAllEmployee")
  4.     public List<Employee> getAllEmployee(){
  5.         String sql = "select * from t_emp";
  6.         List<Employee> employeeList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Employee>(Employee.class));
  7.         return employeeList;
  8.     }
复制代码
5.5、测试效果



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

海哥

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表