当前位置:   article > 正文

SpringBoot 数据源的自动配置HikariDataSource以及使用Druid数据源

hikaridatasource

目录

(一)、数据源的自动配置-HikariDataSource

1、导入JDBC场景

2、分析自动配置

3、修改配置项

4、测试

(二)、使用Druid数据源

1、druid官方github地址

2、自定义方式

3、使用官方starter方式


(一)、数据源的自动配置-HikariDataSource

1、导入JDBC场景

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

 

数据库驱动?

为什么导入JDBC场景,官方不导入驱动?官方不知道我们接下要操作什么数据库。

注意:数据库版本要和驱动版本对应

  1. 默认版本:<mysql.version>8.0.22</mysql.version>
  2. <dependency>
  3. <groupId>mysql</groupId>
  4. <artifactId>mysql-connector-java</artifactId>
  5. <!-- <version>5.1.49</version>-->
  6. </dependency>
  7. 想要修改版本
  8. 1、直接依赖引入具体版本(maven的就近依赖原则)
  9. 2、重新声明版本(maven的属性的就近优先原则)
  10. <properties>
  11. <java.version>1.8</java.version>
  12. <mysql.version>5.1.49</mysql.version>
  13. </properties>

2、分析自动配置

1、自动配置的类

  • DataSourceAutoConfiguration : 数据源的自动配置
    • 修改数据源相关的配置:spring.datasource
    • 数据库连接池的配置,是自己容器中没有DataSource才自动配置的
    • 底层配置好的连接池是:HikariDataSource
  1. @Configuration(proxyBeanMethods = false)
  2. @Conditional(PooledDataSourceCondition.class)
  3. @ConditionalOnMissingBean({ DataSource.class, XADataSource.class })
  4. @Import({ DataSourceConfiguration.Hikari.class, DataSourceConfiguration.Tomcat.class,
  5. DataSourceConfiguration.Dbcp2.class, DataSourceConfiguration.OracleUcp.class,
  6. DataSourceConfiguration.Generic.class, DataSourceJmxConfiguration.class })
  7. protected static class PooledDataSourceConfiguration
  • DataSourceTransactionManagerAutoConfiguration: 事务管理器的自动配置
  • JdbcTemplateAutoConfiguration: JdbcTemplate的自动配置,可以来对数据库进行crud
    • 可以修改这个配置项@ConfigurationProperties(prefix = "spring.jdbc") 来修改JdbcTemplate
    • JdbcTemplate;容器中有这个组件
  • JndiDataSourceAutoConfiguration: jndi的自动配置
  • XADataSourceAutoConfiguration: 分布式事务相关的

3、修改配置项

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

4、测试

  1. @Slf4j
  2. @SpringBootTest
  3. class Boot05WebAdminApplicationTests {
  4. @Autowired
  5. JdbcTemplate jdbcTemplate;
  6. @Test
  7. void contextLoads() {
  8. Long aLong = jdbcTemplate.queryForObject("select count(*) from account_tbl", Long.class);
  9. log.info("记录总数:{}",aLong);
  10. }
  11. }

(二)、使用Druid数据源

1、druid官方github地址

