前言:虽然自己一直在做微服务的项目,但是对于项目构建没有一个具体的概念,也不太清楚每个配置、控件的作用,以此通过搭建一个基础框架,来学习了解。通过理论来进行实践。
目的:理论可以应付面试,实践可以感悟思想。
基础知识感悟:
搭建参考博客就行了,
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操作,里面的教程也很详细