写作时间: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相关推荐

  1. 跟我学SpringCloud | 第十二篇:Spring Cloud Gateway初探

    SpringCloud系列教程 | 第十二篇:Spring Cloud Gateway初探 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如 ...

  2. matlab最优控制实验报告_第十二篇 章 用MATLAB解最优控制问题及应用实例 最优控制课件.ppt...

    第十二篇 章 用MATLAB解最优控制问题及应用实例 最优控制课件.ppt 综上所述可得结论:Q=diag(1,0,0),R=2时,系统各方面响应较好. 矩阵Q变大时,反馈矩阵变大: 当Q的对角线上第 ...

  3. CCIE-LAB-第十二篇-EIGRP+EIGRP末节区域+leak map+分发列表

    CCIE-LAB-第十二篇-EIGRP+EIGRP末节区域+leak map+分发列表 实际中,思科只会给你5个小时去做下面的全部配置 这个是CCIE-LAB的拓扑图 问题 翻译:1.确保分支3分支4 ...

  4. CCNA-第十二篇-STP+ACL(下)

    CCNA-第十二篇-STP+ACL(下) 首先说说要跳跳了 立个小FLAG, 两个月内急速完成CCIE理论+LAB实操 因为接了个工作,主要我能做到就能做这份工作. 其实NP中间的点很多都会,只是因为 ...

  5. 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 ...

  6. 国外交友网站开发源码 第十二篇

    最近由于工作生活的事情比较多,所以就没有更新,这篇是国外交友网站开发源码 第十二篇 希望大家能够喜欢. 私信列表 class WechatController extends SiteControll ...

  7. 「第十二篇」漏洞扫描

    批注[--] 表示他人.自己.网络批注参考资料来源于* 书中批注* CSDN* GitHub* Google* 维基百科* YouTube* MDN Web Docs由于编写过程中无法记录所有的URL ...

  8. MySQL数据库,从入门到精通:第十二篇——MySQL数据类型详解

    MySQL数据库,从入门到精通:第十二篇--MySQL数据类型详解 第 12 章_MySQL数据类型精讲 1. MySQL中的数据类型 2. 整数类型 2. 1 类型介绍 2. 2 可选属性 2. 2 ...

  9. CCNP-第十四篇-BGP综合实验

    CCNP-第十四篇-BGP综合实验 大家好呀,学了那么长时间的BGP,又是一个巨大分水岭,那怎么能没综合实验呢? 答案以及个人录制视屏(数字那个视频因为录制软件的问题看不到命令行可以直接看后面的,不喜 ...

  10. 搭建大型分布式服务(二十二)SpringBoot 如何优雅地整合多个kafka数据源?

    系列文章目录 文章目录 系列文章目录 前言 一.本文要点 二.开发环境 三.创建项目 四.修改项目 五.测试一下 六.小结 前言 在日常开发当中,经常会遇到需要消费的topic不在同一个kafka集群 ...

最新文章

  1. 将一个字符串计算出CRC16/XMODEM校验码(4位)
  2. 二十万字C/C++、嵌入式软开面试题全集宝典十一
  3. 知识工程.Vs.软件构架,框架,设计模式.
  4. mysql业务 日志_mysql笔记之日志篇
  5. laravel ajax ip,怎么在Laravel中利用AJAX动态刷新部分页面
  6. Django的各种初识
  7. 年轻的工程师如何月入伍万XD
  8. 记一次,jvm 内存溢出
  9. 局域网linux唤醒windows,局域网唤醒 (WOL - Wake on LAN) | 远程启动计算机- ManageEngine OpUtils...
  10. 从命令行参数中得到一个字符串,统计该字符串中字母 a 的出现次数。
  11. asp.net生成高质量缩略图通用函数
  12. DOSBOX 0.74模拟器安装Windows 95
  13. IDEA 社区版下载与安装
  14. 计算机用户个人设置总是重启,联想电脑总是自动重启怎么回事
  15. SPSS应用多元逻辑回归解决无序多分类问题
  16. 企业微信有什么用,介绍企业微信6个强大的功能
  17. 不谋一时不足以谋一域_不谋万世者不足谋一时,不谋全局者不足谋一域是什么意思...
  18. 蓝桥杯 试题 算法训练 P0704 回文数和质数
  19. Ubuntu16.04配置deeplabv3+的pytorch版本
  20. 【笔记】 C++中 方向键的输入

热门文章

  1. python多线程执行_一个Python多线程运行实例
  2. display可以控制标签的显示模式
  3. Java线程唤醒与阻塞的定义与使用方法
  4. Docker docker-compose 配置lnmp开发环境
  5. bzoj3435 [Wc2014]紫荆花之恋
  6. (转自珊珊博客)甜甜蜜蜜走台湾 Day3
  7. windows server2003的邮箱服务器安装详细步骤
  8. java爬虫微信公众号信息_微信公众号爬虫项目(reptile)
  9. 1081 Rational Sum (20 分) 分数计算+最大公约数
  10. cors java 安全问题_使用CORS实现JavaWeb跨域请求问题的方法