Spring Boot Admin
https://github.com/codecentric/spring-boot-admin
http://docs.spring-boot-admin.com/current/
简介
Spring Boot 有一个非常好用的监控和管理的源软件,这个软件就是 Spring Boot Admin。该软件能够将 Actuator 中的信息进行界面化的展示,也可以监控所有 Spring Boot 应用的健康状况,提供实时警报功能。
主要的功能点有:
显示应用程序的监控状态
应用程序上下线监控
查看 JVM,线程信息
可视化的查看日志以及下载日志文件
动态切换日志级别
Http 请求信息跟踪
其他功能点……
springboot2集成Spring Boot Admin实例
环境要求 jdk1.8 + springboot 2.3
1、原生springboot集成
springboot2-admin 配置
步骤1:创建maven项目
步骤2:配置pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springboot2-parent</artifactId>
<groupId>cn.guangjun.spring.boot2</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>springboot2-admin</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<admin.starter.server.version>2.3.1</admin.starter.server.version>
<spring.boot.admin.client.version>2.3.1</spring.boot.admin.client.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.14</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>${spring.boot.admin.client.version}</version>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>${admin.starter.server.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
步骤3:配置application.yaml
server:
port: 9000
spring:
application:
name: admin-server
security:
user:
name: admin
password: admin
roles: admin
boot: #admin-client 配置
admin:
client:
url: http://admin:admin@127.0.0.1:9000
enabled: true
instance:
prefer-ip: true # 使用ip注册进来
management: #admin-server配置
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: ALWAYS
步骤4:代码
@Configuration
public class SecurityPermitAllConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().permitAll()
.and().csrf().disable();
}
}
@EnableAdminServer
@SpringBootApplication
public class Springboot2AdminServerApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot2AdminServerApplication.class,args);
}
}
步骤5:配置日志
logback-spring.xml
<configuration scan="true" scanPeriod="10 seconds">
<property name="CONTEXT_NAME" value="client1" />
<property name="LOG_PATH" value="logs" />
<property name="MAX_FILE_SIZE" value="100MB" />
<property name="MAX_HISTORY" value="30" />
<!--读取配置中心的属性 -->
<!-- <springProperty scope="context" name="LOG_PATH_NAME" source="logging.file.name"/> -->
<contextName>${CONTEXT_NAME}</contextName>
<!--输出到控制台 -->
<!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,%-5level:级别从左显示5个字符宽度,%logger{50}:表示logger名字最长50个字符,否则按照句点分割,%msg:日志消息,%i索引【从数字0开始递增】 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!-- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">-->
<!-- <level>DEBUG</level>-->
<!-- </filter>-->
<encoder>
<!--在控制台使用caller方式打印堆栈信息有超链接,使用replace去掉换行符-->
<Pattern>%black(控制台-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{10}) - %cyan(%msg%n)</Pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!--所有日志输出到文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--日志名,指定最新的文件名,其他文件名使用FileNamePattern -->
<File>${LOG_PATH}/${CONTEXT_NAME}.log</File>
<!--日志文件输出格式 -->
<encoder>
<!--%logger{50}:表示logger名字最长50个字符,否则按照句点分割。
%M:输出执行日志请求的方法名。尽量避免使用,除非执行速度不造成任何问题。
%line:输出执行日志请求的行号。尽量避免使用,除非执行速度不造成任何问题。 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{50}.%M\(%line\) -- %msg%n</pattern>
<charset>UTF-8</charset> <!-- 设置字符集 -->
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志归档 后面可以加.zip -->
<fileNamePattern>${LOG_PATH}/${CONTEXT_NAME}-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
<!--日志文件保留天数 -->
<maxHistory>${MAX_HISTORY}</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!--文件达到 最大时会被压缩和切割 -->
<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<!-- ERROR 日志 -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--日志名,指定最新的文件名,其他文件名使用FileNamePattern -->
<File>${LOG_PATH}/${CONTEXT_NAME}-error.log</File>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{50}.%M\(%line\) -- %msg%n</pattern>
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${CONTEXT_NAME}_error-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>${MAX_HISTORY}</maxHistory>
</rollingPolicy>
<!-- 此日志文件只记录ERROR级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 指定级别 -->
<level>ERROR</level>
<!-- onMatch:意思是>=指定级别 接受 -->
<onMatch>ACCEPT</onMatch>
<!-- onMismatch:意思是<指定级别 拒绝 -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<springProfile name="dev">
<root level="DEBUG">
<appender-ref ref="CONSOLE" />
</root>
</springProfile>
<root level="DEBUG">
<appender-ref ref="CONSOLE" />
</root>
<!-- <springProfile name="prod">
<root level="INFO">
<appender-ref ref="FILE" />
<appender-ref ref="ERROR_FILE" />
</root>
</springProfile>-->
</configuration>
步骤6:启动服务
步骤7:访问服务
http://127.0.0.1:9000/
springboot2-admin-order 配置
步骤1:创建maven项目
步骤2:pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springboot2-parent</artifactId>
<groupId>cn.guangjun.spring.boot2</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>springboot2-admin-order</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<admin.starter.server.version>2.3.1</admin.starter.server.version>
<spring.boot.admin.client.version>2.3.1</spring.boot.admin.client.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-security</artifactId>-->
<!-- </dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.14</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>${spring.boot.admin.client.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
步骤3:application.yaml
server:
servlet:
context-path: /
port: 8100
spring:
application:
## 注册服务名
name: admin-server-order
## spring boot admin
boot:
admin:
client:
url: http://admin:admin@127.0.0.1:9000
enabled: true
instance:
prefer-ip: true # 使用ip注册进来
# endpoints config
management:
endpoint:
health:
show-details: always
endpoints:
enabled-by-default: true
web:
base-path: /actuator
exposure:
include: '*'
步骤4:配置日志
logback-spring.xml
<configuration scan="true" scanPeriod="10 seconds">
<property name="CONTEXT_NAME" value="client1" />
<property name="LOG_PATH" value="logs" />
<property name="MAX_FILE_SIZE" value="100MB" />
<property name="MAX_HISTORY" value="30" />
<!--读取配置中心的属性 -->
<!-- <springProperty scope="context" name="LOG_PATH_NAME" source="logging.file.name"/> -->
<contextName>${CONTEXT_NAME}</contextName>
<!--输出到控制台 -->
<!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,%-5level:级别从左显示5个字符宽度,%logger{50}:表示logger名字最长50个字符,否则按照句点分割,%msg:日志消息,%i索引【从数字0开始递增】 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!-- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">-->
<!-- <level>DEBUG</level>-->
<!-- </filter>-->
<encoder>
<!--在控制台使用caller方式打印堆栈信息有超链接,使用replace去掉换行符-->
<Pattern>%black(控制台-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{10}) - %cyan(%msg%n)</Pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!--所有日志输出到文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--日志名,指定最新的文件名,其他文件名使用FileNamePattern -->
<File>${LOG_PATH}/${CONTEXT_NAME}.log</File>
<!--日志文件输出格式 -->
<encoder>
<!--%logger{50}:表示logger名字最长50个字符,否则按照句点分割。
%M:输出执行日志请求的方法名。尽量避免使用,除非执行速度不造成任何问题。
%line:输出执行日志请求的行号。尽量避免使用,除非执行速度不造成任何问题。 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{50}.%M\(%line\) -- %msg%n</pattern>
<charset>UTF-8</charset> <!-- 设置字符集 -->
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志归档 后面可以加.zip -->
<fileNamePattern>${LOG_PATH}/${CONTEXT_NAME}-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
<!--日志文件保留天数 -->
<maxHistory>${MAX_HISTORY}</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!--文件达到 最大时会被压缩和切割 -->
<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<!-- ERROR 日志 -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--日志名,指定最新的文件名,其他文件名使用FileNamePattern -->
<File>${LOG_PATH}/${CONTEXT_NAME}-error.log</File>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{50}.%M\(%line\) -- %msg%n</pattern>
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${CONTEXT_NAME}_error-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>${MAX_HISTORY}</maxHistory>
</rollingPolicy>
<!-- 此日志文件只记录ERROR级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 指定级别 -->
<level>ERROR</level>
<!-- onMatch:意思是>=指定级别 接受 -->
<onMatch>ACCEPT</onMatch>
<!-- onMismatch:意思是<指定级别 拒绝 -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<springProfile name="dev">
<root level="DEBUG">
<appender-ref ref="CONSOLE" />
</root>
</springProfile>
<root level="DEBUG">
<appender-ref ref="CONSOLE" />
</root>
<!-- <springProfile name="prod">
<root level="INFO">
<appender-ref ref="FILE" />
<appender-ref ref="ERROR_FILE" />
</root>
</springProfile>-->
</configuration>
步骤5:源代码
@SpringBootApplication
public class Springboot2AdminServerOrderApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot2AdminServerOrderApplication.class,args);
}
}
步骤6:启动
步骤7:查看admin-server
http://127.0.0.1:9000/wallboard
2、springboot2 eureka 集成 spring boot admin
springboot2-eureka集群配置
步骤1:创建maven服务
创建springboot2-eureka9001,springboot2-eureka9002
步骤2:配置pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springboot2-parent</artifactId>
<groupId>cn.guangjun.spring.boot2</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>springboot2-eureka</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
步骤3:配置application.yaml
springboot2-eureka9001
server:
port: 9001
spring:
application:
name: eurka-server
security:
user:
name: admin
password: 123456
eureka:
instance:
hostname: eurka9001 #eureka服务端的实例名称
client:
#false表示不向注册中心注册自己
registerWithEureka: true
#false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
fetchRegistry: false
serviceUrl:
#设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址
defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@127.0.0.1:9001/eureka/, http://${spring.security.user.name}:${spring.security.user.password}@127.0.0.1:9002/eureka/
springboot2-eureka9002
server:
port: 9002
spring:
application:
name: eurka-server
security:
user:
name: admin
password: 123456
eureka:
instance:
hostname: eurka9002 #eureka服务端的实例名称
client:
#false表示不向注册中心注册自己
registerWithEureka: true
#false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
fetchRegistry: false
serviceUrl:
#设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址
defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@127.0.0.1:9001/eureka/, http://${spring.security.user.name}:${spring.security.user.password}@127.0.0.1:9002/eureka/
步骤4: 修改hosts
192.168.137.1 eurka9002 eurka9001
步骤 5:源代码
@EnableEurekaServer
@SpringBootApplication
public class SpringBoot2EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBoot2EurekaApplication.class, args);
}
@EnableWebSecurity
public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
super.configure(http);
}
}
}
步骤6:启动
步骤7:查看eureka界面
http://127.0.0.1:9001 admin/123456
springboot2-admin-eureka-server配置
步骤1:创建maven项目
步骤2:pom.xml 配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springboot2-parent</artifactId>
<groupId>cn.guangjun.spring.boot2</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>springboot2-admin-eureka-server</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</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-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.14</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
步骤3:applicaiton.yaml
server:
port: 8001
spring:
application:
## 注册服务名
name: admin-eureka-server
security:
user:
name: admin
password: 123456
## spring boot admin
# boot:
# admin:
# client:
# url: http://admin:123456@127.0.0.1:8001
# enabled: true
# instance:
# prefer-ip: true # 使用ip注册进来
# endpoints config
management:
endpoint:
health:
show-details: always
endpoints:
enabled-by-default: true
web:
base-path: /actuator
exposure:
include: '*'
eureka:
instance:
leaseRenewalIntervalInSeconds: 10
health-check-url-path: /actuator/health
metadata-map:
startup: ${random.int} #needed to trigger info and endpoint update after restart
metadata-map:
user.name: "admin" #These two are needed so that the server
user.password: "123456" #can access the protected client endpoints
client:
registryFetchIntervalSeconds: 5
serviceUrl:
defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@127.0.0.1:9001/eureka/, http://${spring.security.user.name}:${spring.security.user.password}@127.0.0.1:9002/eureka/
步骤4:源代码
package cn.guangjun.spring.boot2.admin.eureka.server.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
/**
* @BeongsPackage:cn.guangjun.spring.boot2.admin.config
* @Author guangjunhu
* @Date: 2023年05月05日 14:41:10
* @Descripton:
* @Version:
**/
@Configuration
public class SecurityPermitAllConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().permitAll()
.and().csrf().disable();
}
}
package cn.guangjun.spring.boot2.admin.eureka.server;
import com.sun.glass.ui.Application;
import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @BeongsPackage:cn.guangjun.spring.boot2.admin.eureka.server
* @Author guangjunhu
* @Date: 2023年05月05日 17:40:31
* @Descripton:
* @Version:
**/
@EnableDiscoveryClient
@EnableAdminServer
@SpringBootApplication
public class Springboot2AdminEurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot2AdminEurekaServerApplication.class,args);
}
}
步骤5:日志logback-spring配置
<configuration scan="true" scanPeriod="10 seconds">
<property name="CONTEXT_NAME" value="client1" />
<property name="LOG_PATH" value="logs" />
<property name="MAX_FILE_SIZE" value="100MB" />
<property name="MAX_HISTORY" value="30" />
<!--读取配置中心的属性 -->
<!-- <springProperty scope="context" name="LOG_PATH_NAME" source="logging.file.name"/> -->
<contextName>${CONTEXT_NAME}</contextName>
<!--输出到控制台 -->
<!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,%-5level:级别从左显示5个字符宽度,%logger{50}:表示logger名字最长50个字符,否则按照句点分割,%msg:日志消息,%i索引【从数字0开始递增】 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!-- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">-->
<!-- <level>DEBUG</level>-->
<!-- </filter>-->
<encoder>
<!--在控制台使用caller方式打印堆栈信息有超链接,使用replace去掉换行符-->
<Pattern>%black(控制台-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{10}) - %cyan(%msg%n)</Pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!--所有日志输出到文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--日志名,指定最新的文件名,其他文件名使用FileNamePattern -->
<File>${LOG_PATH}/${CONTEXT_NAME}.log</File>
<!--日志文件输出格式 -->
<encoder>
<!--%logger{50}:表示logger名字最长50个字符,否则按照句点分割。
%M:输出执行日志请求的方法名。尽量避免使用,除非执行速度不造成任何问题。
%line:输出执行日志请求的行号。尽量避免使用,除非执行速度不造成任何问题。 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{50}.%M\(%line\) -- %msg%n</pattern>
<charset>UTF-8</charset> <!-- 设置字符集 -->
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志归档 后面可以加.zip -->
<fileNamePattern>${LOG_PATH}/${CONTEXT_NAME}-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
<!--日志文件保留天数 -->
<maxHistory>${MAX_HISTORY}</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!--文件达到 最大时会被压缩和切割 -->
<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<!-- ERROR 日志 -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--日志名,指定最新的文件名,其他文件名使用FileNamePattern -->
<File>${LOG_PATH}/${CONTEXT_NAME}-error.log</File>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{50}.%M\(%line\) -- %msg%n</pattern>
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${CONTEXT_NAME}_error-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>${MAX_HISTORY}</maxHistory>
</rollingPolicy>
<!-- 此日志文件只记录ERROR级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 指定级别 -->
<level>ERROR</level>
<!-- onMatch:意思是>=指定级别 接受 -->
<onMatch>ACCEPT</onMatch>
<!-- onMismatch:意思是<指定级别 拒绝 -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<springProfile name="dev">
<root level="DEBUG">
<appender-ref ref="CONSOLE" />
</root>
</springProfile>
<root level="DEBUG">
<appender-ref ref="CONSOLE" />
</root>
<!-- <springProfile name="prod">
<root level="INFO">
<appender-ref ref="FILE" />
<appender-ref ref="ERROR_FILE" />
</root>
</springProfile>-->
</configuration>
步骤6:运行
springboot2-admin-eureka-client配置
步骤1:创建maven服务
步骤2:pom.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springboot2-parent</artifactId>
<groupId>cn.guangjun.spring.boot2</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>springboot2-admin-eureka-client</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
步骤3:application.yaml配置
server:
port: 8002
spring:
application:
## 注册服务名
name: admin-eureka-client-order
## spring boot admin
security:
user:
name: admin
password: 123456
management:
endpoint:
health:
show-details: always
endpoints:
enabled-by-default: true
web:
base-path: /actuator
exposure:
include: '*'
eureka:
instance:
leaseRenewalIntervalInSeconds: 10
health-check-url-path: /actuator/health
metadata-map:
startup: ${random.int} #needed to trigger info and endpoint update after restart
metadata-map:
user.name: "admin" #These two are needed so that the server
user.password: "123456" #can access the protected client endpoints
client:
registryFetchIntervalSeconds: 5
serviceUrl:
defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@127.0.0.1:9001/eureka/, http://${spring.security.user.name}:${spring.security.user.password}@127.0.0.1:9002/eureka/
步骤4:日志配置
logback-spring.xml
<configuration scan="true" scanPeriod="10 seconds">
<property name="CONTEXT_NAME" value="client1" />
<property name="LOG_PATH" value="logs" />
<property name="MAX_FILE_SIZE" value="100MB" />
<property name="MAX_HISTORY" value="30" />
<!--读取配置中心的属性 -->
<!-- <springProperty scope="context" name="LOG_PATH_NAME" source="logging.file.name"/> -->
<contextName>${CONTEXT_NAME}</contextName>
<!--输出到控制台 -->
<!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,%-5level:级别从左显示5个字符宽度,%logger{50}:表示logger名字最长50个字符,否则按照句点分割,%msg:日志消息,%i索引【从数字0开始递增】 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!-- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">-->
<!-- <level>DEBUG</level>-->
<!-- </filter>-->
<encoder>
<!--在控制台使用caller方式打印堆栈信息有超链接,使用replace去掉换行符-->
<Pattern>%black(控制台-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{10}) - %cyan(%msg%n)</Pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!--所有日志输出到文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--日志名,指定最新的文件名,其他文件名使用FileNamePattern -->
<File>${LOG_PATH}/${CONTEXT_NAME}.log</File>
<!--日志文件输出格式 -->
<encoder>
<!--%logger{50}:表示logger名字最长50个字符,否则按照句点分割。
%M:输出执行日志请求的方法名。尽量避免使用,除非执行速度不造成任何问题。
%line:输出执行日志请求的行号。尽量避免使用,除非执行速度不造成任何问题。 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{50}.%M\(%line\) -- %msg%n</pattern>
<charset>UTF-8</charset> <!-- 设置字符集 -->
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志归档 后面可以加.zip -->
<fileNamePattern>${LOG_PATH}/${CONTEXT_NAME}-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
<!--日志文件保留天数 -->
<maxHistory>${MAX_HISTORY}</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!--文件达到 最大时会被压缩和切割 -->
<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<!-- ERROR 日志 -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--日志名,指定最新的文件名,其他文件名使用FileNamePattern -->
<File>${LOG_PATH}/${CONTEXT_NAME}-error.log</File>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{50}.%M\(%line\) -- %msg%n</pattern>
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${CONTEXT_NAME}_error-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>${MAX_HISTORY}</maxHistory>
</rollingPolicy>
<!-- 此日志文件只记录ERROR级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 指定级别 -->
<level>ERROR</level>
<!-- onMatch:意思是>=指定级别 接受 -->
<onMatch>ACCEPT</onMatch>
<!-- onMismatch:意思是<指定级别 拒绝 -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<springProfile name="dev">
<root level="DEBUG">
<appender-ref ref="CONSOLE" />
</root>
</springProfile>
<root level="DEBUG">
<appender-ref ref="CONSOLE" />
</root>
<!-- <springProfile name="prod">
<root level="INFO">
<appender-ref ref="FILE" />
<appender-ref ref="ERROR_FILE" />
</root>
</springProfile>-->
</configuration>
步骤5:源代码
package cn.guangjun.spring.boot2.admin.eureka.client.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
/**
* @BeongsPackage:cn.guangjun.spring.boot2.admin.config
* @Author guangjunhu
* @Date: 2023年05月05日 14:41:10
* @Descripton:
* @Version:
**/
@Configuration
public class SecurityPermitAllConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().permitAll()
.and().csrf().disable();
}
}
package cn.guangjun.spring.boot2.admin.eureka.client;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @BeongsPackage:cn.guangjun.spring.boot2.admin.eureka.client.config.cn.guangjun.spring.boot2.admin.eureka.client
* @Author guangjunhu
* @Date: 2023年05月05日 17:39:47
* @Descripton:
* @Version:
**/
@EnableDiscoveryClient
@SpringBootApplication
public class Springboot2AdminEurekaClientApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot2AdminEurekaClientApplication.class,args);
}
}
步骤6:启动
springboot2-admin集成nacos
nacos配置
nacos官网:https://nacos.io/zh-cn/
https://github.com/nacos-group
步骤1:nacos下载
https://github.com/alibaba/nacos/releases
如果下载源码则详见官网
git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
ls -al distribution/target/
// change the $version to your actual path
cd distribution/target/nacos-server-$version/nacos/bin
步骤2:配置属性文件
数据库配置:
权限配置
步骤3:启动服务
./startup.sh -m standalone #单机启动模式
步骤4:查看启动日志
tailf /opt/nacos/logs/nacos.log
登录:
备注:
springboot2 集成 nacos 不需要spring cloud nacos
创建项目
1、pom.xml**
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.guangjun.spring.boot2</groupId>
<artifactId>springboot2-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>springboot2-admin-server-nacos</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot2-admin-server-nacos</name>
<description>springboot2-admin-server-nacos</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.14</version>
<scope>provided</scope>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.alibaba.boot</groupId>-->
<!-- <artifactId>nacos-config-spring-boot-starter</artifactId>-->
<!-- <version>0.2.1</version>-->
<!-- </dependency>-->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-discovery-spring-boot-starter</artifactId>
<version>0.2.7</version>
</dependency>
<!--<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.7.RELEASE</version>
</dependency>-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2、application.yaml
server:
port: 9001
spring:
application:
name: spring-admin-nacos-server
nacos:
discovery:
enabled: true
auto-register: true
server-addr: 192.168.137.40:8848
access-key: cfbc3d452bd5cf43407c4a46e4ffd361dc9a90e3
secret-key: ZjA4ZjhmNjU5NzVlNmYxZDRhOTM0OWY1MTAxMWFlZGJiNTI1NjFhYQ==
username: nacos
password: nacos
namespace: public
register:
group-name: springboot-admin
health-check-url: /actuator/health
management:
endpoint:
health:
show-details: always
endpoints:
enabled-by-default: true
web:
base-path: /actuator
exposure:
include: '*'
3、源代码
package cn.guangjun.spring.boot2.admin.server.nacos;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Springboot2AdminServerNacosApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot2AdminServerNacosApplication.class, args);
}
}
4、运行
springboot admin集成nacos
springboot2-admin-server-nacos
步骤1:创建maven项目
步骤2:pom.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.guangjun.spring.boot2</groupId>
<artifactId>springboot2-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>springboot2-admin-server-nacos</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot2-admin-server-nacos</name>
<description>springboot2-admin-server-nacos</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.14</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
步骤3:application.yaml
server:
port: 9001
spring:
application:
name: spring-admin-nacos-server
cloud:
nacos:
discovery:
registerEnabled: true
server-addr: 192.168.137.40:8848
access-key: cfbc3d452bd5cf43407c4a46e4ffd361dc9a90e3
secret-key: ZjA4ZjhmNjU5NzVlNmYxZDRhOTM0OWY1MTAxMWFlZGJiNTI1NjFhYQ==
username: nacos
password: nacos
namespace: public
group: springboot2-admin
health-check-url: /actuator/health
management:
server:
port: 17003
endpoints:
web:
exposure:
include: '*'
endpoint:
health:
show-details: always
步骤4:源代码
@EnableDiscoveryClient
@EnableAdminServer
@SpringBootApplication
public class Springboot2AdminServerNacosApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot2AdminServerNacosApplication.class, args);
}
}
步骤5:启动
springboot2-admin-client-nacos
步骤1:创建maven项目
步骤2:pom.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.guangjun.spring.boot2</groupId>
<artifactId>springboot2-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>springboot2-admin-client-nacos</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot2-admin-client-nacos</name>
<description>springboot2-admin-client-nacos</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.14</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
步骤3:application.yaml
server:
port: 9002
spring:
application:
name: spring-admin-nacos-client
cloud:
nacos:
discovery:
registerEnabled: true
server-addr: 192.168.137.40:8848
access-key: cfbc3d452bd5cf43407c4a46e4ffd361dc9a90e3
secret-key: ZjA4ZjhmNjU5NzVlNmYxZDRhOTM0OWY1MTAxMWFlZGJiNTI1NjFhYQ==
username: nacos
password: nacos
namespace: public
group: springboot2-admin
health-check-url: /actuator/health
management:
server:
port: 17004
endpoints:
web:
exposure:
include: '*'
endpoint:
health:
show-details: always
步骤4:源代码
@EnableDiscoveryClient
@SpringBootApplication
public class Springboot2AdminClientNacosApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot2AdminClientNacosApplication.class, args);
}
}