本地host文件添加映射
127.0.0.1 eureka-master
eureka-server 注册中心
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> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.3.RELEASE</version> <relativePath/> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>eureka-server</artifactId> <version>1.0.RELEASE</version> <name>eureka-server</name> <packaging>jar</packaging> <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>Finchley.RELEASE</spring-cloud.version> </properties> <dependencies> <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> <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> </dependencies> </dependencyManagement> </project>
配置文件
server.port=2222 eureka.instance.hostname=eureka-master eureka.instance.prefer-ip-address=true eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/ eureka.client.registerWithEureka=false eureka.client.fetchRegistry=false
zuul-router 网关
所有外部的请求全部通过网关进行路由转发,同时在网关进行权限校验,服务service-xxx内部互相调用不走网关
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"> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.3.RELEASE</version> <relativePath/> </parent> <modelVersion>4.0.0</modelVersion> <groupId>top.springcloud.ZuulRouter</groupId> <artifactId>zuul-router</artifactId> <version>1.0.RELEASE</version> <packaging>jar</packaging> <name>zuul-router</name> <url>http://maven.apache.org</url> <properties> <spring-cloud.version>Finchley.RELEASE</spring-cloud.version> </properties> <dependencies> <!--公共实体以及通用的工具类--> <dependency> <groupId>com.fm.vege</groupId> <artifactId>base-entity</artifactId> <version>1.0-RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> <!--redis 缓存相关--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency> <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <classifier>jdk15</classifier> </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> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
配置文件
application.yml
spring: application: name: zuul-gateway profiles: active: dev #配置日志-使用外部配置文件 logging: config: classpath:logback-spring.xml #重设feign超时 ribbon: ReadTimeout: 8000 ConnectTimeout: 8000 MaxAutoRetries: 0 MaxAutoRetriesNextServer: 1 hystrix: command: c4i-store: execution: timeout: enabled: true isolation: thread: timeoutInMilliseconds: 10000 ribbon: ReadTimeout: 10000 ConnectTimeout: 10000
application-dev.yml
server: port: 9000 eureka: instance: prefer-ip-address: true client: serviceUrl: defaultZone: http://eureka-master:2222/eureka/ zuul: host: socket-timeout-millis: 5000 connect-timeout-millis: 4000 routes: #针对url路径 选择路由的服务 user-api: path: /user-api/** serviceId: service-user sensitiveHeaders: "*" order-api: path: /order-api/** serviceId: service-order sensitiveHeaders: "*" goods-api: path: /goods-api/** serviceId: service-goods sensitiveHeaders: "*" pay-api: path: /pay-api/** serviceId: service-pay sensitiveHeaders: "*" web-api: path: /web/** serviceId: admin-web sensitiveHeaders: "*"
service-user 服务(服务就拿这个举例)
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"> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.3.RELEASE</version> <relativePath/> </parent> <modelVersion>4.0.0</modelVersion> <name>service-user</name> <groupId>com.fm.vege</groupId> <artifactId>service-user</artifactId> <version>1.0.RELEASE</version> <packaging>jar</packaging> <properties> <spring-cloud.version>Finchley.RELEASE</spring-cloud.version> <HikariCP.version>3.2.0</HikariCP.version> <mysql.connector.version>5.1.46</mysql.connector.version> </properties> <dependencies> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.5</version> </dependency> <!-- 分页助手 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.3</version> </dependency> <!--公共实体以及通用的工具类--> <dependency> <groupId>com.fm.vege</groupId> <artifactId>base-entity</artifactId> <version>1.0-RELEASE</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-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.2</version> </dependency> <!-- HikariCP连接池 --> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>${HikariCP.version}</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.connector.version}</version> </dependency> <!--redis 缓存相关--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> <scope>compile</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> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
配置文件
application.yml
spring: application: name: service-user profiles: active: dev #hystrix的超时时间 hystrix: command: default: execution: timeout: enabled: true isolation: thread: timeoutInMilliseconds: 6000 ribbon: ReadTimeout: 5000 ConnectTimeout: 5000
application-dev.yml
server: port: 8081 eureka: instance: prefer-ip-address: true client: serviceUrl: #注册中心集群 defaultZone: http://eureka-master:2222/eureka/ #instance: #instance-id: ${spring.application.name}:${random.int} spring: datasource: platform: mysql driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://172.31.121.149:3306/fm_user_db?useUnicode=true&characterEncoding=utf-8&useSSL=false username: root password: Nongshu@113 hikari: maxLifetime: 1765000 maximumPoolSize: 15 redis: host: 172.31.121.149 port: 6379 password: Nongshu@113 timeout: 6000ms lettuce: pool: max-active: 8 max-wait: -1ms max-idle: 8 min-idle: 0 database: 0 #分页组件 pagehelper: helperDialect: mysql reasonable: true supportMethodsArguments: true params: count=countSql mybatis: mapperLocations: classpath:mapper/*.xml type-aliases-package: com.fm.vege.user.mapper.po #配置日志-使用外部配置文件 logging: config: classpath:logback-spring.xml
日志配置(logback)
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <!-- 定义变量 , 文件输出格式 --> <springProperty scope="context" name="app.name" source="spring.application.name" defaultValue="app-service"/> <property name="PATTERN" value="%-12(%d{yyyy-MM-dd HH:mm:ss.SSS}) |-%-5level [%thread] %c [%L] -| %msg%n" /> <!-- 定义变量 ,日志文件输出路径 --> <property name="logs.path" value="logs" /> <!-- 输出到控制台 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${PATTERN}</pattern> </encoder> </appender> <!--错误日志单独输出--> <appender name="FILE-ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${logs.path}/${app.name}-error.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> <!-- 文件名称 --> <fileNamePattern>${logs.path}/${app.name}-error.%i.log</fileNamePattern> <minIndex>1</minIndex> <maxIndex>10</maxIndex> </rollingPolicy> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>20MB</maxFileSize> </triggeringPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>${PATTERN}</pattern> </layout> </appender> <!-- 输出到文件 --> <appender name="FILE-INFO" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 文件路径 --> <file>${logs.path}/${app.name}-info.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> <!-- 文件名称 --> <fileNamePattern>${logs.path}/${app.name}-info.%i.log</fileNamePattern> <minIndex>1</minIndex> <maxIndex>10</maxIndex> </rollingPolicy> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>20MB</maxFileSize> </triggeringPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>${PATTERN}</pattern> </layout> </appender> <!--开发环境日志输出到控制台--> <springProfile name="dev"> <root level="info"> <appender-ref ref="CONSOLE" /> <appender-ref ref="FILE-INFO" /> <appender-ref ref="FILE-ERROR" /> </root> <logger name="com.fm.vege" level="info" /> </springProfile> <!--测试环境 --> <springProfile name="test"> <root level="info"> <appender-ref ref="CONSOLE" /> <appender-ref ref="FILE-INFO" /> <appender-ref ref="FILE-ERROR" /> </root> <logger name="com.fm.vege" level="info" /> </springProfile> <!-- 生产环境--> <springProfile name="prod"> <root level="error"> <appender-ref ref="FILE-INFO" /> </root> <logger name="com.fm.vege" level="info" /> </springProfile> </configuration>
转载请注明:左手代码右手诗 » spring cloud 项目实战 – 项目构建