day13【前台】搭建环境
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 Project
,parent
工程打包方式为pom
- 其他工程:在
parent
下创建Maven Module
,打包方式均为jar
(SpringBoot
打包方式选择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、实体类的细分
VO
:View Object
视图对象 ,用于与浏览器页面打交道- 用途
1
: 接收浏览器发送过来的数据 - 用途
2
: 把数据发送给浏览器去显示
- 用途
PO
:Persistent 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()
方法@ToString
:toString()
方法@NoArgsConstructor
:无参构造器@AllArgsConstructor
:全部字段都包括的构造器@EqualsAndHashCode
:equals
和hashCode
方法@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 host
:redis
主机地址 - 端口号使用默认的
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
键值对 - 获取指定
key
的value
- 删除指定的
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
- 获取指定
key
的value
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【前台】搭建环境相关推荐
- 融易宝项目管理平台前台搭建
融易宝项目管理平台前台搭建 关注微信公众号:序辑,回复 管理前台代码 获取前端代码 一.NPM包管理 1.简介 1.1什么是NPM NPM全称Node Package Manager,是Node.js ...
- 搭建环境_maven: 搭建工程: ssm整合: 搭建测试:
2019独角兽企业重金招聘Python工程师标准>>> 搭建环境_maven: 搭建工程: ssm整合: 搭建测试: 搭建环境问题解决: 转载于:https://my.oschina ...
- java 取绝对值_Java实现一致性哈希算法,并搭建环境测试其负载均衡特性
实现负载均衡是后端领域一个重要的话题,一致性哈希算法是实现服务器负载均衡的方法之一,你很可能已在一些远程服务框架中使用过它.下面我们尝试一下自己实现一致性哈希算法. 一. 简述一致性哈希算法 这里不详 ...
- putty php环境搭建,centos7(linux)系统下php搭建环境和创建laravel项目
laravel-企业官网-搭建环境和创建laravel项目 购买centos7云服务器,再远程连接 1. 下载putty 输入服务器账号密码远程链接yum install -y wget && ...
- Hyperledger fabric1.4.0搭建环境
Hyperledger fabric1.4.0搭建环境 原创牧竹子 最后发布于2019-05-11 21:10:20 阅读数 630 收藏 展开 Hyperledger fabric1.4.0搭建环 ...
- java窗口代码_Java系列教程day01——java的搭建环境
day01--搭建环境变量&HelloWorld程序 1.注意听课,不要溜号,不要睡觉,不要游戏. 2.我的联系方式: QQ:79539705 3.整理笔记.绘制思维导图.完成作业.. 一.J ...
- Fanout交换器-搭建环境
我们讲一下RabbitMQ中的第三种交换器,Fanout交换器,相比上两种我们讲过的交换器,最大的特点它是以广播的模式,来做消息的传递,我们来看一下这样的需求,我这里有一个订单服务,然后还有一个短信服 ...
- Topic交换器-搭建环境
我们再来看另一个交换器的使用,Topic交换器的使用,Topic交换器也称之为主题交换器,他的特点是什么呢,是根据这个规则来匹配,是一个什么样的规则呢,咱们先看这个图,这个图和上面最大的区别就是,我的 ...
- RaDirect交换器-搭建环境
我们看一下RabbitMQ交换器讲解,交换器在消息队列当中,是非常重要的一个环节,所以我们要重点的讲一下,我们先回顾一下在讲Rabbit原理的时候,我们提到了一个Exchange的关键组件,那么Exc ...
最新文章
- c# html文本编辑器,C#实现简单文本编辑器
- 视觉三维重建的关键技术及实现思路汇总
- golang response body 多次读取
- 深度学习中的问题汇总(持续更新...)
- sed命令 学习笔记
- 【转】ASP.NET 2.0 - 导航(Navigation)SiteMap导航菜单关系
- gitmaven命令
- Spark:Yarn-cluster和Yarn-client区别与联系
- 车辆出厂信息接口_航测遥感中心“漳州核电智慧工地管理系统平台”通过出厂验收...
- Tomcat服务器搭建及测试教程(1),腾讯技术官发布的“神仙文档”火爆网络
- 向数据库插入数据时出现乱码 --设置连接数据库的编码
- 九度 1526:朋友圈(并查集)
- 在线文本比较工具-toolfk程序员在线工具网
- Charles进行弱网测试
- 从信号与系统,数字信号处理的角度看目前手头研发的蓝牙耳机
- 俄数学天才破解庞加莱猜想拒领百万奖金
- linux中reboot函数在哪,reboot()函数 Unix/Linux
- nrf52832 蓝牙组网_nrf52832 蓝牙开发
- MAC下Apktool、dex2jar、jd-gui的安装和反编译、回编译、重新签名简单使用
- 1055 集体照 (25 分)(详解)
热门文章
- install torch for arm
- iPhone 的续航有望加长!749 元的“磁吸充电宝”你会买吗?
- 软件先行的英特尔,为开发者们带来了什么?
- 阿里回应被列为被执行人;Linus Torvalds:我已经不是程序员;Ant Design 4.4.1 发布 | 极客头条
- ​搞懂微服务,从捕捉一头野猪说起
- 《原力计划【第二季】》第 8 周周榜揭晓!!!
- 如何让 PPT 像 PyeCharts 一样炫酷?
- 从鲁班造木鸢到智能控制,图解世界无人机发展简史
- 你知道该如何搭建 AI 智能问答系统吗?
- Python 绘图,我只用 Matplotlib