当前位置: 代码迷 >> 综合 >> 一、微服务(zuul+swagger+aop)+Vue项目构建
  详细解决方案

一、微服务(zuul+swagger+aop)+Vue项目构建

热度:25   发布时间:2023-12-24 05:17:08.0

前言:虽然自己一直在做微服务的项目,但是对于项目构建没有一个具体的概念,也不太清楚每个配置、控件的作用,以此通过搭建一个基础框架,来学习了解。通过理论来进行实践。

目的:理论可以应付面试,实践可以感悟思想。

基础知识感悟:

搭建参考博客就行了,

Idea 创建 SpringCloud 项目 - 程序员大本营

搭建SpringCloud项目,并实现自动化部署_Royi的博客-CSDN博客_搭建springcloud项目

【springcloud】简单创建一个springcloud项目 - xiaostudy - 博客园

我想要的是eureka+zuul的微服务,就简单的两个服务:

1.首先我在父pom引入用boot的东西,这样很多东西都直接引入了,其中spring-boot-starter-web就解决版本问题了,但是在子pom又造成版本spring-cloud.version不对,改成Greenwich.RELEASE

2.父级的dependencies是所有子项目都会引入的包,加dependencyManagement,变成了私有的,要优雅。

    <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.2.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent>

3.在子pom的引入中,使用父pom的配置,意思就是用父pom

   <parent><groupId>org.hundsun</groupId><artifactId>cloudsample</artifactId><version>1.0-SNAPSHOT</version><relativePath/> <!-- lookup parent from repository --></parent>

4.正常搞zuul就得了,很多东西总是出错才能知道哪里自己没有理解,但是下次还是会忘记,因为不经常做,所以呢这种的要记录

5.之后新建了一个公共模块,需要在使用到他的模块引入依赖即可,注意启动类

EnableFeignClients这里,写扫描那个公共的类
(basePackages = "com.hundsun.demo_commons.feign")

6.之后配置了个swagger,配置完了发现无法访问,其实不必奇怪,有些博客写的是boot的,微服务得加上模块路由,另外有个404的问题,需要给他加个过滤器允许。

不过留下了个问题:

正常的配置完了swagger,访问如下:我在zuul加了servlet: context-path:/zuul,别的服务没有配置

普通:http://localhost:1013/swagger-ui.html(其他服务没有配置别名,不需要加)

zuul:http://localhost:1020/zuul/swagger-ui.html(我在zuul配置了servlet: context-path:/zuul,别的服务没有配置),访问的时候不用配置各服务的名字,都是默认的,

swagger中在zuul请求方式中,就不能访问到各个模块的,因为他不能自动给我加上服务名路由:/oneserve,他加的是服务的原名称,我不知道为啥不加别名,要是加上别名就可以,多启动几次又可以了

但是访问方法的时候,普通访问localhost:1014/testtwocon/getverygood,就好像端口代表了服务。

zuul访问localhost:1020/zuul/serviceTwo/testtwocon/getverygood,或者localhost:1020/zuul/service-two/testtwocon/getverygood

zuul访问需要加上服务名,应该是在zuul路由配置的原因,但是swagger为啥不给加呢。。

加入自定义注解,用于记录操作

//意思是什么时候失效,现在运行成class时还会存在的
@Retention(RetentionPolicy.RUNTIME)
//影响范围
@Target({ElementType.METHOD})
//没啥用,生成javadoc文档的时候是否存在这个注解
@Documented
public @interface LogAnnotation {//模块名称String moudleName() default "";//操作内容String option() default "";
}

定义切面,以及切面的操作

@Aspect
@Component
public class LogInterceptor {/*** 定义在哪切入,现在意思是在写了这个注解的地方切入*/@Pointcut("@annotation(com.hundsun.demo_commons.annotation.LogAnnotation)")public void userManagerPointcut(){}//定义切入之后干啥@After("userManagerPointcut()")public void afterLog(JoinPoint joinPoint) throws NoSuchMethodException {//用的最多通知的签名Signature signature = joinPoint.getSignature();MethodSignature msg=(MethodSignature) signature;Object target = joinPoint.getTarget();//获取注解标注的方法Method method = target.getClass().getMethod(msg.getName(), msg.getParameterTypes());//通过方法获取到自定义的注解LogAnnotation annotation = method.getAnnotation(LogAnnotation.class);//记录日志 看实际情况,日志存表入库,本来这里是对数据库的操作DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println(format.format(new Date())+ "  " + annotation.moudleName() + "  " + annotation.option());}
}

怎样都切不到,我又加了依赖啥的,这里是共同部分写的,用哪种方式都不能切入

最后在子模块写了切面,怎么切都能入

git安装以及连接远程仓库,参考地址:

Gitee码云托管中心注册以及git安装使用 - 咸菜缸缸 - 博客园

如何解决error: failed to push some refs to ‘https://gitee.com/_寒雨如鸦-CSDN博客

还可以看一下gitee的git操作,里面的教程也很详细