1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Springboot 系列(九)使用 Spring JDBC 和 Druid 数据源监控

Springboot 系列(九)使用 Spring JDBC 和 Druid 数据源监控

时间:2018-11-28 15:39:24

相关推荐

Springboot 系列(九)使用 Spring JDBC 和 Druid 数据源监控

前言

作为一名 Java 开发者,相信对 JDBC(Java Data Base Connectivity)是不会陌生的,JDBC作为 Java 基础内容,它提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。下面演示下 Springboot 中如何使用 JDBC 操作,并配置使用 Druid 连接池,体验 Druid 对数据库操作强大的监控和扩展功能。Alibaba-Durid 官方手册点这里。

1. 数据库准备

使用mysql数据库创建数据库 springboot,并在库中新建数据表 user 并新增两条信息。

CREATE TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT,`age` int(11) DEFAULT NULL,`birthday` datetime DEFAULT NULL,`password` varchar(32) NOT NULL,`skills` varchar(255) DEFAULT NULL,`username` varchar(32) NOT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;# 新增数据INSERT INTO `springboot`.`user`(`id`, `age`, `birthday`, `password`, `skills`, `username`) VALUES (1, 17, '-01-12 21:02:30', '123', 'Go', 'Darcy');INSERT INTO `springboot`.`user`(`id`, `age`, `birthday`, `password`, `skills`, `username`) VALUES (3, 23, '-01-01 00:11:22', '456', 'Java', 'Chris');

2. 添加依赖

新建一个 Springboot项目,这里不说。添加依赖如下。

<dependencies><!-- spring jdbc 操作模版 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!-- springboot web开发 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- mysql 数据库连接 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!-- 引入druid数据源 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.12</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>

3. 配置数据源信息

常规的 JDBC 配置不需要配置这么多内容,这里因为使用了 Druid 连接池,所以配置了 Druid 部分。对自动配置不理解的可以查看系列文章Springboot 系列(二)Spring Boot 配置文件。

spring:datasource:username: rootpassword: 123url: jdbc:mysql://127.0.0.1:3306/springboot?characterEncoding=utf-8&serverTimezone=GMT%2B8driver-class-name: com.mysql.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSourceinitialSize: 5minIdle: 5maxActive: 20maxWait: 60000timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000validationQuery: SELECT 1 FROM DUALtestWhileIdle: truetestOnBorrow: falsetestOnReturn: falsepoolPreparedStatements: true# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙filters: statmaxPoolPreparedStatementPerConnectionSize: 20useGlobalDataSourceStat: trueconnectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

配置完毕之后,配置信息还不能绑定到 Druid数据源中,还需要新建一个配置类绑定数据源和配置信息。

/*** <p>* Druid 数据源配置** @Author niujinpeng* @Date /1/14 22:20*/@Configurationpublic class DruidConfig {/*** 配置绑定* @return*/@Bean@ConfigurationProperties(prefix = "spring.datasource")public DruidDataSource druid() {return new DruidDataSource();}}

到这里,数据源已经配置完毕,编写测试方法测试 druid 连接池是否生效。

@RunWith(SpringRunner.class)@SpringBootTestpublic class SpringbootDataJdbcApplicationTests {@AutowiredDataSource dataSource;/*** 测试JDBC数据源* @throws SQLException*/@Testpublic void contextLoads() throws SQLException {System.out.println(dataSource.getClass());Connection connection = dataSource.getConnection();System.out.println(connection);connection.close();}}

运行看到 contextLoads 输出信息。

class com.alibaba.druid.pool.DruidDataSourceLoading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.-02-27 14:14:56.144 INFO 12860 --- [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} initedcom.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@3e104d4b

输出日志中的 com.alibaba.druid 说明 Druid 已经生效。

4. 使用 Spring-JDBC

传统的 JDBC 使用中,需要编写大量代码,从构造 PreparedStatement 到查询不胜其烦。面对这样的开发痛点,Spring 封装了 Spring-jdbc. 让我们使用 JdbcTemplate 即可轻松的操作数据库。Spring-jdbc 的详细使用不是这篇文章重点,只简单演示下是否生效。

编写控制器,查询一个 user 信息。

@RestControllerpublic class JdbcController {@AutowiredJdbcTemplate jdbcTemplate;@ResponseBody@GetMapping("/query")public Map<String, Object> map() {List<Map<String, Object>> list = jdbcTemplate.queryForList("select * FROM user");return list.get(0);}}

启动spring 项目,请求 /query 接口得到正常响应。

{"id": 1,"age": 17,"birthday": "-01-12T13:02:30.000+0000","password": "123","skills": "Go","username": "Darcy"}

可见 Spring-JDBC 已经从数据库中取出了数据信息。

5. 使用 Druid 监控

如果使用 Druid 连接池却不使用监控功能,那么就有点暴殄天物了。下面开始配置 Druid 的 SQL 监控功能。在上面写的 DruidConfig 配置类中增加配置 Druid 的 Servlet 和 Filter.

/*** Druid的servlet* @return*/@Beanpublic ServletRegistrationBean statViewServlet() {ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet());Map<String, String> initParams = new HashMap<>();initParams.put("loginUsername", "admin");initParams.put("loginPassword", "123");initParams.put("allow","127.0.0.1");bean.setInitParameters(initParams);bean.setUrlMappings(Arrays.asList("/druid/*"));return bean;}@Beanpublic FilterRegistrationBean webStatFilter() {FilterRegistrationBean<WebStatFilter> bean = new FilterRegistrationBean<>(new WebStatFilter());HashMap<String, String> initParams = new HashMap<>();initParams.put("exclusions", "/css,/druid/*");bean.setInitParameters(initParams);bean.setUrlPatterns(Arrays.asList("/*"));return bean;}

上面配置了 Druid 监控访问路径为/druid、登录用户是admin、登录密码是123、允许访问的IP是127.0.0.1本机、不需要监控的请求是/css/druid开头的请求。

重新启动项目,访问测试/query,然后访问/durid登录页。

登录后可以看到 SQL 监控信息和 URL 监控等信息。

URL 监控。

文章代码已经上传到 GitHub Spring Boot jdb。

本文作者:雪漫士兵

我的微信:wn8398

原文出处: 本片文章是博主原创文章,欢迎转载,转载时在明显位置注明原文链接即可。如果觉得这篇内容有趣好玩有帮助,不妨关注公众号点个好看推荐。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。