一、前言
SpringAdminServer是一个比较强大的微服务监控平台,但在搭建的过程中,并不是那么容易,本文记录下本次项目升级的过程和一些注意事项。
Springboot、Springcloud之间并不是随意组合,而是有一定的要求,SpringAdminServer不同版本之间UI也不尽相同。本文主要版本如下:
1、Springboot:2.3.8.RELEASE
2、Springcloud:Hoxton.SR10
3、SpringAdminServer:2.3.1
不同于其他文章,本文总体架构基于Springcloud、Consul、Feign等。
二、基础搭建
2.1、父项目POM
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<spring-cloud.version>Hoxton.SR10</spring-cloud.version>
<spring-boot.version>2.3.8.RELEASE</spring-boot.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.8.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>25.1-jre</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<version>2.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
<version>2.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10.10</version>
</dependency>
</dependencies>
</dependencyManagement>
2.2、SpringAdminServer的POM
<dependencies>
<!--base dependency for all start -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
</dependency>
<!--base dependency for all end -->
<!--jetty begin -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
<!--jetty end -->
<!--consul begin -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-all</artifactId>
</dependency>
<!--consul end -->
<!--stream rabbit begin -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
<!--stream rabbit end -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
<!--feign begin -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--feign end -->
<!-- swagger begin -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<!--actuator begin -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--actuator end -->
<!-- redis support -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- redis end -->
<!--hikaricp start -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
<!--hikaricp end -->
<!--mybatis boot end -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.46</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
</dependencies>
启动类
@SpringBootApplication
@EnableAdminServer
@EnableDiscoveryClient
public class AdminMonitorApplication {
private static final Logger LOGGER = LoggerFactory.getLogger(AdminMonitorApplication.class);
public static void main(String[] args) throws IOException {
SpringApplication.run(AdminMonitorApplication.class, args);
// 设置默认异常处理器
setDefaultException();
}
/**
* @Title: setDefaultException
* @Description: TODO(这里用一句话描述这个方法的作用)
* @author chengcai.shang@cmgplex.com
* @date 2018年5月23日 下午12:31:34
*/
private static void setDefaultException() {
Thread.setDefaultUncaughtExceptionHandler((Thread t, Throwable e) -> LOGGER.error(e.getMessage(), e));
}
}
配置文件
#logging.level.root = debug
spring.redis.host = 192.168.1.97
spring.redis.port = 6379
#spring.redis.cluster.nodes = 192.168.1.233:6379,192.168.1.233:6380
spring.cache.type = redis
#这个是关于mq的配置
spring.rabbitmq.addresses=amqp://192.168.1.97:5672
spring.rabbitmq.password=guest
spring.rabbitmq.username=guest
spring.cloud.stream.default-binder=rabbit
#忽略consul本身
spring.boot.admin.discovery.ignored-services = consul
#management配置
management.endpoints.web.exposure.include = *
management.endpoints.web.path-mapping.health = /ping
management.endpoints.web.base-path = /foo
management.endpoint.health.show-details = always
management.security.enabled=false
#登录
spring.security.user.name=admin
spring.security.user.password = admin
#邮件告警
spring.mail.host = mail.mail.com
spring.mail.port = 25
spring.mail.username = 123@qq.com
spring.mail.password = 123456
spring.boot.admin.notify.mail.from=123@qq.com
spring.boot.admin.notify.mail.to = 123@qq.com
logging.file.name=/opt/logs/${spring.application.name}.log
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} [%t] [%p] [%c] - %m%n
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} [%t] [%p] [%c] - %m%n
#********************************************
#本地服务监听端口
server.port = 15003
#server.servlet.context-path = /monitor
#cpu的核数
server.undertow.io-threads=4
#预估的最佳线程数
server.undertow.worker-threads=400
spring.application.name=admin-monitor
spring.profiles.active=dev
#********************************************
#consul的配置
spring.cloud.consul.enabled=true
spring.cloud.consul.host=192.168.1.97
spring.cloud.consul.port=8500
#********************************************
#注册中心的配置
spring.cloud.consul.discovery.enabled=false
spring.cloud.consul.discovery.prefer-ip-address=true
spring.cloud.consul.discovery.health-check-path=/actuator/health
spring.cloud.consul.discovery.health-check-interval=10s
spring.cloud.consul.discovery.health-check-timeout=1s
spring.cloud.consul.discovery.instance-id=${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
spring.cloud.consul.discovery.tags=management.context-path=/foo,health.path=/ping
#是否把自己向注册中心注册,可以做纯consumer不注册自己
spring.cloud.consul.discovery.register=true
#********************************************
#配置服务的配置
spring.cloud.consul.config.enabled=true
spring.cloud.consul.config.prefix=config
spring.cloud.consul.config.profile-separator=,
spring.cloud.consul.config.default-context=application
spring.cloud.consul.config.watch.enabled=true
spring.cloud.consul.config.watch.delay=1000
spring.cloud.consul.config.watch.wait-time=3
spring.cloud.consul.config.format=properties
spring.cloud.consul.config.data-key=configuration
#禁用熔断器首次调用时强制1秒超时
hystrix.command.default.execution.timeout.enabled=false
##并发执行的最大线程数,默认10
#hystrix.threadpool.default.coreSize=200
##BlockingQueue的最大队列数,默认值-1
#hystrix.threadpool.default.maxQueueSize=1000
##即使maxQueueSize没有达到,达到queueSizeRejectionThreshold该值后,请求也会被拒绝,默认值5
#hystrix.threadpool.default.queueSizeRejectionThreshold=1000
#zuul超时设置(默认10秒)
zuul.host.connect-timeout-millis=10000
zuul.host.socket-timeout-millis=10000
ribbon.ReadTimeout=10000
ribbon.ConnectTimeout=10000
额外的配置
@Configuration
public class SecuritySecureConfig extends WebSecurityConfigurerAdapter {
private final String adminContextPath;
public SecuritySecureConfig(AdminServerProperties adminServerProperties) {
this.adminContextPath = adminServerProperties.getContextPath();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
successHandler.setTargetUrlParameter("redirectTo");
http.authorizeRequests().antMatchers(this.adminContextPath + "/assets/**").permitAll()
.antMatchers(this.adminContextPath + "/login").permitAll().anyRequest().authenticated().and()
.formLogin().loginPage(this.adminContextPath + "/login").successHandler(successHandler).and().logout()
.logoutUrl(this.adminContextPath + "/logout").and().httpBasic().and().csrf().disable().headers()
.frameOptions().disable();
// @formatter:on
}
}
2.3、被监控端
POM
<dependencies>
<!--base dependency for all start -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
</dependency>
<!--base dependency for all end -->
<!--jetty begin -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
<!--jetty end -->
<!--consul begin -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-all</artifactId>
</dependency>
<!--consul end -->
<!--stream rabbit begin -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
<!--stream rabbit end -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
<!--feign begin -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--feign end -->
<!-- swagger begin -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<!--actuator begin -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--actuator end -->
<!-- redis support -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- redis end -->
<!--hikaricp start -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
<!--hikaricp end -->
<!--mysql start -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--mysql end -->
<!--mybatis boot start -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.scc</groupId>
<artifactId>mybatis-redis</artifactId>
<version>0.0.4-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<!--mybatis boot end -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.46</version>
</dependency>
<!-- 监控 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.3.1</version>
</dependency>
</dependencies>
配置文件
#the following is for cloud
spring.datasource.hikari.idle-timeout = 600000
spring.datasource.hikari.connection-timeout = 30000
spring.datasource.hikari.max-lifetime = 1800000
spring.datasource.hikari.maximum-pool-size = 20
spring.datasource.type = com.zaxxer.hikari.HikariDataSource
#mybatis的配置
mybatis.type-aliases-package = com.aa.hr
#logging.level.root = debug
spring.redis.host = 192.168.1.97
spring.redis.port = 6379
#spring.redis.cluster.nodes = 192.168.1.233:6379,192.168.1.233:6380
spring.cache.type = redis
#feign.httpclient.enabled = true
#feign.httpclient.max-connections=200
#feign.httpclient.max-connections-per-route=50
#feign.hystrix.enabled=true
#处理连接池超时问题
spring.datasource.hikari.connection-test-query = select 1
#baseRpc远程连接地址
hr-baseapi-system.ribbon.listOfServers=127.0.0.1:14001
hr-baseapi-oa.ribbon.listOfServers=127.0.0.1:14002
hr-baseapi-smartjob.ribbon.listOfServers=127.0.0.1:14003
hr-baseapi-smartlearning.ribbon.listOfServers=127.0.0.1:14004
hr-baseapi-smartsalary.ribbon.listOfServers=127.0.0.1:14005
hr-msg-worker.ribbon.listOfServers=127.0.0.1:14006
#这个是关于mq的配置
spring.rabbitmq.addresses=amqp://192.168.1.97:5672
spring.rabbitmq.password=guest
spring.rabbitmq.username=guest
spring.cloud.stream.default-binder=rabbit
spring.boot.admin.client.url=http://localhost:15003
spring.boot.admin.client.instance.prefer-ip=true
spring.boot.admin.client.username=admin
spring.boot.admin.client.password=admin
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
logging.file.name=/opt/logs/${spring.application.name}.log
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} [%t] [%p] [%c] - %m%n
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} [%t] [%p] [%c] - %m%n
spring.boot.admin.client.instance.service-base-url=http://${spring.cloud.client.ip-address}:${server.port}
#********************************************
#本地服务监听端口
server.port = 14002
#cpu的核数
server.undertow.io-threads=4
#预估的最佳线程数
server.undertow.worker-threads=400
spring.application.name=baseapi-oa
spring.profiles.active=dev
#********************************************
#consul的配置
spring.cloud.consul.enabled=false
spring.cloud.consul.host=192.168.1.97
spring.cloud.consul.port=8500
#********************************************
#注册中心的配置
spring.cloud.consul.discovery.enabled=false
spring.cloud.consul.discovery.prefer-ip-address=true
spring.cloud.consul.discovery.health-check-path=/actuator/health
spring.cloud.consul.discovery.health-check-interval=10s
spring.cloud.consul.discovery.health-check-timeout=1s
spring.cloud.consul.discovery.instance-id=${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
#是否把自己向注册中心注册,可以做纯consumer不注册自己
spring.cloud.consul.discovery.register=true
#********************************************
#配置服务的配置
spring.cloud.consul.config.enabled=true
spring.cloud.consul.config.prefix=config
spring.cloud.consul.config.profile-separator=,
spring.cloud.consul.config.default-context=application
spring.cloud.consul.config.watch.enabled=true
spring.cloud.consul.config.watch.delay=1000
spring.cloud.consul.config.watch.wait-time=3
spring.cloud.consul.config.format=properties
spring.cloud.consul.config.data-key=configuration
#禁用熔断器首次调用时强制1秒超时
hystrix.command.default.execution.timeout.enabled=false
##并发执行的最大线程数,默认10
#hystrix.threadpool.default.coreSize=200
##BlockingQueue的最大队列数,默认值-1
#hystrix.threadpool.default.maxQueueSize=1000
##即使maxQueueSize没有达到,达到queueSizeRejectionThreshold该值后,请求也会被拒绝,默认值5
#hystrix.threadpool.default.queueSizeRejectionThreshold=1000
#zuul超时设置(默认10秒)
zuul.host.connect-timeout-millis=10000
zuul.host.socket-timeout-millis=10000
ribbon.ReadTimeout=10000
ribbon.ConnectTimeout=10000
一、前言
SpringAdminServer是一个比较强大的微服务监控平台,但在搭建的过程中,并不是那么容易,本文记录下本次项目升级的过程和一些注意事项。
Springboot、Springcloud之间并不是随意组合,而是有一定的要求,SpringAdminServer不同版本之间UI也不尽相同。本文主要版本如下:
1、Springboot:2.3.8.RELEASE
2、Springcloud:Hoxton.SR10
3、SpringAdminServer:2.3.1
不同于其他文章,本文总体架构基于Springcloud、Consul、Feign等。
二、基础搭建
2.1、父项目POM
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<spring-cloud.version>Hoxton.SR10</spring-cloud.version>
<spring-boot.version>2.3.8.RELEASE</spring-boot.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.8.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>25.1-jre</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<version>2.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
<version>2.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10.10</version>
</dependency>
</dependencies>
</dependencyManagement>
2.2、SpringAdminServer的POM
<dependencies>
<!--base dependency for all start -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
</dependency>
<!--base dependency for all end -->
<!--jetty begin -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
<!--jetty end -->
<!--consul begin -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-all</artifactId>
</dependency>
<!--consul end -->
<!--stream rabbit begin -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
<!--stream rabbit end -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
<!--feign begin -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--feign end -->
<!-- swagger begin -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<!--actuator begin -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--actuator end -->
<!-- redis support -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- redis end -->
<!--hikaricp start -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
<!--hikaricp end -->
<!--mybatis boot end -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.46</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
</dependencies>
启动类
@SpringBootApplication
@EnableAdminServer
@EnableDiscoveryClient
public class AdminMonitorApplication {
private static final Logger LOGGER = LoggerFactory.getLogger(AdminMonitorApplication.class);
public static void main(String[] args) throws IOException {
SpringApplication.run(AdminMonitorApplication.class, args);
// 设置默认异常处理器
setDefaultException();
}
/**
* @Title: setDefaultException
* @Description: TODO(这里用一句话描述这个方法的作用)
* @author chengcai.shang@cmgplex.com
* @date 2018年5月23日 下午12:31:34
*/
private static void setDefaultException() {
Thread.setDefaultUncaughtExceptionHandler((Thread t, Throwable e) -> LOGGER.error(e.getMessage(), e));
}
}
配置文件
#logging.level.root = debug
spring.redis.host = 192.168.1.97
spring.redis.port = 6379
#spring.redis.cluster.nodes = 192.168.1.233:6379,192.168.1.233:6380
spring.cache.type = redis
#这个是关于mq的配置
spring.rabbitmq.addresses=amqp://192.168.1.97:5672
spring.rabbitmq.password=guest
spring.rabbitmq.username=guest
spring.cloud.stream.default-binder=rabbit
#忽略consul本身
spring.boot.admin.discovery.ignored-services = consul
#management配置
management.endpoints.web.exposure.include = *
management.endpoints.web.path-mapping.health = /ping
management.endpoints.web.base-path = /foo
management.endpoint.health.show-details = always
management.security.enabled=false
#登录
spring.security.user.name=admin
spring.security.user.password = admin
#邮件告警
spring.mail.host = mail.mail.com
spring.mail.port = 25
spring.mail.username = 123@qq.com
spring.mail.password = 123456
spring.boot.admin.notify.mail.from=123@qq.com
spring.boot.admin.notify.mail.to = 123@qq.com
logging.file.name=/opt/logs/${spring.application.name}.log
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} [%t] [%p] [%c] - %m%n
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} [%t] [%p] [%c] - %m%n
#********************************************
#本地服务监听端口
server.port = 15003
#server.servlet.context-path = /monitor
#cpu的核数
server.undertow.io-threads=4
#预估的最佳线程数
server.undertow.worker-threads=400
spring.application.name=admin-monitor
spring.profiles.active=dev
#********************************************
#consul的配置
spring.cloud.consul.enabled=true
spring.cloud.consul.host=192.168.1.97
spring.cloud.consul.port=8500
#********************************************
#注册中心的配置
spring.cloud.consul.discovery.enabled=false
spring.cloud.consul.discovery.prefer-ip-address=true
spring.cloud.consul.discovery.health-check-path=/actuator/health
spring.cloud.consul.discovery.health-check-interval=10s
spring.cloud.consul.discovery.health-check-timeout=1s
spring.cloud.consul.discovery.instance-id=${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
spring.cloud.consul.discovery.tags=management.context-path=/foo,health.path=/ping
#是否把自己向注册中心注册,可以做纯consumer不注册自己
spring.cloud.consul.discovery.register=true
#********************************************
#配置服务的配置
spring.cloud.consul.config.enabled=true
spring.cloud.consul.config.prefix=config
spring.cloud.consul.config.profile-separator=,
spring.cloud.consul.config.default-context=application
spring.cloud.consul.config.watch.enabled=true
spring.cloud.consul.config.watch.delay=1000
spring.cloud.consul.config.watch.wait-time=3
spring.cloud.consul.config.format=properties
spring.cloud.consul.config.data-key=configuration
#禁用熔断器首次调用时强制1秒超时
hystrix.command.default.execution.timeout.enabled=false
##并发执行的最大线程数,默认10
#hystrix.threadpool.default.coreSize=200
##BlockingQueue的最大队列数,默认值-1
#hystrix.threadpool.default.maxQueueSize=1000
##即使maxQueueSize没有达到,达到queueSizeRejectionThreshold该值后,请求也会被拒绝,默认值5
#hystrix.threadpool.default.queueSizeRejectionThreshold=1000
#zuul超时设置(默认10秒)
zuul.host.connect-timeout-millis=10000
zuul.host.socket-timeout-millis=10000
ribbon.ReadTimeout=10000
ribbon.ConnectTimeout=10000
额外的配置
@Configuration
public class SecuritySecureConfig extends WebSecurityConfigurerAdapter {
private final String adminContextPath;
public SecuritySecureConfig(AdminServerProperties adminServerProperties) {
this.adminContextPath = adminServerProperties.getContextPath();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
successHandler.setTargetUrlParameter("redirectTo");
http.authorizeRequests().antMatchers(this.adminContextPath + "/assets/**").permitAll()
.antMatchers(this.adminContextPath + "/login").permitAll().anyRequest().authenticated().and()
.formLogin().loginPage(this.adminContextPath + "/login").successHandler(successHandler).and().logout()
.logoutUrl(this.adminContextPath + "/logout").and().httpBasic().and().csrf().disable().headers()
.frameOptions().disable();
// @formatter:on
}
}
2.3、被监控端
POM
<dependencies>
<!--base dependency for all start -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
</dependency>
<!--base dependency for all end -->
<!--jetty begin -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
<!--jetty end -->
<!--consul begin -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-all</artifactId>
</dependency>
<!--consul end -->
<!--stream rabbit begin -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
<!--stream rabbit end -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
<!--feign begin -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--feign end -->
<!-- swagger begin -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<!--actuator begin -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--actuator end -->
<!-- redis support -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- redis end -->
<!--hikaricp start -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
<!--hikaricp end -->
<!--mysql start -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--mysql end -->
<!--mybatis boot start -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.scc</groupId>
<artifactId>mybatis-redis</artifactId>
<version>0.0.4-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<!--mybatis boot end -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.46</version>
</dependency>
<!-- 监控 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.3.1</version>
</dependency>
</dependencies>
配置文件
#the following is for cloud
spring.datasource.hikari.idle-timeout = 600000
spring.datasource.hikari.connection-timeout = 30000
spring.datasource.hikari.max-lifetime = 1800000
spring.datasource.hikari.maximum-pool-size = 20
spring.datasource.type = com.zaxxer.hikari.HikariDataSource
#mybatis的配置
mybatis.type-aliases-package = com.aa.hr
#logging.level.root = debug
spring.redis.host = 192.168.1.97
spring.redis.port = 6379
#spring.redis.cluster.nodes = 192.168.1.233:6379,192.168.1.233:6380
spring.cache.type = redis
#feign.httpclient.enabled = true
#feign.httpclient.max-connections=200
#feign.httpclient.max-connections-per-route=50
#feign.hystrix.enabled=true
#处理连接池超时问题
spring.datasource.hikari.connection-test-query = select 1
#baseRpc远程连接地址
hr-baseapi-system.ribbon.listOfServers=127.0.0.1:14001
hr-baseapi-oa.ribbon.listOfServers=127.0.0.1:14002
hr-baseapi-smartjob.ribbon.listOfServers=127.0.0.1:14003
hr-baseapi-smartlearning.ribbon.listOfServers=127.0.0.1:14004
hr-baseapi-smartsalary.ribbon.listOfServers=127.0.0.1:14005
hr-msg-worker.ribbon.listOfServers=127.0.0.1:14006
#这个是关于mq的配置
spring.rabbitmq.addresses=amqp://192.168.1.97:5672
spring.rabbitmq.password=guest
spring.rabbitmq.username=guest
spring.cloud.stream.default-binder=rabbit
spring.boot.admin.client.url=http://localhost:15003
spring.boot.admin.client.instance.prefer-ip=true
spring.boot.admin.client.username=admin
spring.boot.admin.client.password=admin
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
logging.file.name=/opt/logs/${spring.application.name}.log
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} [%t] [%p] [%c] - %m%n
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} [%t] [%p] [%c] - %m%n
spring.boot.admin.client.instance.service-base-url=http://${spring.cloud.client.ip-address}:${server.port}
#********************************************
#本地服务监听端口
server.port = 14002
#cpu的核数
server.undertow.io-threads=4
#预估的最佳线程数
server.undertow.worker-threads=400
spring.application.name=baseapi-oa
spring.profiles.active=dev
#********************************************
#consul的配置
spring.cloud.consul.enabled=false
spring.cloud.consul.host=192.168.1.97
spring.cloud.consul.port=8500
#********************************************
#注册中心的配置
spring.cloud.consul.discovery.enabled=false
spring.cloud.consul.discovery.prefer-ip-address=true
spring.cloud.consul.discovery.health-check-path=/actuator/health
spring.cloud.consul.discovery.health-check-interval=10s
spring.cloud.consul.discovery.health-check-timeout=1s
spring.cloud.consul.discovery.instance-id=${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
#是否把自己向注册中心注册,可以做纯consumer不注册自己
spring.cloud.consul.discovery.register=true
#********************************************
#配置服务的配置
spring.cloud.consul.config.enabled=true
spring.cloud.consul.config.prefix=config
spring.cloud.consul.config.profile-separator=,
spring.cloud.consul.config.default-context=application
spring.cloud.consul.config.watch.enabled=true
spring.cloud.consul.config.watch.delay=1000
spring.cloud.consul.config.watch.wait-time=3
spring.cloud.consul.config.format=properties
spring.cloud.consul.config.data-key=configuration
#禁用熔断器首次调用时强制1秒超时
hystrix.command.default.execution.timeout.enabled=false
##并发执行的最大线程数,默认10
#hystrix.threadpool.default.coreSize=200
##BlockingQueue的最大队列数,默认值-1
#hystrix.threadpool.default.maxQueueSize=1000
##即使maxQueueSize没有达到,达到queueSizeRejectionThreshold该值后,请求也会被拒绝,默认值5
#hystrix.threadpool.default.queueSizeRejectionThreshold=1000
#zuul超时设置(默认10秒)
zuul.host.connect-timeout-millis=10000
zuul.host.socket-timeout-millis=10000
ribbon.ReadTimeout=10000
ribbon.ConnectTimeout=10000