day13【前台】搭建环境

1、会员系统架构

2、创建工程

2.1、工程清单

  • 父工程、 聚合工程: atcrowdfunding07-member-parent(唯一的 pom 工程)
  • 注册中心: atcrowdfunding08-member-eureka
  • 实体类模块: atcrowdfunding09-member-entity
  • MySQL 数据服务: atcrowdfunding10-member-mysql-provider
  • Redis 数据服务: atcrowdfunding11-member-redis-provider
  • 会员中心: atcrowdfunding12-member-authentication-consumer
  • 项目维护: atcrowdfunding13-member-project-consumer
  • 订单维护: atcrowdfunding14-member-order-consumer
  • 支付功能: atcrowdfunding15-member-pay-consumer
  • 网关: atcrowdfunding16-member-zuul
  • API 模块: atcrowdfunding17-member-api

2.2、创建工程

  • 父工程:创建Maven Projectparent工程打包方式为pom

  • 其他工程:在parent下创建Maven Module,打包方式均为jarSpringBoot打包方式选择jar包,则使用自带的Tomcat

2.3、工程结构

2.4、搭建环境约定

2.5、包名约定

  • 主启动类所在的包:com.atguigu.crowd
  • 其他包都作为com.atguigu.crowd 的子包

2.6、主启动类约定

  • 主启动类类名为CrowdMainClass

2.7、端口号约定

atcrowdfunding08-member-eureka                   1000
atcrowdfunding10-member-mysql-provider          2000
atcrowdfunding11-member-redis-provider          3000
atcrowdfunding12-member-authentication-consumer 4000
atcrowdfunding13-member-project-consumer        5000
atcrowdfunding14-member-order-consumer          7000
atcrowdfunding15-member-pay-consumer            8000
atcrowdfunding16-member-zuul                    80

3、parent工程

3.1、依赖管理

  • 在父工程中统一管理依赖的版本

<!-- 配置在父工程中要管理的依赖 -->
<dependencyManagement><dependencies><!-- 导入SpringCloud需要使用的依赖信息 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Greenwich.SR2</version><type>pom</type><!-- import依赖范围表示将spring-cloud-dependencies包中的依赖信息导入 --><scope>import</scope></dependency><!-- 导入SpringBoot需要使用的依赖信息 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.1.6.RELEASE</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.0</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.5</version></dependency></dependencies>
</dependencyManagement>

4、Eureka注册中心

4.1、引入依赖

  • Eureka工程引入eureka-server的依赖

<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>
</dependencies>

4.2、创建主启动类

  • @EnableEurekaServer注解:启用Eureka服务器端功能

@EnableEurekaServer
@SpringBootApplication
public class CrowdMainClass {public static void main(String[] args) {SpringApplication.run(CrowdMainClass.class, args);}}

4.3、创建yml配置文件

server:port: 1000
spring:application:name: atguigu-crowd-eureka
eureka:instance:hostname: localhostclient:register-with-eureka: falsefetch-registry: falseservice-url:defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

4.4、测试

  • 访问:http://localhost:1000/

5、entity工程

5.1、实体类的细分

  • VOView Object视图对象 ,用于与浏览器页面打交道

    • 用途 1: 接收浏览器发送过来的数据
    • 用途 2: 把数据发送给浏览器去显示
  • POPersistent Object 持久化对象,用于与数据库打交道

    • 用途 1: 将数据封装到 PO 对象存入数据库
    • 用途 2: 将数据库数据查询出来存入 PO 对象
    • 所以 PO 对象是和数据库表对应, 一个数据库表对应一个 PO 对象

5.2、创建包

  • entity工程下创建

    • com.atguigu.crowd.entity.po
    • com.atguigu.crowd.entity.vo

6、lombok

6.1、lombok 原理

6.2、lombok安装

6.2.1、引入依赖

  • entity工程引入lombok的依赖

<dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>
</dependencies>

6.2.2、lombok jar包

  • Maven仓库中找到lombok.jar

