易筋SpringBoot 2.1 | 第十二篇:SpringBoot综合应用DataSoure
写作时间:2019-08-05
Spring Boot: 2.1 ,JDK: 1.8, IDE: IntelliJ IDEA
说明
服务器都要跟数据库打交道,这里通过Actuator去检测已经加载的Beans,以及对数据库创建表,初始化数据,已经程序对数据的读取。
工程建立
参照教程【SpringBoot 2.1 | 第一篇:构建第一个SpringBoot工程】新建一个Spring Boot项目,名字叫demojdbccompose, 在目录src/main/java/resources
下找到配置文件application.properties
,重命名为application.yml
。
在Dependency中选择
Developer Tools > Lombok
Web > Spring Web Starter
SQL > H2 DataBase / JDBC API
Ops > Spring Boot Actuator。
配置pom.xml依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Controller处理请求
com.zgpeace.demojdbccompose.DemojdbccomposeApplication
package com.zgpeace.demojdbccompose;import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.jdbc.core.JdbcTemplate;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;@SpringBootApplication
@Slf4j
public class DemojdbccomposeApplication implements CommandLineRunner {@Autowiredprivate DataSource dataSource;public static void main(String[] args) {SpringApplication.run(DemojdbccomposeApplication.class, args);}@Overridepublic void run(String... args) throws Exception {showConnection();}private void showConnection() throws SQLException {log.info("dataSource >> " + dataSource.toString());Connection conn = dataSource.getConnection();log.info("conn >> " + conn.toString());conn.close();}
}
注意:DemojdbccomposeApplication需要implement 接口CommandLineRunner,才能override run方法。
打印启动信息
o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''c.z.d.DemojdbccomposeApplication : Started DemojdbccomposeApplication in 3.986 seconds (JVM running for 4.935)
c.z.d.DemojdbccomposeApplication : dataSource >> HikariDataSource (null)com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
c.z.d.DemojdbccomposeApplication : conn >> HikariProxyConnection@364389956 wrapping conn0: url=jdbc:h2:mem:testdb user=SAo.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'o.s.web.servlet.DispatcherServlet : Completed initialization in 10 ms
创建表
新建文件 resources > schema.sql
CREATE TABLE FOO (ID INT IDENTITY, BAR VARCHAR(64));
创建sql数据
新建文件 resources > data.sql
INSERT INTO FOO (ID, BAR) VALUES (1, 'aaa');
INSERT INTO FOO (ID, BAR) VALUES (2, 'bbb');
打印数据库数据
在类com.zgpeace.demojdbccompose.DemojdbccomposeApplication,添加新的内容
import org.springframework.jdbc.core.JdbcTemplate;@SpringBootApplication
@Slf4j
public class DemojdbccomposeApplication implements CommandLineRunner {@Autowiredprivate JdbcTemplate jdbcTemplate;@Overridepublic void run(String... args) throws Exception {showConnection();showData();}private void showData() {jdbcTemplate.queryForList("SELECT * FROM FOO").forEach(row -> log.info("data >> " + row.toString()));}
运行结果
c.z.d.DemojdbccomposeApplication : data >> {ID=1, BAR=aaa}
c.z.d.DemojdbccomposeApplication : data >> {ID=2, BAR=bbb}
查看Actuator启动项信息
配置application.yml, 开启Actuator查看更多信息
management:endpoints:web:exposure:include: '*'endpoint:health:show-details: alwaysbeans:enabled: true
查看health信息
% curl http://localhost:8080/actuator/health
{"status":"UP","details":{"db":{"status":"UP","details":{"database":"H2","hello":1}},"diskSpace":{"status":"UP","details":{"total":250790436864,"free":36456947712,"threshold":10485760}}}}% ``> 查看metrics信息 ```shell
% curl http://localhost:8080/actuator/metrics
{"names":
["jvm.memory.max","jvm.threads.states","jdbc.connections.active","process.files.max","jvm.gc.memory.promoted","system.load.average.1m","jvm.memory.used","jvm.gc.max.data.size","jdbc.connections.max","jdbc.connections.min","jvm.gc.pause","jvm.memory.committed",
"system.cpu.count","logback.events","http.server.requests","tomcat.global.sent","jvm.buffer.memory.used","tomcat.sessions.created","jvm.threads.daemon","system.cpu.usage","jvm.gc.memory.allocated","tomcat.global.request.max","hikaricp.connections.idle","hikaricp.connections.pending",
"tomcat.global.request","tomcat.sessions.expired","hikaricp.connections","jvm.threads.live","jvm.threads.peak","tomcat.global.received","hikaricp.connections.active","hikaricp.connections.creation","process.uptime","tomcat.sessions.rejected",
"process.cpu.usage","tomcat.threads.config.max","jvm.classes.loaded","hikaricp.connections.max","hikaricp.connections.min","jvm.classes.unloaded","tomcat.global.error","tomcat.sessions.active.current","tomcat.sessions.alive.max","jvm.gc.live.data.size",
"hikaricp.connections.usage","tomcat.threads.current","hikaricp.connections.timeout","process.files.open","jvm.buffer.count","jvm.buffer.total.capacity","tomcat.sessions.active.max","hikaricp.connections.acquire","tomcat.threads.busy","process.start.time"]}%
查看启动beans信息, 这里只列出了数据源相关的beans,其它省略…
{"contexts":{"application":{"beans":{"dataSource":{"aliases":[],"scope":"singleton","type":"com.zaxxer.hikari.HikariDataSource","resource":"class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]","dependencies":["spring.datasource-org.springframework.boot.autoconfigure.jdbc.DataSourceProperties"]},"jdbcTemplate":{"aliases":[],"scope":"singleton","type":"org.springframework.jdbc.core.JdbcTemplate","resource":"class path resource [org/springframework/boot/autoconfigure/jdbc/JdbcTemplateAutoConfiguration$JdbcTemplateConfiguration.class]","dependencies":[]},"transactionTemplate":{"aliases":[],"scope":"singleton","type":"org.springframework.transaction.support.TransactionTemplate","resource":"class path resource [org/springframework/boot/autoconfigure/transaction/TransactionAutoConfiguration$TransactionTemplateConfiguration.class]","dependencies":[]},"transactionManager":{"aliases":[],"scope":"singleton","type":"org.springframework.jdbc.datasource.DataSourceTransactionManager","resource":"class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceTransactionManagerAutoConfiguration$DataSourceTransactionManagerConfiguration.class]","dependencies":["spring.datasource-org.springframework.boot.autoconfigure.jdbc.DataSourceProperties"]},...
更多Actuator的信息请参考官网:Part V. Spring Boot Actuator: Production-ready features
总结
恭喜你,学会了应用Actuator查看 health。
代码下载:
https://github.com/zgpeace/Spring-Boot2.1/tree/master/db/demojdbccompose
参考
https://github.com/geektime-geekbang/geektime-spring-family
https://time.geekbang.org/course/detail/156-80191
https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html
易筋SpringBoot 2.1 | 第十二篇:SpringBoot综合应用DataSoure相关推荐
- 跟我学SpringCloud | 第十二篇:Spring Cloud Gateway初探
SpringCloud系列教程 | 第十二篇:Spring Cloud Gateway初探 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如 ...
- matlab最优控制实验报告_第十二篇 章 用MATLAB解最优控制问题及应用实例 最优控制课件.ppt...
第十二篇 章 用MATLAB解最优控制问题及应用实例 最优控制课件.ppt 综上所述可得结论:Q=diag(1,0,0),R=2时,系统各方面响应较好. 矩阵Q变大时,反馈矩阵变大: 当Q的对角线上第 ...
- CCIE-LAB-第十二篇-EIGRP+EIGRP末节区域+leak map+分发列表
CCIE-LAB-第十二篇-EIGRP+EIGRP末节区域+leak map+分发列表 实际中,思科只会给你5个小时去做下面的全部配置 这个是CCIE-LAB的拓扑图 问题 翻译:1.确保分支3分支4 ...
- CCNA-第十二篇-STP+ACL(下)
CCNA-第十二篇-STP+ACL(下) 首先说说要跳跳了 立个小FLAG, 两个月内急速完成CCIE理论+LAB实操 因为接了个工作,主要我能做到就能做这份工作. 其实NP中间的点很多都会,只是因为 ...
- CCIE理论-第十二篇-IPV6-NDP协议
CCIE理论-第十二篇-IPV6-NDP协议 首先我们知道 在IPV4中 A:0.0.0.1-126.255.255.255 B:128.0.0.1-191.255.255.255 C:192.0.0 ...
- 国外交友网站开发源码 第十二篇
最近由于工作生活的事情比较多,所以就没有更新,这篇是国外交友网站开发源码 第十二篇 希望大家能够喜欢. 私信列表 class WechatController extends SiteControll ...
- 「第十二篇」漏洞扫描
批注[--] 表示他人.自己.网络批注参考资料来源于* 书中批注* CSDN* GitHub* Google* 维基百科* YouTube* MDN Web Docs由于编写过程中无法记录所有的URL ...
- MySQL数据库,从入门到精通:第十二篇——MySQL数据类型详解
MySQL数据库,从入门到精通:第十二篇--MySQL数据类型详解 第 12 章_MySQL数据类型精讲 1. MySQL中的数据类型 2. 整数类型 2. 1 类型介绍 2. 2 可选属性 2. 2 ...
- CCNP-第十四篇-BGP综合实验
CCNP-第十四篇-BGP综合实验 大家好呀,学了那么长时间的BGP,又是一个巨大分水岭,那怎么能没综合实验呢? 答案以及个人录制视屏(数字那个视频因为录制软件的问题看不到命令行可以直接看后面的,不喜 ...
- 搭建大型分布式服务(二十二)SpringBoot 如何优雅地整合多个kafka数据源?
系列文章目录 文章目录 系列文章目录 前言 一.本文要点 二.开发环境 三.创建项目 四.修改项目 五.测试一下 六.小结 前言 在日常开发当中,经常会遇到需要消费的topic不在同一个kafka集群 ...
最新文章
- 将一个字符串计算出CRC16/XMODEM校验码(4位)
- 二十万字C/C++、嵌入式软开面试题全集宝典十一
- 知识工程.Vs.软件构架,框架,设计模式.
- mysql业务 日志_mysql笔记之日志篇
- laravel ajax ip,怎么在Laravel中利用AJAX动态刷新部分页面
- Django的各种初识
- 年轻的工程师如何月入伍万XD
- 记一次,jvm 内存溢出
- 局域网linux唤醒windows,局域网唤醒 (WOL - Wake on LAN) | 远程启动计算机- ManageEngine OpUtils...
- 从命令行参数中得到一个字符串,统计该字符串中字母 a 的出现次数。
- asp.net生成高质量缩略图通用函数
- DOSBOX 0.74模拟器安装Windows 95
- IDEA 社区版下载与安装
- 计算机用户个人设置总是重启,联想电脑总是自动重启怎么回事
- SPSS应用多元逻辑回归解决无序多分类问题
- 企业微信有什么用,介绍企业微信6个强大的功能
- 不谋一时不足以谋一域_不谋万世者不足谋一时,不谋全局者不足谋一域是什么意思...
- 蓝桥杯 试题 算法训练 P0704 回文数和质数
- Ubuntu16.04配置deeplabv3+的pytorch版本
- 【笔记】 C++中 方向键的输入
热门文章
- python多线程执行_一个Python多线程运行实例
- display可以控制标签的显示模式
- Java线程唤醒与阻塞的定义与使用方法
- Docker docker-compose 配置lnmp开发环境
- bzoj3435 [Wc2014]紫荆花之恋
- (转自珊珊博客)甜甜蜜蜜走台湾 Day3
- windows server2003的邮箱服务器安装详细步骤
- java爬虫微信公众号信息_微信公众号爬虫项目(reptile)
- 1081 Rational Sum (20 分) 分数计算+最大公约数
- cors java 安全问题_使用CORS实现JavaWeb跨域请求问题的方法