SpringBoot(6) 集成Druid数据源
介绍两种方式集成,一般都是使用application.prperties文件来配置。
1,使用springboot配置文件(application.properties)集成。
2,使用配置类集成。
SpringBoot提倡基于java的配置,尽管你可以使用XML源调用SpringApplication.run(),不过还是建议你使用@Configuration类作为主要配置源。(但我们还是用XML源较多)
从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或 AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
一,导入所需依赖。
1 <!--web场景支持--> 2 <dependency> 3 <groupId>org.springframework.boot</groupId> 4 <artifactId>spring-boot-starter-web</artifactId> 5 </dependency> 6 7 <!--mybatis场景支持--> 8 <dependency> 9 <groupId>org.mybatis.spring.boot</groupId> 10 <artifactId>mybatis-spring-boot-starter</artifactId> 11 <version>2.1.2</version> 12 </dependency> 13 <dependency> 14 <groupId>mysql</groupId> 15 <artifactId>mysql-connector-java</artifactId> 16 <scope>runtime</scope> 17 </dependency> 18 19 <dependency> 20 <groupId>org.springframework.boot</groupId> 21 <artifactId>spring-boot-starter-test</artifactId> 22 <scope>test</scope> 23 <exclusions> 24 <exclusion> 25 <groupId>org.junit.vintage</groupId> 26 <artifactId>junit-vintage-engine</artifactId> 27 </exclusion> 28 </exclusions> 29 </dependency> 30 <!--druid数据源--> 31 <dependency> 32 <groupId>com.alibaba</groupId> 33 <artifactId>druid-spring-boot-starter</artifactId> 34 <version>1.1.17</version> 35 </dependency>
二,编写application.prperties配置文件;第一种方式。
#数据源 配置 #指定数据源类型 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource #数据库驱动 spring.datasource.driver-class-name= com.mysql.jdbc.Driver #远程连接url spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&charaterEncoding=utf-8&useSSL=false #数据库用户名 spring.datasource.username=root #数据库密码 spring.datasource.password=123456 # myBatis 配置 # 配置扫描实体类 mybatis.type-aliases-package=com.example.springboot5.entity.Emp # 配置扫描映射文件(如果和接口在同一文件不需要配置) #mybatis.mapper-locations=com.example.springboot5.mapper/*.xml #是否启用StatFilter默认值false spring.datasource.druid.web-stat-filter.enabled=true #是否启用StatViewServlet(监控页面)默认值为false(考虑到安全问题默认并未启动,如需启用建议设置密码或白名单以保障安全) spring.datasource.druid.stat-view-servlet.enabled=true # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 spring.datasource.druid.filters=stat,wall,slf4j # 配置监控url spring.datasource.druid.stat-view-servlet.url-pattern=/druid/* #配置监控链接 spring.datasource.druid.web-stat-filter.url-pattern=/* # 配置忽略过滤形式 spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/* # 配置druid 登录名 和 密码 spring.datasource.druid.stat-view-servlet.login-username=root spring.datasource.druid.stat-view-servlet.login-password=123456 #初始化时建立物理连接的个数 spring.datasource.druid.initial-size=5 #最小连接池数量 spring.datasource.druid.min-idle=5 #最大连接池数量 spring.datasource.druid.max-active=20 #获取连接时最大等待时间,单位毫秒 spring.datasource.druid.max-wait=60000 #用来检测连接是否有效的sql 必须是一个查询语句 #mysql中为 select 'x' #oracle中为 select 1 from dual spring.datasource.druid.validation-query=select 'x'
三,@Configuration类方式配置。
常见注解:
@Configuration 配置类注解
@Bean 注入bean到Spring容器中
@Primary 当同一类型的bean出现时,默认优先选择
@Value 将外部的值注入bean中
@Resource 按照名称装载bean
@Autowired 按照类型装载bean
@Primary 优先使用该bean
package com.example.springboot5.config; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.support.http.WebStatFilter; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import javax.sql.DataSource; import java.util.HashMap; import java.util.Map; @Configuration public class DruidConfig { @Bean @Primary public DataSource dataSource(){ //指定使用数据源 DruidDataSource dataSource = new DruidDataSource(); //数据库连接信息 dataSource.setUrl("jdbc:mysql://localhost:3306/test"); //数据库用户名和密码 dataSource.setName("root"); dataSource.setPassword("123456"); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); try{ //配置默认拦截 dataSource.setFilters("stat,wall,slf4j"); }catch (Exception e){ } return dataSource; } @Bean public FilterRegistrationBean filterRegistrationBean(){ //创建过滤器 FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); filterRegistrationBean.setFilter(new WebStatFilter()); filterRegistrationBean.setEnabled(true); Map<String,Object> intiParams = new HashMap<>(); //忽略过滤的文件 intiParams.put("exclusions","*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"); filterRegistrationBean.setInitParameters(intiParams); //设置过滤路径 filterRegistrationBean.addUrlPatterns("/*"); return filterRegistrationBean; } }
四,Controller编写,用于测试。
1 package com.example.springboot5.web; 2 3 import com.example.springboot5.entity.Emp; 4 import com.example.springboot5.service.EmpService; 5 import org.springframework.beans.factory.annotation.Autowired; 6 import org.springframework.web.bind.annotation.RequestMapping; 7 import org.springframework.web.bind.annotation.ResponseBody; 8 import org.springframework.web.bind.annotation.RestController; 9 10 import java.util.HashMap; 11 import java.util.List; 12 import java.util.Map; 13 14 //官方推荐注解 15 @RestController 16 public class WebController { 17 18 @Autowired 19 private EmpService empService; 20 21 @RequestMapping("/emplist") 22 @ResponseBody 23 private Map<String,Object> empList(){ 24 Map<String,Object> model = new HashMap<>(); 25 //大家可以使用静态数据 26 List<Emp> emps = empService.findEmpList(); 27 model.put("emps",emps); 28 model.put("success",true); 29 return model; 30 } 31 32 33 }
五,测试
六,查看数据库记录(druid自带的数据监控)
访问地址:localhost:8080/druid 访问druid数据监控
登录成功后,会进入index.html。
该里面就会有所有查询语句的记录。
最后贴上项目结构