一、使用jdbc的方式进行数据访问

对于数据访问层,无论是SQL还是NOSQL springboot底层都是使用springdata的方式进行统一处理。

创建项目时 选中jdbc, mysql的依赖后期自己手动添加5.0版本

1. 在yml中配置信息:

  1. spring:
  2. datasource:
  3. username: root
  4. password: "0000"
  5. url: jdbc:mysql://localhost:3306/libs
  6. driver-class-name: com.mysql.jdbc.Driver

2. 写测试方法 ,【之前先自动注入一个 DataSource对象】

  1. @RunWith(SpringRunner.class)
  2. @SpringBootTest
  3. class SpringBootDataApplicationTests {
  4. @Autowired
  5. DataSource dataSource;
  6. @Test
  7. void contextLoads() throws SQLException {
  8. Connection connection = dataSource.getConnection();
  9. Statement statement = connection.createStatement();
  10. ResultSet set = statement.executeQuery("select * from books");
  11. while (set.next()){
  12. String bookName = set.getString("bookName");
  13. System.out.println(bookName);
  14. }
  15. connection.close();
  16. }
  17. }

3. 注意:

  • 创建springboot项目时,如果勾选了MySQL驱动的话,springboot的mysql驱动是8.0版本的,不兼容 所以不要勾,自己手动添加mysql依赖
  • 在application.yaml 中配置数据库连接信息的时候,要把密码用 “” 括起来 不然报密码错误

    二、整合Druid数据源

  • Druid是阿里巴巴开源平台上一个数据库连接池实现,结合了C3P0,DBCP等等数据库连接池的优点,同时加入了日志监控

  • Druid可以很好的监控数据库连接池和sql的执行情况,天生就是针对监控而生的数据库连接池
  • spring boot 2.0 以上默认使用 Hikari 数据源,可以说 Hikari与Druid都是当前javaweb上最优秀的数据源。

    1. com.alibaba.druid.pool.DruidDataSource基本参数配置如下

未命名图片.png

三、Druid使用

1. 导入Druid依赖

  1. <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
  2. <dependency>
  3. <groupId>com.alibaba</groupId>
  4. <artifactId>druid</artifactId>
  5. <version>1.2.4</version>
  6. </dependency>

顺手导入log4j依赖

  1. <dependency>
  2. <groupId>log4j</groupId>
  3. <artifactId>log4j</artifactId>
  4. <version>1.2.17</version>
  5. </dependency>

2. 在application配置参数

  1. spring:
  2. datasource:
  3. password: "0000"
  4. username: root
  5. url: jdbc:mysql://localhost:3306/libs
  6. driver-class-name: com.mysql.jdbc.Driver
  7. # 配置德鲁伊数据库连接池
  8. type: com.alibaba.druid.pool.DruidDataSource
  9. #SpringBoot默认是不注入这些的,需要自己绑定
  10. #druid数据源专有配置
  11. initialSize: 5
  12. minIdle: 5
  13. maxActive: 20
  14. maxWait: 60000
  15. timeBetweenEvictionRunsMillis: 60000
  16. minEvictableIdleTimeMillis: 300000
  17. validationQuery: SELECT 1 FROM DUAL
  18. testWhileIdle: true
  19. testOnBorrow: false
  20. testOnReturn: false
  21. poolPreparedStatements: true
  22. #配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
  23. #如果允许报错,java.lang.ClassNotFoundException: org.apache.Log4j.Properity
  24. #则导入log4j 依赖就行
  25. filters: stat,wall,log4j
  26. maxPoolPreparedStatementPerConnectionSize: 20
  27. useGlobalDataSourceStat: true
  28. connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

3. 编写DruidConfig类

url地址栏输入 localhost:8080/druid 就会出现一个登录页面,账号密码是代码里的

  1. /**
  2. * @date: 2021/1/7 0:27
  3. * @author: 易学习
  4. * 此配置文件的作用是 把application.yaml里面专属配置给绑定起来
  5. */
  6. @Configuration
  7. public class DruidConfig {
  8. /**
  9. * 将数据源添加到容器中,并且绑定专属配置
  10. * @return
  11. */
  12. @ConfigurationProperties(prefix = "spring.datasource")
  13. @Bean
  14. public DataSource druidDataSource(){
  15. return new DruidDataSource();
  16. }
  17. /**
  18. * 后台监控 [死代码]
  19. * @return
  20. */
  21. @Bean
  22. public ServletRegistrationBean a(){
  23. ServletRegistrationBean<StatViewServlet> bean =
  24. new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
  25. // 配置后台登录的账号密码
  26. Map<String, String> initParameters = new HashMap<>(16);
  27. // 增加配置 key是固定的 loginUsername loginPassword
  28. initParameters.put("loginUsername", "admin");
  29. initParameters.put("loginPassword", "123456");
  30. // 允许谁可以访问, 如果 value 为"" 则表示所有人可以访问
  31. initParameters.put("allow","");
  32. // 设置初始化参数
  33. bean.setInitParameters(initParameters);
  34. return bean;
  35. }
  36. }

未命名图片.png

四、Druid spring boot starter 使用

1、添加官方的starter

官方地址

  1. <!-- druid starter -->
  2. <dependency>
  3. <groupId>com.alibaba</groupId>
  4. <artifactId>druid-spring-boot-starter</artifactId>
  5. <version>1.1.17</version>
  6. </dependency>
  7. <!--mysql starter-->
  8. <dependency>
  9. <groupId>mysql</groupId>
  10. <artifactId>mysql-connector-java</artifactId>
  11. <version>5.1.38</version>
  12. </dependency>
  13. <!-- jdbc依赖 -->
  14. <dependency>
  15. <groupId>org.springframework.boot</groupId>
  16. <artifactId>spring-boot-starter-jdbc</artifactId>
  17. </dependency>

2、分析自动配置

  • 扩展配置项 **spring.datasource.druid **
  • DruidSpringAopConfiguration.``**class** , 监控SpringBean的;配置项:**spring.datasource.druid.aop-patterns**
  • DruidStatViewServletConfiguration.``**class**, 监控页的配置:**spring.datasource.druid.stat-view-servlet**;默认开启
  • DruidWebStatFilterConfiguration.``**class**, web监控配置;**spring.datasource.druid.web-stat-filter**;默认开启
  • DruidFilterConfiguration.``**class**}) 所有Druid自己filter的配置

3、配置模板

  1. spring:
  2. datasource:
  3. username: root
  4. password: "0000"
  5. driver-class-name: com.mysql.jdbc.Driver
  6. url: jdbc:mysql://localhost:3306/mybatis
  7. druid:
  8. filters: stat,wall # stat开启web监控,wall开启防火墙
  9. stat-view-servlet:
  10. enabled: true # 开启监控页 默认是false
  11. login-username: zhangsan # 监控也登录用户名
  12. login-password: "123123" #监控也登录密码
  13. web-stat-filter:
  14. enabled: true # 开启监控web应用
  15. url-pattern: /* # 监控哪些
  16. # 排除哪些 [有默认值]
  17. exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
  18. filter:
  19. stat: # 开启web监控
  20. enabled: true
  21. slow-sql-millis: 1000 # 超过1000毫秒的查询都是慢查询
  22. log-slow-sql: true # 记录到日志
  23. wall: # 开启防火墙
  24. enabled: true