6.2.3、安装

  • lombok.jar复制到STS安装目录

  • 双击运行lombok.jar,指定STS.exe程序所在位置,然后执行安装(更新)

  • 安装完成后,关注如下两个文件

    • 多了一个lombok.jar文件,其实就是将lombok-1.18.8.jar复制了一份,然后改了个名字
    • STS.ini配置文件也被修改了

  • STS.ini配置文件最后一行:指定lombok.jar包所在的位置
-startup
plugins/org.eclipse.equinox.launcher_1.5.500.v20190715-1310.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.1100.v20190907-0426
-product
org.springsource.sts.ide
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.8
-Xms256m
-Xmx1024m
-XX:+UseG1GC
-XX:+UseStringDeduplication
--add-modules=ALL-SYSTEM
-Dosgi.module.lock.timeout=10
-javaagent:D:\JavaTools\sts-bundle\sts-3.9.10.RELEASE\lombok.jar

6.3、lombok测试

6.3.1、注解

  • @Data:每一个字段都加入getXxx()setXxx()toString()方法
  • @ToStringtoString()方法
  • @NoArgsConstructor:无参构造器
  • @AllArgsConstructor:全部字段都包括的构造器
  • @EqualsAndHashCodeequalshashCode 方法
  • @Getter
    • 类:所有字段都加入getXxx()方法
    • 字段:当前字段加入getXxx()`方法
  • @Setter
    • 类:所有字段都加入setXxx()方法
    • 字段: 当前字段加入setXxx()方法

6.3.2、常用组合

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Employee{

6.3.3、常见问题

  • 安装完成后,重启STS,如果按照安装说明正确安装,并且提示安装成功,重启后依然编译报错的话

    • 将路径修改为相对路径-javaagent:lombok.jar
    • 请右键STS.exe选择以管理员身份运行。
  • 莫名其妙报错:注解删了,重新写一遍

7、mysql-provider工程

7.1、创建数据库表

  • 创建t_member表,用于存储会员信息

CREATE TABLE t_member (id INT (11) NOT NULL AUTO_INCREMENT,loginacct VARCHAR (255) NOT NULL,userpswd CHAR(200) NOT NULL,username VARCHAR (255),email VARCHAR (255),authstatus INT (4) COMMENT    '实名认证状态 0 - 未实名认证, 1 - 实名认证申请中, 2 - 已实名认证',usertype INT (4) COMMENT         '0 - 个人, 1 - 企业',realname VARCHAR (255),cardnum VARCHAR (255),accttype INT (4) COMMENT         '0 - 企业, 1 - 个体, 2 - 个人, 3 - 政府',PRIMARY KEY (id)
) ;

7.2、逆向工程

  • 借助reverse工程逆向生成,并把相应资源归位、

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration><!-- mybatis-generator:generate --><context id="atguiguTables" targetRuntime="MyBatis3"><commentGenerator><!-- 是否去除自动生成的注释 true:是;false:否 --><property name="suppressAllComments" value="true" /></commentGenerator><!--数据库连接的信息: 驱动类、 连接地址、 用户名、 密码 --><jdbcConnection driverClass="com.mysql.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/project_crowd"userId="root" password="101713"></jdbcConnection><!-- 默认 false, 把 JDBC DECIMAL 和 NUMERIC 类型解析为 Integer, 为 true 时把 JDBC DECIMAL 和 NUMERIC 类型解析为 java.math.BigDecimal --><javaTypeResolver><property name="forceBigDecimals" value="false" /></javaTypeResolver><!-- targetProject:生成 Entity 类的路径 --><javaModelGenerator targetProject=".\src\main\java"targetPackage="com.atguigu.crowd.entity"><!-- enableSubPackages:是否让 schema 作为包的后缀 --><property name="enableSubPackages" value="false" /><!-- 从数据库返回的值被清理前后的空格 --><property name="trimStrings" value="true" /></javaModelGenerator><!-- targetProject:XxxMapper.xml 映射文件生成的路径 --><sqlMapGenerator targetProject=".\src\main\java"targetPackage="com.atguigu.crowd.mapper"><!-- enableSubPackages:是否让 schema 作为包的后缀 --><property name="enableSubPackages" value="false" /></sqlMapGenerator><!-- targetPackage: Mapper 接口生成的位置 --><javaClientGenerator type="XMLMAPPER"targetProject=".\src\main\java"targetPackage="com.atguigu.crowd.mapper"><!-- enableSubPackages:是否让 schema 作为包的后缀 --><property name="enableSubPackages" value="false" /></javaClientGenerator><!-- 数据库表名字和我们的 entity 类对应的映射指定 --><table tableName="t_member" domainObjectName="MemberPO" /></context>
</generatorConfiguration>
  • 将实体类归位至entity工程下,MemberPO实体类使用lombok注解标记

@NoArgsConstructor
@AllArgsConstructor
@Data
public class MemberPO {private Integer id;private String loginacct;private String userpswd;private String username;private String email;private Integer authstatus;private Integer usertype;private String realname;private String cardnum;private Integer accttype;
  • Mapper接口归位至mysql-provider工程下(这步会报错,因为Mapper接口需要用到entity工程中的实体类,然而现在mysql-provider工程并没有依赖entity工程,添加以来之后报错就会消失)

  • Mapper.xml映射文件归位至mysql-provider工程下

7.3、引入依赖

  • 添加相关依赖:

    • 数据库相关依赖
    • 需要对外暴露服务,添加web依赖
    • 服务需要注册进Eureka里面,添加eureka-client依赖
    • 需要使用实体类和工具类,添加对entity工程和common-util工程的依赖

<dependencies><!-- 整合MyBatis --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><!-- MySQL驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!-- 数据库连接池 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId></dependency><!-- SpringBoot测试 --><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><!-- 作为客户端访问Eureka注册中心 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><!-- 为了能够使用实体类 --><dependency><groupId>com.atguigu.crowd</groupId><artifactId>atcrowdfunding09-member-entity</artifactId><version>0.0.1-SNAPSHOT</version></dependency><!-- 为了能够使用工具类 --><dependency><groupId>com.atguigu.crowd</groupId><artifactId>atcrowdfunding05-common-util</artifactId><version>0.0.1-SNAPSHOT</version></dependency>
</dependencies>

7.4、创建主启动类

  • 指定Mapper接口所在包

// 扫描MyBatis的Mapper接口所在的包
@MapperScan("com.atguigu.crowd.mapper")
@SpringBootApplication
public class CrowdMainClass {public static void main(String[] args) {SpringApplication.run(CrowdMainClass.class, args);}}

7.5、创建yml配置文件

  • 配置端口号
  • 配置微服务名称
  • 配置数据源
  • 指定Eureka注册中心的地址
  • 指定Mapper映射文件的地址
  • 修改局部日志级别

server:port: 2000
spring:application:name: atguigu-crowd-mysqldatasource:name: mydbtype: com.alibaba.druid.pool.DruidDataSourceurl: jdbc:mysql://127.0.0.1:3306/project_crowd?serverTimezone=UTCusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driver
eureka:client:service-url:defaultZone: http://localhost:1000/eureka
mybatis:mapper-locations: classpath*:/mybatis/mapper/*Mapper.xml
logging:level:com.atguigu.crowd.mapper: debugcom.atguigu.crowd.test: debug

7.6、测试Mapper

  • 新建测试类

@RunWith(SpringRunner.class)
@SpringBootTest
public class MyBatisTest {@Autowiredprivate DataSource dataSource;@Autowiredprivate MemberPOMapper memberPOMapper;private Logger logger = LoggerFactory.getLogger(MyBatisTest.class);@Testpublic void testConnection() throws SQLException {Connection connection = dataSource.getConnection();logger.debug(connection.toString());}@Testpublic void testMapper() {BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();String source = "123123";String encode = passwordEncoder.encode(source);MemberPO memberPO = new MemberPO(null, "jack", encode, "杰克", "jack@qq.com", 1, 1, "杰克", "123123", 2);memberPOMapper.insert(memberPO);}}
  • 测试数据库连接
2020-06-25 20:33:50.107 DEBUG 24484 --- [           main] com.atguigu.crowd.test.MyBatisTest       : com.mysql.cj.jdbc.ConnectionImpl@f9cab00
  • 测试Mapper insert

7.7、api工程中暴露接口

7.7.1、引入依赖

  • api工程中引入依赖

    • 通过feign实现远程调用,则需要添加openfeign依赖
    • 需要使用实体类和工具类,添加对entity工程和common-util工程的依赖

<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><dependency><groupId>com.atguigu.crowd</groupId><artifactId>atcrowdfunding05-common-util</artifactId><version>0.0.1-SNAPSHOT</version></dependency><dependency><groupId>com.atguigu.crowd</groupId><artifactId>atcrowdfunding09-member-entity</artifactId><version>0.0.1-SNAPSHOT</version></dependency>
</dependencies>

7.7.2、创建接口

  • 创建远程调用接口

@FeignClient("atguigu-crowd-mysql")
public interface MySQLRemoteService {@RequestMapping("/get/memberpo/by/login/acct/remote")ResultEntity<MemberPO> getMemberPOByLoginAcctRemote(@RequestParam("loginacct") String loginacct);}

7.8、provider中实现接口

7.8.1、创建Handler

  • mysql-provider工程的Handler中,实现远程调用接口

@RestController
public class MemberProviderHandler {@Autowiredprivate MemberService memberService;@RequestMapping("/get/memberpo/by/login/acct/remote")public ResultEntity<MemberPO> getMemberPOByLoginAcctRemote(@RequestParam("loginacct") String loginacct) {try {// 1.调用本地Service完成查询MemberPO memberPO = memberService.getMemberPOByLoginAcct(loginacct);// 2.如果没有抛异常,那么就返回成功的结果return ResultEntity.successWithData(memberPO);} catch (Exception e) {e.printStackTrace();// 3.如果捕获到异常则返回失败的结果return ResultEntity.failed(e.getMessage());}}}

7.8.2、创建Service

  • Service层,实现Handler调用的方法

// 在类上使用@Transactional(readOnly = true)针对查询操作设置事务属性
@Transactional(readOnly = true)
@Service
public class MemberServiceImpl implements MemberService {@Autowiredprivate MemberPOMapper memberPOMapper;@Overridepublic MemberPO getMemberPOByLoginAcct(String loginacct) {// 1.创建Example对象MemberPOExample example = new MemberPOExample();// 2.创建Criteria对象Criteria criteria = example.createCriteria();// 3.封装查询条件criteria.andLoginacctEqualTo(loginacct);// 4.执行查询List<MemberPO> list = memberPOMapper.selectByExample(example);// 5.获取结果if (list == null || list.size() == 0) {return null;}return list.get(0);}}

7.9、测试mysql-provider

  • 访问:http://localhost:2000/get/memberpo/by/login/acct/remote?loginacct=jack

8、redis-provider工程

8.1、引入依赖

  • redis-provider工程的pom文件中引入相关依赖

    • redis starter:整合Redis
    • 需要对外暴露服务:web的依赖
    • 需要注册进Eureka服务注册中心:eureka-client的依赖
    • 实体类和工具类的依赖

<dependencies><!-- 整合Redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</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><!-- 作为客户端访问Eureka注册中心 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><!-- 为了能够使用实体类 --><dependency><groupId>com.atguigu.crowd</groupId><artifactId>atcrowdfunding09-member-entity</artifactId><version>0.0.1-SNAPSHOT</version></dependency><!-- 为了能够使用工具类 --><dependency><groupId>com.atguigu.crowd</groupId><artifactId>atcrowdfunding05-common-util</artifactId><version>0.0.1-SNAPSHOT</version></dependency>
</dependencies>

8.2、创建主启动类

@SpringBootApplication
public class CrowdMainClass {public static void main(String[] args) {SpringApplication.run(CrowdMainClass.class, args);}}

8.3、创建yml配置文件

  • 指定redis hostredis主机地址
  • 端口号使用默认的6379

server:port: 3000
spring:application:name: atguigu-crowd-redisredis:host: 192.168.152.129
eureka:client:service-url:defaultZone: http://localhost:1000/eureka

8.4、测试Redis

8.4.1、创建测试类

@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisTest {// private Logger logger = LoggerFactory.getLogger(RedisTest.class);@Autowiredprivate StringRedisTemplate redisTemplate;@Testpublic void testSet() {ValueOperations<String, String> operations = redisTemplate.opsForValue();operations.set("apple", "red");}@Testpublic void testExSet() {ValueOperations<String, String> operations = redisTemplate.opsForValue();operations.set("banana", "yellow", 5000, TimeUnit.SECONDS);}}

8.4.2、测试结果

  • 设置永不超时的key value键值对

  • 设置带超时的key value键值对

8.5、api工程中暴露接口

  • 设置永不超时的key value键值对
  • 设置带超时的key value键值对
  • 获取指定keyvalue
  • 删除指定的key

@FeignClient("atguigu-crowd-redis")
public interface RedisRemoteService {@RequestMapping("/set/redis/key/value/remote")ResultEntity<String> setRedisKeyValueRemote(@RequestParam("key") String key, @RequestParam("value") String value);@RequestMapping("/set/redis/key/value/remote/with/timeout")ResultEntity<String> setRedisKeyValueRemoteWithTimeout(@RequestParam("key") String key, @RequestParam("value") String value,@RequestParam("time") long time,@RequestParam("timeUnit") TimeUnit timeUnit);@RequestMapping("/get/redis/string/value/by/key/remote")ResultEntity<String> getRedisStringValueByKeyRemote(@RequestParam("key") String key);@RequestMapping("/remove/redis/key/remote")ResultEntity<String> removeRedisKeyRemote(@RequestParam("key") String key);}

8.6、provider中实现接口

  • redis-provider工程的Handler中,实现远程调用接口

@RestController
public class RedisHandler {@Autowiredprivate StringRedisTemplate redisTemplate;@RequestMapping("/set/redis/key/value/remote")ResultEntity<String> setRedisKeyValueRemote(@RequestParam("key") String key, @RequestParam("value") String value) {try {ValueOperations<String, String> operations = redisTemplate.opsForValue();operations.set(key, value);return ResultEntity.successWithoutData();} catch (Exception e) {e.printStackTrace();return ResultEntity.failed(e.getMessage());}}@RequestMapping("/set/redis/key/value/remote/with/timeout")ResultEntity<String> setRedisKeyValueRemoteWithTimeout(@RequestParam("key") String key, @RequestParam("value") String value,@RequestParam("time") long time,@RequestParam("timeUnit") TimeUnit timeUnit) {try {ValueOperations<String, String> operations = redisTemplate.opsForValue();operations.set(key, value, time, timeUnit);return ResultEntity.successWithoutData();} catch (Exception e) {e.printStackTrace();return ResultEntity.failed(e.getMessage());}}@RequestMapping("/get/redis/string/value/by/key/remote")ResultEntity<String> getRedisStringValueByKeyRemote(@RequestParam("key") String key) {try {ValueOperations<String, String> operations = redisTemplate.opsForValue();String value = operations.get(key);return ResultEntity.successWithData(value);} catch (Exception e) {e.printStackTrace();return ResultEntity.failed(e.getMessage());}}@RequestMapping("/remove/redis/key/remote")ResultEntity<String> removeRedisKeyRemote(@RequestParam("key") String key) {try {redisTemplate.delete(key);return ResultEntity.successWithoutData();} catch (Exception e) {e.printStackTrace();return ResultEntity.failed(e.getMessage());}}}

8.7、测试redis-provider

  • 设置永不超时的key value键值对
http://localhost:3000/set/redis/key/value/remote?key=orange&value=orange

  • 设置带超时的key value键值对:
http://localhost:3000/set/redis/key/value/remote/with/timeout?key=peach&value=pink&time=5000&timeUnit=SECONDS

  • 获取指定keyvalue
http://localhost:3000/get/redis/string/value/by/key/remote?key=orange

  • 删除指定的key
http://localhost:3000/remove/redis/key/remote?key=peach

9、auth工程

9.1、引入依赖

<dependencies><!-- 标配web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 整合thymeleaf --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><!-- eureka-client的依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><!-- api工程的依赖  --><dependency><groupId>com.atguigu.crowd</groupId><artifactId>atcrowdfunding17-member-api</artifactId><version>0.0.1-SNAPSHOT</version></dependency><!-- 热部署 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-loader</artifactId></dependency>
</dependencies>

9.2、创建主启动类

  • 启用服务注册发现功能,这样才能找到provider哟~

@EnableDiscoveryClient
@SpringBootApplication
public class CrowdMainClass {public static void main(String[] args) {SpringApplication.run(CrowdMainClass.class, args);}}

9.3、创建yml配置文件

  • 配置thymeleaf视图解析器

server:port: 4000
spring:application:name: atguigu-crowd-auththymeleaf:prefix: classpath:/templates/suffix: .html
eureka:client:service-url:defaultZone: http://localhost:1000/eureka

9.4、创建Handler

  • 访问【域名+80端口】、,则直接转发至首页

@Controller
public class PortalHandler {@RequestMapping("/")public String showPortalPage() {// 这里实际开发中需要加载数据……return "portal";}}

9.5、调整页面

9.5.1、添加静态资源

9.5.2、首页的小修小改

<!DOCTYPE html>
<html lang="zh-CN" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<base th:href="@{/}"/>
<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="css/font-awesome.min.css">
<link rel="stylesheet" href="css/carousel.css">

9.6、测试

  • 成功访问(虽然是假数据)

10、zuul工程

10.1、引入依赖

  • 需要注册进Eureka里面:添加eureka-client的依赖
  • 网关当然要添加zuul的依赖咯~

<dependencies><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>
</dependencies>

10.2、创建主启动类

  • @EnableZuulProxy启用网关功能

@EnableZuulProxy
@SpringBootApplication
public class CrowdMainClass {public static void main(String[] args) {SpringApplication.run(CrowdMainClass.class, args);}}

10.3、创建yml配置文件

  • 端口号配置为80,访问时就不需要写端口号啦~
  • ignored-services: "*":忽略微服务的真实名称
  • sensitive-headers: "*":重定向时保持原本头信息
  • service-id: atguigu-crowd-auth:访问zuul网关微服务时转接至auth微服务
  • path: /**:任意多层路径均可访问

server:port: 80
spring:application:name: atguigu-crowd-zuul
eureka:client:service-url:defaultZone: http://localhost:1000/eureka
zuul:ignored-services: "*"sensitive-headers: "*"  # 在Zuul向其他微服务重定向时保持原本头信息(请求头、响应头)routes:crowd-portal:service-id: atguigu-crowd-authpath: /**           # 这里一定要使用两个“*”号,不然“/”路径后面的多层路径将无法访问

10.4、配置域名

  • 推荐软件:SwitchHost

10.5、测试

  • Eureka中注册的微服务

  • 访问:http://www.crowd.com/

day13【前台】搭建环境相关推荐

  1. 融易宝项目管理平台前台搭建

    融易宝项目管理平台前台搭建 关注微信公众号:序辑,回复 管理前台代码 获取前端代码 一.NPM包管理 1.简介 1.1什么是NPM NPM全称Node Package Manager,是Node.js ...

  2. 搭建环境_maven: 搭建工程: ssm整合: 搭建测试:

    2019独角兽企业重金招聘Python工程师标准>>> 搭建环境_maven: 搭建工程: ssm整合: 搭建测试: 搭建环境问题解决: 转载于:https://my.oschina ...

  3. java 取绝对值_Java实现一致性哈希算法,并搭建环境测试其负载均衡特性

    实现负载均衡是后端领域一个重要的话题,一致性哈希算法是实现服务器负载均衡的方法之一,你很可能已在一些远程服务框架中使用过它.下面我们尝试一下自己实现一致性哈希算法. 一. 简述一致性哈希算法 这里不详 ...

  4. putty php环境搭建,centos7(linux)系统下php搭建环境和创建laravel项目

    laravel-企业官网-搭建环境和创建laravel项目 购买centos7云服务器,再远程连接 1. 下载putty 输入服务器账号密码远程链接yum install -y wget && ...

  5. Hyperledger fabric1.4.0搭建环境

    Hyperledger fabric1.4.0搭建环境 原创牧竹子 最后发布于2019-05-11 21:10:20 阅读数 630  收藏 展开 Hyperledger fabric1.4.0搭建环 ...

  6. java窗口代码_Java系列教程day01——java的搭建环境

    day01--搭建环境变量&HelloWorld程序 1.注意听课,不要溜号,不要睡觉,不要游戏. 2.我的联系方式: QQ:79539705 3.整理笔记.绘制思维导图.完成作业.. 一.J ...

  7. Fanout交换器-搭建环境

    我们讲一下RabbitMQ中的第三种交换器,Fanout交换器,相比上两种我们讲过的交换器,最大的特点它是以广播的模式,来做消息的传递,我们来看一下这样的需求,我这里有一个订单服务,然后还有一个短信服 ...

  8. Topic交换器-搭建环境

    我们再来看另一个交换器的使用,Topic交换器的使用,Topic交换器也称之为主题交换器,他的特点是什么呢,是根据这个规则来匹配,是一个什么样的规则呢,咱们先看这个图,这个图和上面最大的区别就是,我的 ...

  9. RaDirect交换器-搭建环境

    我们看一下RabbitMQ交换器讲解,交换器在消息队列当中,是非常重要的一个环节,所以我们要重点的讲一下,我们先回顾一下在讲Rabbit原理的时候,我们提到了一个Exchange的关键组件,那么Exc ...

最新文章

  1. c# html文本编辑器,C#实现简单文本编辑器
  2. 视觉三维重建的关键技术及实现思路汇总
  3. golang response body 多次读取
  4. 深度学习中的问题汇总(持续更新...)
  5. sed命令 学习笔记
  6. 【转】ASP.NET 2.0 - 导航(Navigation)SiteMap导航菜单关系
  7. gitmaven命令
  8. Spark:Yarn-cluster和Yarn-client区别与联系
  9. 车辆出厂信息接口_航测遥感中心“漳州核电智慧工地管理系统平台”通过出厂验收...
  10. Tomcat服务器搭建及测试教程(1),腾讯技术官发布的“神仙文档”火爆网络
  11. 向数据库插入数据时出现乱码 --设置连接数据库的编码
  12. 九度 1526:朋友圈(并查集)
  13. 在线文本比较工具-toolfk程序员在线工具网
  14. Charles进行弱网测试
  15. 从信号与系统,数字信号处理的角度看目前手头研发的蓝牙耳机
  16. 俄数学天才破解庞加莱猜想拒领百万奖金
  17. linux中reboot函数在哪,reboot()函数 Unix/Linux
  18. nrf52832 蓝牙组网_nrf52832 蓝牙开发
  19. MAC下Apktool、dex2jar、jd-gui的安装和反编译、回编译、重新签名简单使用
  20. 1055 集体照 (25 分)(详解)

热门文章

  1. install torch for arm
  2. iPhone 的续航有望加长!749 元的“磁吸充电宝”你会买吗?
  3. 软件先行的英特尔,为开发者们带来了什么?
  4. 阿里回应被列为被执行人;Linus Torvalds:我已经不是程序员;Ant Design 4.4.1 发布 | 极客头条
  5. ​搞懂微服务,从捕捉一头野猪说起
  6. 《原力计划【第二季】》第 8 周周榜揭晓!!!
  7. 如何让 PPT 像 PyeCharts 一样炫酷?
  8. 从鲁班造木鸢到智能控制,图解世界无人机发展简史
  9. 你知道该如何搭建 AI 智能问答系统吗?
  10. Python 绘图,我只用 Matplotlib