GitHub - alibaba/druid: 阿里云计算平台DataWorks(https://help.aliyun.com/document_detail/137663.html) 团队出品,为监控而生的数据库连接池

整合第三方技术的两种方式

  • 自定义
  • 找starter

2、自定义方式

1、创建数据源

  1. 导入druid的依赖
  2. <dependency>
  3. <groupId>com.alibaba</groupId>
  4. <artifactId>druid</artifactId>
  5. <version>1.1.17</version>
  6. </dependency>

2、StatViewServlet

StatViewServlet的用途包括:

  • 提供监控信息展示的html页面
  • 提供监控信息的JSON API
  1. <servlet>
  2. <servlet-name>DruidStatView</servlet-name>
  3. <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
  4. </servlet>
  5. <servlet-mapping>
  6. <servlet-name>DruidStatView</servlet-name>
  7. <url-pattern>/druid/*</url-pattern>
  8. </servlet-mapping>

3、StatFilter
用于统计监控信息;如SQL监控、URI监控
 

  1. 需要给数据源中配置如下属性;可以允许多个filter,多个用,分割;如:
  2. <property name="filters" value="stat,slf4j" />

系统中所有filter:

别名

Filter类名

default

com.alibaba.druid.filter.stat.StatFilter

stat

com.alibaba.druid.filter.stat.StatFilter

mergeStat

com.alibaba.druid.filter.stat.MergeStatFilter

encoding

com.alibaba.druid.filter.encoding.EncodingConvertFilter

log4j

com.alibaba.druid.filter.logging.Log4jFilter

log4j2

com.alibaba.druid.filter.logging.Log4j2Filter

slf4j

com.alibaba.druid.filter.logging.Slf4jLogFilter

commonlogging

com.alibaba.druid.filter.logging.CommonsLogFilter

慢SQL记录配置

  1. <bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
  2. <property name="slowSqlMillis" value="10000" />
  3. <property name="logSlowSql" value="true" />
  4. </bean>
  5. 使用 slowSqlMillis 定义慢SQL的时长

上面的配置也可以通过配置类直接编码实现

  1. @Configuration
  2. public class MyDatasourceConfig {
  3. @ConfigurationProperties("spring.datasource")
  4. @Bean
  5. public DataSource dataSource() throws SQLException {
  6. DruidDataSource druidDataSource = new DruidDataSource();
  7. //加入监控功能
  8. druidDataSource.setFilters("stat,wall");
  9. return druidDataSource;
  10. }
  11. /*
  12. * 配置Druid的监控页功能
  13. */
  14. @Bean
  15. public ServletRegistrationBean statViewServlet() {
  16. StatViewServlet statViewServlet = new StatViewServlet();
  17. ServletRegistrationBean<StatViewServlet> servletServletRegistrationBean = new ServletRegistrationBean<StatViewServlet>(statViewServlet,"/druid/*");
  18. servletServletRegistrationBean.addInitParameter("loginUsername","admin");
  19. servletServletRegistrationBean.addInitParameter("loginPassword","123456");
  20. return servletServletRegistrationBean;
  21. }
  22. /*
  23. * webStatFilter 用于采集web-jdbc关联监控的数据
  24. */
  25. @Bean
  26. public FilterRegistrationBean webStatFilter() {
  27. WebStatFilter webStatFilter = new WebStatFilter();
  28. FilterRegistrationBean<WebStatFilter> webStatFilterFilterRegistrationBean = new FilterRegistrationBean<>(webStatFilter);
  29. webStatFilterFilterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));
  30. webStatFilterFilterRegistrationBean.addInitParameter("exclusions","*.js,*.css,/druid/*");
  31. return webStatFilterFilterRegistrationBean;
  32. }
  33. }

3、使用官方starter方

1、引入druid-starter

  1. <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>druid-spring-boot-starter</artifactId>
  4. <version>1.1.17</version>
  5. </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的配置
  1. private static final String FILTER_STAT_PREFIX = "spring.datasource.druid.filter.stat";
  2. private static final String FILTER_CONFIG_PREFIX = "spring.datasource.druid.filter.config";
  3. private static final String FILTER_ENCODING_PREFIX = "spring.datasource.druid.filter.encoding";
  4. private static final String FILTER_SLF4J_PREFIX = "spring.datasource.druid.filter.slf4j";
  5. private static final String FILTER_LOG4J_PREFIX = "spring.datasource.druid.filter.log4j";
  6. private static final String FILTER_LOG4J2_PREFIX = "spring.datasource.druid.filter.log4j2";
  7. private static final String FILTER_COMMONS_LOG_PREFIX = "spring.datasource.druid.filter.commons-log";
  8. private static final String FILTER_WALL_PREFIX = "spring.datasource.druid.filter.wall";

 3、配置示例

  1. spring:
  2. datasource:
  3. url: jdbc:mysql://localhost:3306/db_account
  4. username: root
  5. password: 123456
  6. driver-class-name: com.mysql.jdbc.Driver
  7. druid:
  8. aop-patterns: com.atguigu.admin.* #监控SpringBean
  9. filters: stat,wall # 底层开启功能,stat(sql监控),wall(防火墙)
  10. stat-view-servlet: # 配置监控页功能
  11. enabled: true
  12. login-username: admin
  13. login-password: admin
  14. resetEnable: false
  15. web-stat-filter: # 监控web
  16. enabled: true
  17. urlPattern: /*
  18. exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
  19. filter:
  20. stat: # 对上面filters里面的stat的详细配置
  21. slow-sql-millis: 1000
  22. logSlowSql: true
  23. enabled: true
  24. wall:
  25. enabled: true
  26. config:
  27. drop-table-allow: false

SpringBoot配置示例

https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter

配置项列表https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7%BD%AE%E5%B1%9E%E6%80%A7%E5%88%97%E8%A1%A8

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/336913
推荐阅读
相关标签
  

闽ICP备14008679号