spring boot nacos注册微服务示例demo_亲测成功
先安装好Nacos
Nacos安装使用
创建Maven项目
结构如图
例如项目名为: test-demo
下面有个子模块: test-demo-data-process
父模块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>test-demo</artifactId><groupId>com.beyond.demo</groupId><version>0.1</version></parent><modelVersion>4.0.0</modelVersion><description>demo数据服务</description><artifactId>test-demo-data-process</artifactId><packaging>pom</packaging><modules><module>test-demo-data-process-server</module></modules>
</project>
子模块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>test-demo-data-process</artifactId><groupId>com.beyond.demo</groupId><version>0.1</version></parent><modelVersion>4.0.0</modelVersion><artifactId>test-demo-data-process-server</artifactId><dependencies><!-- javax.servlet --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><scope>provided</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!-- 增加feign-httpclient,使用连接池机制 --><dependency><groupId>io.github.openfeign</groupId><artifactId>feign-httpclient</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><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.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><finalName>${project.artifactId}-${project.version}</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
application.yml
server:port: 8080management:endpoints:web:exposure:include: "*"exclude:endpoint:health:show-details: always
banner.txt
springboot项目启动时,控制台会打印自带的banner
// _ooOoo_ //
// o8888888o //
// 88" . "88 //
// (| ^_^ |) //
// O\ = /O //
// ____/`---'\____ //
// .' \\| |// `. //
// / \\||| : |||// \ //
// / _||||| -:- |||||- \ //
// | | \\\ - /// | | //
// | \_| ''\---/'' | | //
// \ .-\__ `-` ___/-. / //
// ___`. .' /--.--\ `. . ___ //
// ."" '< `.___\_<|>_/___.' >'"". //
// | | : `- \`.;`\ _ /`;.`/ - ` : | | //
// \ \ `-. \_ __\ /__ _/ .-` / / //
// ========`-.____`-.___\_____/___.-`____.-'======== //
// `=---=' //
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //
// 佛祖保佑 永不宕机 永无BUG //Application Version: ${application.version}${application.formatted-version}
Spring Boot Version: ${spring-boot.version}${spring-boot.formatted-version}
bootstrap.yaml
注意: namespace和nacos上对应
spring:# 选择加载不同环境的配置文件profiles:active: devapplication:name: test-demo-data-process-server---
#开发环境配置
spring:profiles: dev,localcloud:nacos:discovery:server-addr: 192.168.3.1:8848namespace: xxxx-8ef1-4393-xxxx-xxxxxconfig:server-addr: 192.168.3.1:8848namespace: xxxx-8ef1-4393-xxxx-xxxxxactive-profiles: ${spring.profiles.active:dev}fileExtension: ymlshared-dataids: cloud.yml,rabbitmq-mqtt.ymlrefreshable-dataids: cloud.yml,rabbitmq-mqtt.yml---
##公司环境配置
spring:profiles: compcloud:nacos:discovery:server-addr: 192.168.1.18:8848namespace: xxxxx-8ef1-xxxx-b28f-xxxxxconfig:server-addr: 192.168.1.18:8848namespace: xxxxx-8ef1-xxxx-b28f-xxxxxactive-profiles: ${spring.profiles.active:comp}fileExtension: ymlshared-dataids: cloud.yml,rabbitmq-mqtt.ymlrefreshable-dataids: cloud.yml,rabbitmq-mqtt.yml---
##生产环境配置
spring:profiles: prodcloud:nacos:discovery:server-addr: ${NACOS_HOST:10.10.70.89}:${NACOS_PORT:8848}namespace: ${NAMESPACE:559d7cb0-xxx-xxx-xxxx-41843b0106ae}config:server-addr: ${NACOS_HOST:10.10.70.89}:${NACOS_PORT:8848}namespace: ${NAMESPACE:559d7cb0-xxx-xxx-xxxx-41843b0106ae}active-profiles: ${spring.profiles.active:prod}fileExtension: ymlshared-dataids: cloud.yml,rabbitmq-mqtt.ymlrefreshable-dataids: cloud.yml,rabbitmq-mqtt.yml
logback-spring.xml
logback日志配置
<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="false" scanPeriod="60000" debug="false"><include resource="org/springframework/boot/logging/logback/defaults.xml"/><springProperty scope="context" name="springAppName" source="spring.application.name"/><property name="GLOBAL-LOG-LEVEL" value="ERROR" /> <!-- TRACE < DEBUG < INFO < WARN < ERROR --><property name="GLOBAL-LOG-PATH" value="log/" /> <!-- 日志输出路径变量 --><property name="GLOBAL-LOG-MODULE" value="${springAppName}" /> <!-- 日志文件命名变量,一般以模块名命名 --><!-- You can override this to have a custom pattern -->
<property name="CONSOLE_LOG_PATTERN"value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><!-- Minimum logging level to be presented in the console logs--><level>DEBUG</level></filter><encoder><pattern>${CONSOLE_LOG_PATTERN}</pattern><charset>utf8</charset></encoder></appender><appender name="ROLLING-FILE-1" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${GLOBAL-LOG-PATH}/${GLOBAL-LOG-MODULE}-%d{yyyy-MM-dd}.log</fileNamePattern><maxHistory>30</maxHistory></rollingPolicy><encoder><pattern>${CONSOLE_LOG_PATTERN}</pattern><charset>utf8</charset></encoder></appender><!-- 异步输出 --><appender name ="ASYNC" class= "ch.qos.logback.classic.AsyncAppender"><!-- 不丢失日志.默认的,如果队列的90%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 --><discardingThreshold>10</discardingThreshold><!-- 更改默认的队列的深度,该值会影响性能.默认值为256 --><queueSize>256</queueSize><!-- 添加附加的appender,最多只能添加一个 --><appender-ref ref ="ROLLING-FILE-1"/></appender><!-- Appender to log to file in a JSON format<appender name="logstash" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_FILE}.json</file>;<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${GLOBAL-LOG-PATH}/${GLOBAL-LOG-MODULE}.json.%d{yyyy-MM-dd}.gz</fileNamePattern><maxHistory>7</maxHistory></rollingPolicy><encoder><pattern>${CONSOLE_LOG_PATTERN}</pattern><charset>utf8</charset></encoder><encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"><providers><timestamp><timeZone>UTC</timeZone></timestamp><pattern><pattern>{"severity": "%level","service": "${springAppName:-}","trace": "%X{X-B3-TraceId:-}","span": "%X{X-B3-SpanId:-}","parent": "%X{X-B3-ParentSpanId:-}","exportable": "%X{X-Span-Export:-}","pid": "${PID:-}","thread": "%thread","class": "%logger{40}","rest": "%message"}</pattern></pattern></providers></encoder></appender>--><!-- 日志级别最好每个logger节点都设置,不要引用传递root节点的日志级别,有利于性能 --><springProfile name="dev,comp"><logger name="com.beyond" level="INFO"/><logger name="com.alibaba.nacos" level="ERROR"/><root level="${GLOBAL-LOG-LEVEL}"><appender-ref ref="STDOUT"/><appender-ref ref="ASYNC"/></root></springProfile><springProfile name="test,prod"><logger name="com.beyond" level="ERROR"/><logger name="com.alibaba.nacos" level="ERROR"/><root level="${GLOBAL-LOG-LEVEL}"><appender-ref ref="STDOUT"/><appender-ref ref="ASYNC"/></root></springProfile>
</configuration>
DataApp.java
启动类
package com.beyond.demo.data;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.ApplicationPidFileWriter;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@EnableScheduling
public class DataApp
{public static void main(String[] args){final SpringApplication sa = new SpringApplication(DataApp.class);sa.addListeners(new ApplicationPidFileWriter("test-data-demo-server.pid"));sa.run(args);}
}
其他包的代码不做详细介绍了,都是业务逻辑相关代码