使用JDBC的默认配置
导数据库场景依赖和数据库驱动
//导入数据库场景依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jdbc</artifactId> </dependency> //数据库驱动 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
导入场景依赖后,分析自动配置类
1)数据源自动配置类是:DataSourceAutoConfiguration 2)通过修改boot配置文件中的spring.datasource,可以配置数据库中的各个属性 3)因为场景依赖中默认引入了Hikari的依赖,所以springboot底层默认支持HikariDataSource 前提是引入了Hikari依赖且容器中没有配置其他的数据源。 4)因为场景依赖中默认引入了JdbcTemplate依赖,所以也有JdbcTemplate的自动配置类 叫JdbcTemplateAutoConfiguration,所以我们可以在dao层中直接自动引用JdbcTemplate JdbcTemplate的属性设置可以通过修改boot的配置文件spring.jdbc进行设置
配置Druid连接池
手动配置Druid的各个功能
导入Druid依赖
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.8</version> </dependency>
配置自定义Druid数据源
/* 配置druid数据源 这会导致底层默认使用的HikariDataSource无效,因为 @ConditionalOnMissingBean(DataSource.class) @ConfigurationProperties("spring.datasource")的意思是 使得DruidDataSource中各个属性与配置文件中的spring.datasource进行绑定 */ @ConfigurationProperties("spring.datasource") @Bean public DataSource dataSource(){ DruidDataSource dataSource = new DruidDataSource(); return dataSource; } //以上方式,就可在容器中注册druid数据库连接池并使用
配置druid的内置监控页面
1)配置druid监控功能,即向容器中加入StatViewServlet /*配置druid的监控页功能*/ @Bean public ServletRegistrationBean statViewServlet(){ StatViewServlet statViewServlet = new StatViewServlet(); ServletRegistrationBean<StatViewServlet> servletRegistrationBean = new ServletRegistrationBean<>(statViewServlet,"/druid/*"); return servletRegistrationBean; } 2)在DruidDataSource中开启监控 DruidDataSource dataSource = new DruidDataSource(); //开启druid的监控功能 dataSource.setFilters("stat");
配置监控页中的Web应用
/*配置WebStatFilter用于采集web-jdbc关联监控的数据*/ @Bean public FilterRegistrationBean webStatFilter(){ WebStatFilter webStatFilter = new WebStatFilter(); FilterRegistrationBean<WebStatFilter> webStatFilterFilterRegistrationBean = new FilterRegistrationBean<>(webStatFilter); webStatFilterFilterRegistrationBean.setUrlPatterns(Arrays.asList("/*")); //排除掉静态资源和监控页的访问监控 webStatFilterFilterRegistrationBean. addInitParameter("exclusions","*.js,*.jpg,*.css,/druid/*"); return webStatFilterFilterRegistrationBean; }
配置监控页中的防火墙
//直接在DruidDataSource中设置 DruidDataSource dataSource = new DruidDataSource(); //开启druid的监控功能和防火墙功能 dataSource.setFilters("stat,wall");
配置监控页的账号和密码
/*配置druid的监控页功能*/ @Bean public ServletRegistrationBean statViewServlet(){ StatViewServlet statViewServlet = new StatViewServlet(); ServletRegistrationBean<StatViewServlet> servletRegistrationBean = new ServletRegistrationBean<>(statViewServlet,"/druid/*"); //增加监控页的账号密码 servletRegistrationBean.addInitParameter("loginUsername","万一"); servletRegistrationBean.addInitParameter("loginPassword","123765"); return servletRegistrationBean; } //以上就是手动向容器中注册druid的各个功能组件
使用官方的starter场景依赖
导入druid的starter场景依赖
<!-- druid_starter 在该场景依赖中会导入druid的依赖以及各种自动配置类 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.17</version> </dependency>
导入场景依赖后,分析其中的自动配置类
1)核心自动配置类,DruidDataSourceAutoConfigure 2)该类上依赖了两个属性文件,DruidStatProperties.class(spring.datasource.druid) DataSourceProperties.class(spring.datasource) 3)该自动配置类上导入了以下几个配置类 DruidSpringAopConfiguration.class 其作用是作用是配置监控页中的spring监控(监控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的配置 通过修改下面配置进行设置对应功能 spring.datasource.druid.filter.stat spring.datasource.druid.filter.config spring.datasource.druid.filter.encoding spring.datasource.druid.filter.slf4j"; "spring.datasource.druid.filter.log4j"; "spring.datasource.druid.filter.log4j2"; "spring.datasource.druid.filter.commons-log"; "spring.datasource.druid.filter.wall"; "spring.datasource.druid.filter.wall.config";
使用druid场景依赖后,我们可以直接通过boot的配置从而配置监控页的各个功能
spring: datasource: url: jdbc:mysql://localhost:3306/wechat? serverTimezone=GMT&useSSL=false&characterEncoding=utf-8 username: root password: 123765 driver-class-name: com.mysql.cj.jdbc.Driver druid: # 开启监控和防火墙功能 filters: stat,wall # 设置单个filter功能细节 filter: wall: config: drop-table-allow: false # 监控页的配置 stat-view-servlet: enabled: true login-username: 万一 login-password: 8008208820 # 配置监控页中的Web应用 web-stat-filter: enabled: true url-pattern: /* exclusions: '*.js,*.jpg,*.css,/druid/*' # 开启监控页中的spring监控功能,监控spring这个包下的所有组件 aop-patterns: world.keyi.boot.*