nacos集群配置
1、https://nacos.io/zh-cn/地址下载1.4.2版本或1.4.4版本nacos zip可运行包,并解压。
2、将conf/application.properties文件里的以下配置放开,并配置好nacos的数据库连接,修改好保存。
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=30000&socketTimeout=30000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=
3、执行conf/nacos-mysql.sql数据库建表语句。修改cluster.conf.example并另存为cluster.conf
4、多准备两台电脑,将nacos-server-1.4.2目录上传到另两台电脑。然后依次启动nacos
spring cloud微服务项目nacos配置中心设置
1、新建项目gateway并在src/main/resources目录下新建bootstrap.yml
bootstrap.yml内容如下
server:
port: 91080
tomcat:
uri-encoding: UTF-8
servlet:
charset: UTF-8
encoding:
force: true
enabled: true
spring:
application:
name: abc-gateway
profiles:
#启用配置项级别
active: ${spring.profiles.active}
main:
allow-bean-definition-overriding: true
web-application-type: reactive
cloud:
nacos:
config:
enabled: true
enable-remote-sync-config: true
refresh-enabled: true
group: ${spring.clound.nacos.config.group}
namespace: ${spring.clound.nacos.config.namespace}
prefix: ${spring.application.name}
server-addr: ${spring.clound.nacos.config.server}
file-extension: yml
#工程的特性配置
extension-configs:
- data-id: ${spring.cloud.nacos.config.prefix}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
group: ${spring.cloud.nacos.config.group}
refresh: true
extension-configs标签以上的nacos配置是指定gateway启动时去哪个nacos配置中心读取配置信息。上面采用${}动态信息设置是可以在sh文件或bat文件中添加系统启动参数进行启动,方便测试与开发、生产版本的切换。例如:在bat文件中添加启动参数
java -Dspring.profiles.active=local -Dspring.clound.nacos.config.group=LOCAL_GROUP -Dspring.clound.nacos.config.namespace=6225204a-0d3a-402b-bdeb-3f3abec4a6c7 -Dspring.clound.nacos.config.server=127.0.0.1:8848 -jar ./target/abc-gateway-0.0.1-SNAPSHOT.jar
启动后,extension-configs标签的配置信息将去nacos配置中心读取。在上例中,nacos配置中心必须有一个data-id=abc-gateway-local.yml的配置项
abc-gateway-local.yml的内容:
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
namespace: 6225204a-0d3a-402b-bdeb-3f3abec4a6c7
group: LOCAL_GROUP
gateway:
discovery:
locator:
enabled: true
routes:
- id: abc-authori
uri: lb://abc-authori
predicates:
- Path=/oauth/**,/oauthUser/**
- id: st-admin
uri: lb://abc-admin
predicates:
- Path=/admin/**
#filters:
#- StripPrefix=1
globalcors:
add-to-simple-url-handler-mapping: true
cors-configurations:
'[/**]':
allowedOrigins: "*"
allowedHeaders: "*"
allowedMethods: "*"
default-filters:
- DedupeResponseHeader=Vary Access-Control-Allow-Origin Access-Control-Allow-Credentials, RETAIN_FIRST
servlet:
multipart:
max-file-size: 20MB
max-request-size: 20MB
ribbon:
eureka:
enabled: true
ReadTimeout: 20000
ConnectTimeout: 5000
hystrix:
#HystrixThreadPoolProperties
threadpool:
default:
coreSize: 100
maximumSize: 200
keepAliveTimeMinutes: 5
maxQueueSize: 1000
queueSizeRejectionThreshold: 500
command:
default:
execution:
timeout:
enabled: true
isolation:
thread:
timeoutInMilliseconds: 30000
fallback:
isolation:
semaphore:
maxConcurrentRequests: 100
circuitBreaker:
requestVolumeThreshold: 1000
abc-gateway/pom.xml
<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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.abc</groupId>
<version>0.0.1-SNAPSHOT</version>
<artifactId>abc-gateway</artifactId>
<packaging>jar</packaging>
<properties>
<spring-cloud.version>Hoxton.SR12</spring-cloud.version>
<fastjson.version>1.2.79</fastjson.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.12.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<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>2.2.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-hystrix</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<!--配置中心来做配置管理-->
<!--gateway网关-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
<!--
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
创建abc-admin项目在src/main/resources目录下新建bootstrap.yml
abc-admin的bootstrap.yml
server:
port: 27030
tomcat:
uri-encoding: UTF-8
servlet:
context-path: /admin
charset: UTF-8
encoding:
force: true
enabled: true
logging:
level:
root: debug
org:
springframework: info
spring:
application:
name: abc-admin
profiles:
#启用配置项级别
active: ${spring.profiles.active}
main:
#当遇到同样名字的时候,是否允许覆盖注册
allow-bean-definition-overriding: true
cloud:
nacos:
config:
enabled: true
enable-remote-sync-config: true
refresh-enabled: true
group: ${spring.clound.nacos.config.group}
namespace: ${spring.clound.nacos.config.namespace}
prefix: ${spring.application.name}
server-addr: ${spring.clound.nacos.config.server}
#nacos上的Dataids为:st-admin-local.yml自己在本地nacos复制application-sample.yml内容到nacos配置管理中心上
file-extension: yml
#公共的配置
shared-configs:
- data-id: common-redis-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} # 配置文件名-Data Id
group: ${spring.cloud.nacos.config.group} # 默认为DEFAULT_GROUP
refresh: true # 是否动态刷新,默认为false
- data-id: common-jpa-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} # 配置文件名-Data Id
group: ${spring.cloud.nacos.config.group} # 默认为DEFAULT_GROUP
refresh: true # 是否动态刷新,默认为false
#工程的特性配置
extension-configs:
- data-id: ${spring.cloud.nacos.config.prefix}-jpa-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
group: ${spring.cloud.nacos.config.group}
refresh: true
abc-admin的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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.abc</groupId>
<artifactId>abc-basis</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>st-admin</artifactId>
<name>abc-admin</name>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<mybatis.generator.version>1.3.2</mybatis.generator.version>
<fastjson.version>1.2.79</fastjson.version>
<spring-cloud.version>Hoxton.SR12</spring-cloud.version>
<mysql.version>8.0.13</mysql.version>
<skipTests>true</skipTests>
</properties>
<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>2.2.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- 启动应用必需的 -->
<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-jetty</artifactId>
</dependency>
<!--配置中心来做配置管理-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- openfeign必需 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<!-- end openfeign必需 -->
<!-- end 启动应用必需的 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</dependency>
<!-- json处理 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.uuid</groupId>
<artifactId>java-uuid-generator</artifactId>
<version>3.1.3</version>
</dependency>
<!-- 测试 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
<layout>ZIP</layout>
<mainClass>cn.suitong.AdminApplication</mainClass>
<!--排除spring-cloud-alibaba-nacos-discovery-0.2.2版本-->
<excludes>
<exclude>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</exclude>
<exclude>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
</exclude>
</excludes>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<!-- <skipTests>true</skipTests> -->
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
nacos配置中心上的commom-redis-local.yml
spring:
redis:
enabled: true
mode: standalone
password: aaaaa
timeout: 10000
jedis:
pool:
max-active: 8
max-wait: -1
max-idle: 8
min-idle: 1
sentinel:
nodes: ip1:port1,ip2:6379,ip3:26379
master: mymaster
database: 6
host: ip
port: 6379
nacos配置中心上的common-jpa-local.yml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://ip:3306/db_name?userUnicode=false&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
username: aaa
password: aaa
hikari:
pool-name: hikariPool
minimum-idle: 5
idle-timeout: 1800000
maximum-pool-size: 20
auto-commit: true
max-lifetime: 1800000
connection-timeout: 30000
jpa:
hibernate:
ddl-auto: update
naming:
physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
show-sql: false
database: mysql
database-platform: org.hibernate.dialect.MySQL5Dialect