SpringBoot入门(四)—— druid的使用
2018-01-15 20:37
351 查看
一、在pom.xml中添加druid依赖<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>com.druid.demo</groupId>
<artifactId>DruidDemo</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>DruidDemo Maven Webapp</name>
<url>http://maven.apache.org</url>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<!-- web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.5</version>
</dependency>
<!-- jpa -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies>
<build>
<finalName>DruidDemo</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
二、在application.yml中配置druid属性spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://127.0.0.1:3306/test?useSSL=false
username: root
password: 123456
driverClassName: com.mysql.jdbc.Driver
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: select 1 from dual
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
filters: stat,wall,log4j
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
三、新建configuration包,包下新建DruidConfiguration类,配置druid
@Configuration
public class DruidConfiguration {
private static final Logger logger = LoggerFactory.getLogger(DruidConfiguration.class);
@Value("${spring.datasource.url}")
private String dbUrl;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Value("${spring.datasource.driverClassName}")
private String driverClassName;
@Value("${spring.datasource.initialSize}")
private Integer initialSize;
@Value("${spring.datasource.minIdle}")
private Integer minIdle;
@Value("${spring.datasource.maxActive}")
private Integer maxActive;
@Value("${spring.datasource.maxWait}")
private Integer maxWait;
@Value("${spring.datasource.timeBetweenEvictionRunsMillis}")
private Integer timeBetweenEvictionRunsMillis;
@Value("${spring.datasource.minEvictableIdleTimeMillis}")
private Integer minEvictableIdleTimeMillis;
@Value("${spring.datasource.validationQuery}")
private String validationQuery;
@Value("${spring.datasource.testWhileIdle}")
private boolean testWhileIdle;
@Value("${spring.datasource.testOnBorrow}")
private boolean testOnBorrow;
@Value("${spring.datasource.testOnReturn}")
private boolean testOnReturn;
@Value("${spring.datasource.poolPreparedStatements}")
private boolean poolPreparedStatements;
@Value("${spring.datasource.filters}")
private String filters;
@Bean
public ServletRegistrationBean druidServlet() {
logger.info("初始化druid Servlet容器");
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
servletRegistrationBean.setServlet(new StatViewServlet());
servletRegistrationBean.addUrlMappings("/druid/*");
// IP白名单
servletRegistrationBean.addInitParameter("allow", "192.168.2.25,127.0.0.1");
// IP黑名单(共同存在时,deny优先于allow)
servletRegistrationBean.addInitParameter("deny", "192.168.1.100");
//控制台管理用户
servletRegistrationBean.addInitParameter("loginUsername", "druid");
servletRegistrationBean.addInitParameter("loginPassword", "123456");
//是否能够重置数据 禁用HTML页面上的“Reset All”功能
servletRegistrationBean.addInitParameter("resetEnable", "false");
return servletRegistrationBean;
}
@Bean
public FilterRegistrationBean filterRegistrationBean() {
logger.info("filterRegistrationBean()...");
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(new WebStatFilter());
filterRegistrationBean.addUrlPatterns("/*");
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
filterRegistrationBean.addInitParameter("profileEnable", "true");
filterRegistrationBean.addInitParameter("principalCookieName", "USER_COOKIE");
filterRegistrationBean.addInitParameter("principalSessionName", "USER_SESSION");
return filterRegistrationBean;
}
@Bean
@Primary//表示存在多个datasource时优先使用的datasource
public DataSource druidDataSource(){
logger.info("数据源配置...");
DruidDataSource datasource = new DruidDataSource();
datasource.setUrl(dbUrl);
datasource.setUsername(username);
datasource.setPassword(password);
datasource.setDriverClassName(driverClassName);
datasource.setInitialSize(initialSize);
datasource.setMinIdle(minIdle);
datasource.setMaxActive(maxActive);
datasource.setMaxWait(maxWait);
datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
datasource.setValidationQuery(validationQuery);
datasource.setTestWhileIdle(testWhileIdle);
datasource.setTestOnBorrow(testOnBorrow);
datasource.setTestOnReturn(testOnReturn);
datasource.setPoolPreparedStatements(poolPreparedStatements);
try {
datasource.setFilters(filters);
} catch (SQLException e) {
logger.error("druid configuration initialization filter", e);
}
return datasource;
}
}四、启动Application.java,浏览器中访问http://localhost:8080/druid/login.html,输入我们在DruidConfiguration中设置的用户名密码登录,可进入druid监控页面。
![](https://img-blog.csdn.net/20180115204925405?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveTE4MjAxOTY5NTcy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20180115205043132?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveTE4MjAxOTY5NTcy/font/5a6L5L2T/fontsize/400/fill/I0JBQkF<br/>4000<br/>CMA==/dissolve/70/gravity/SouthEast)
五、我们新建一个UserController.java,在controller中定义一个findUser方法
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/findUser")
public User findByUserName(String userName){
return userService.findByUserName(userName);
}
}
六、浏览器中访问 http://localhost:8080/findUser?userName=zhangsan
![](https://img-blog.csdn.net/20180115210256014?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveTE4MjAxOTY5NTcy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
七、此时我们再登录druid监控图像化界面,可看到执行sql消耗的资源
![](https://img-blog.csdn.net/20180115210416858?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveTE4MjAxOTY5NTcy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
番外篇:我们也可以通过测试类来取得druid的配置参数信息@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class TestDruidConfiguration {
@Autowired
private DataSource dataSource;
@Autowired
private UserDao userDao;
@Test
public void getConnection(){
try {
DruidDataSource dds = (DruidDataSource)dataSource;
System.out.println("初始化连接数======>" + dds.getInitialSize());
userDao.findByUserName("zhangsan");
userDao.findByUserName("李四");
System.out.println("最小空闲连接======>" + dds.getMinIdle());
System.out.println("连接总数======>" + dds.getConnectCount());
System.out.println("拿到的连接======>" + dds.getConnection());
System.out.println("" + dds.getDestroyCount());
}catch (Exception e){
e.printStackTrace();
}
}
}
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>com.druid.demo</groupId>
<artifactId>DruidDemo</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>DruidDemo Maven Webapp</name>
<url>http://maven.apache.org</url>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<!-- web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.5</version>
</dependency>
<!-- jpa -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies>
<build>
<finalName>DruidDemo</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
二、在application.yml中配置druid属性spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://127.0.0.1:3306/test?useSSL=false
username: root
password: 123456
driverClassName: com.mysql.jdbc.Driver
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: select 1 from dual
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
filters: stat,wall,log4j
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
三、新建configuration包,包下新建DruidConfiguration类,配置druid
@Configuration
public class DruidConfiguration {
private static final Logger logger = LoggerFactory.getLogger(DruidConfiguration.class);
@Value("${spring.datasource.url}")
private String dbUrl;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Value("${spring.datasource.driverClassName}")
private String driverClassName;
@Value("${spring.datasource.initialSize}")
private Integer initialSize;
@Value("${spring.datasource.minIdle}")
private Integer minIdle;
@Value("${spring.datasource.maxActive}")
private Integer maxActive;
@Value("${spring.datasource.maxWait}")
private Integer maxWait;
@Value("${spring.datasource.timeBetweenEvictionRunsMillis}")
private Integer timeBetweenEvictionRunsMillis;
@Value("${spring.datasource.minEvictableIdleTimeMillis}")
private Integer minEvictableIdleTimeMillis;
@Value("${spring.datasource.validationQuery}")
private String validationQuery;
@Value("${spring.datasource.testWhileIdle}")
private boolean testWhileIdle;
@Value("${spring.datasource.testOnBorrow}")
private boolean testOnBorrow;
@Value("${spring.datasource.testOnReturn}")
private boolean testOnReturn;
@Value("${spring.datasource.poolPreparedStatements}")
private boolean poolPreparedStatements;
@Value("${spring.datasource.filters}")
private String filters;
@Bean
public ServletRegistrationBean druidServlet() {
logger.info("初始化druid Servlet容器");
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
servletRegistrationBean.setServlet(new StatViewServlet());
servletRegistrationBean.addUrlMappings("/druid/*");
// IP白名单
servletRegistrationBean.addInitParameter("allow", "192.168.2.25,127.0.0.1");
// IP黑名单(共同存在时,deny优先于allow)
servletRegistrationBean.addInitParameter("deny", "192.168.1.100");
//控制台管理用户
servletRegistrationBean.addInitParameter("loginUsername", "druid");
servletRegistrationBean.addInitParameter("loginPassword", "123456");
//是否能够重置数据 禁用HTML页面上的“Reset All”功能
servletRegistrationBean.addInitParameter("resetEnable", "false");
return servletRegistrationBean;
}
@Bean
public FilterRegistrationBean filterRegistrationBean() {
logger.info("filterRegistrationBean()...");
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(new WebStatFilter());
filterRegistrationBean.addUrlPatterns("/*");
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
filterRegistrationBean.addInitParameter("profileEnable", "true");
filterRegistrationBean.addInitParameter("principalCookieName", "USER_COOKIE");
filterRegistrationBean.addInitParameter("principalSessionName", "USER_SESSION");
return filterRegistrationBean;
}
@Bean
@Primary//表示存在多个datasource时优先使用的datasource
public DataSource druidDataSource(){
logger.info("数据源配置...");
DruidDataSource datasource = new DruidDataSource();
datasource.setUrl(dbUrl);
datasource.setUsername(username);
datasource.setPassword(password);
datasource.setDriverClassName(driverClassName);
datasource.setInitialSize(initialSize);
datasource.setMinIdle(minIdle);
datasource.setMaxActive(maxActive);
datasource.setMaxWait(maxWait);
datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
datasource.setValidationQuery(validationQuery);
datasource.setTestWhileIdle(testWhileIdle);
datasource.setTestOnBorrow(testOnBorrow);
datasource.setTestOnReturn(testOnReturn);
datasource.setPoolPreparedStatements(poolPreparedStatements);
try {
datasource.setFilters(filters);
} catch (SQLException e) {
logger.error("druid configuration initialization filter", e);
}
return datasource;
}
}四、启动Application.java,浏览器中访问http://localhost:8080/druid/login.html,输入我们在DruidConfiguration中设置的用户名密码登录,可进入druid监控页面。
五、我们新建一个UserController.java,在controller中定义一个findUser方法
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/findUser")
public User findByUserName(String userName){
return userService.findByUserName(userName);
}
}
六、浏览器中访问 http://localhost:8080/findUser?userName=zhangsan
七、此时我们再登录druid监控图像化界面,可看到执行sql消耗的资源
番外篇:我们也可以通过测试类来取得druid的配置参数信息@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class TestDruidConfiguration {
@Autowired
private DataSource dataSource;
@Autowired
private UserDao userDao;
@Test
public void getConnection(){
try {
DruidDataSource dds = (DruidDataSource)dataSource;
System.out.println("初始化连接数======>" + dds.getInitialSize());
userDao.findByUserName("zhangsan");
userDao.findByUserName("李四");
System.out.println("最小空闲连接======>" + dds.getMinIdle());
System.out.println("连接总数======>" + dds.getConnectCount());
System.out.println("拿到的连接======>" + dds.getConnection());
System.out.println("" + dds.getDestroyCount());
}catch (Exception e){
e.printStackTrace();
}
}
}
相关文章推荐
- Spring Boot 使用 Druid 和监控配置
- (16)Spring Boot使用Druid(编程注入)【从零开始学Spring Boot】
- 16. Spring Boot使用Druid(编程注入)【从零开始学Spring Boot】
- 学记:spring boot使用官网推荐以外的其他数据源druid
- (15)Spring Boot使用Druid和监控配置【从零开始学Spring Boot】
- Spring Boot 官方文档学习(一)入门及使用
- Spring Boot使用Druid和监控配置
- Spring Boot 官方文档入门及使用
- Spring Boot 官方文档学习(一)入门及使用
- spring boot 入门-使用spring boot构建简单应用
- Spring-Boot整合mybatis(二),使用阿里的druid包,进行监控SQL执行速度
- Spring Boot 使用 Druid 和监控配置
- Spring Boot 使用 Druid 和监控配置
- Spring Boot 使用 Druid 和监控配置
- Spring基础:快速入门spring boot(4):使用slf4j输出日志
- Spring Boot 学习(一)入门及使用
- Spring Boot入门级使用教程
- (16)Spring Boot使用Druid(编程注入)【从零开始学Spring Boot】
- spring boot + JdbcTemplate 使用druid数据源
- 15、Spring Boot使用Druid和监控配置【从零开始学Spring Boot】