nacos分布式配置及nacos下spring cloud微服务工程配置

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值