springboot监控&springboot配置https
一、actuator监控
springboot自带actuator监控,开启配置后,访问相关链接就可以返回服务运行相关信息,使用方法如下: 1、pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
java开发那些事
2、application.yml:
spring:
security:
user:
name: admin
password: admin
management:
# 端点信息接口使用的端口,为了和主系统接口使用的端口进行分离
server:
port: 8090
servlet:
context-path: /sys
# 端点健康情况,默认值"never",设置为"always"可以显示硬盘使用情况和线程情况
endpoint:
health:
show-details: always
# 设置端点暴露的哪些内容,默认["health","info"],设置"*"代表暴露所有可访问的端点
endpoints:
web:
exposure:
include: '*'
完成上述两步,actuator监控就配置好了,然后访问localhost:8090/sys/actuator/beans
,登录的时候用户名密码为yml中配置的,然后就可以看到spring中管理的所有bean了。具体有哪些路径可以访问,可以参考如下的两个文档:
- actuator文档:https://docs.spring.io/spring-boot/docs/2.0.5.RELEASE/reference/htmlsingle/#production-ready
二、springboot-admin(SBA)
上面说到了actuator监控,虽然方便,但是返回的是json,不太友好。springboot-admin就提供了ui界面展示这些信息。用法也很简单,我们需要新建一个springboot-admin-server项目,用来做服务端,其他所有需要被监控的项目去连接这个服务端就可以。
1、springboot-admin-server:
- pom.xml:
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
</dependency>
- application.yml:
server:
port: 666
- 主启动类:
// 开启adminserver
@EnableAdminServer
@SpringBootApplication
public class SpringbootAdminServerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootAdminServerApplication.class, args);
}
}
服务端这样就可以了。
2、springboot-admin-client: admin-client就是需要监控的项目,在需要监控的项目里做如下的改造:
- pom.xml:
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
- appication.yml:
server:
port: 80
spring:
application:
name: util
boot:
admin:
client:
url:
- "http://localhost:666/"
instance:
metadata:
# 客户端端点信息的用户名、密码
user.name: ${spring.security.user.name}
user.password: ${spring.security.user.password}
security:
user:
name: admin
password: admin
management:
# 端点健康情况,默认值"never",设置为"always"可以显示硬盘使用情况和线程情况
endpoint:
health:
show-details: always
# 设置端点暴露的哪些内容,默认["health","info"],设置"*"代表暴露所有可访问的端点
endpoints:
web:
exposure:
include: '*'
这样就配置好了,启动上面的springboot-admin-server,再启动客户端,然后访问:http://localhost:666/
,就可以看到被admin-server监控的应用了。
三、springboot-https
我们自己撸的代码发布到tomcat后,都是用http访问的,如果想用https访问怎么搞?两种办法,一种是在nginx配置证书,然后反向代理我们的项目,这种方式只需申请证书,在nginx中配置,项目不需要做任何修改;另一种是不需要用nginx,在项目中配置证书。下面将的是第二种方式。
1、生成证书: 生产环境,这个证书是在那些认证机构买来的,这里为了节省money,利用jdk的keytools来生成证书(浏览器会提示不安全)。
- cmd进入jdk的bin目录,执行如下命令:
keytool -genkey -alias test -keyalg RSA -keystore ./server.keystore
-alias
是别名,要记住,等下项目的配置文件中要配置;server.keystore
是证书的文件名。
回车后会要求你输入一些信息,如下:
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
[Unknown]: zhusl
您的组织单位名称是什么?
[Unknown]: company
您的组织名称是什么?
[Unknown]: company
您所在的城市或区域名称是什么?
[Unknown]: sz
您所在的省/市/自治区名称是什么?
[Unknown]: sz
该单位的双字母国家/地区代码是什么?
[Unknown]: CN
CN=zhusl, OU=company, O=company, L=sz, ST=sz, C=CN是否正确?
[否]: y
输入 <test> 的密钥口令
(如果和密钥库口令相同, 按回车):
Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore ./server.keystore -destkeystore ./server.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
这里要记住输入的<test>密钥口令
,等下项目配置文件中要配置的。执行完后,会有个warning,直接执行它建议使用的那段命令就好了,然后会重新生成一个server.keystore
证书。执行了那段命令后,会返回如下提示信息:
输入源密钥库口令:
已成功导入别名 test 的条目。
已完成导入命令: 1 个条目成功导入, 0 个条目失败或取消
Warning:
已将 "./server.keystore" 迁移到 Non JKS/JCEKS。将 JKS 密钥库作为 "./server.keystore.old" 进行了备份。
- 这就表示生成证书成功了,就在jdk的bin目录下。找到该证书,复制到项目的resources目录下。
2、配置证书:
- application.yml:
server:
port: 443
ssl:
key-alias: test # 刚才设置的别名
key-store: classpath:server.keystore
enabled: true
key-store-type: PKCS12
key-store-password: 123456 # 刚才设置的密码
- 配置tomcat:
@Configuration
public class TomcatConfig {
/**
* 配置将 80 转到 443 端口
* @return
*/
@Bean
public Connector connector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(80);
connector.setSecure(false);
connector.setRedirectPort(443);
return connector;
}
/**
* 将connector设置到tomcat中
* @param connector
* @return
*/
@Bean
public TomcatServletWebServerFactory tomcatServletWebServerFactory(Connector connector) {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
tomcat.addAdditionalTomcatConnectors(connector);
return tomcat;
}
}
接下来启动项目,访问项目的controller,你就会发现,即使用http访问,也会自动转到https。
https访问
- (1024程序员节快乐)阿里祭出大器,Java代码检查插件
- Java多线程神器:join使用及原理
- SpringCloud配置中心内容加密
- Spring Boot日志集成
- MongoDB系列7:MongoDB存储引擎
- MongoDB系列6:MongoDB索引的介绍
- 文本数据处理的终极指南-[NLP入门]
- 神经网络思想建立LR模型(DL公开课第二周答案)
- 如何用卷积神经网络从歌曲中提取纯人声?这里有教程+代码
- 排序算法对比、总结(Python代码)
- 记一道未能答出的算法面试题
- 关于numpy mean函数的axis参数
- 在Keras+TF环境中,用迁移学习和微调做专属图像识别系统
- Tensorflow的LRN是怎么做的
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- flutter仿微信底部图标渐变功能的实现代码
- Flutter 插件url_launcher简介
- Laravel框架查询构造器 CURD操作示例
- androidx下的fragment的lazy懒加载问题详解
- Thinkphp5框架简单实现钩子(Hook)行为的方法示例
- Android PhoneWindowManager监听屏幕右侧向左滑动实现返回功能
- Laravel框架创建路由的方法详解
- Android 进度条 ProgressBar的实现代码(隐藏、出现、加载进度)
- 解决Laravel blade模板转义html标签的问题
- laravel 配置路由 api和web定义的路由的区别详解
- Flutter 实现网易云音乐字幕的代码
- Yii框架通过请求组件处理get,post请求的方法分析
- PHP实现单文件、多个单文件、多文件上传函数的封装示例
- Android自定义控件单位尺寸实现代码
- Android中socket通信的简单实现