Skip to content

Latest commit

 

History

History
159 lines (141 loc) · 9 KB

tech-stack.md

File metadata and controls

159 lines (141 loc) · 9 KB

技术栈

所用技术栈

feign

netflix方便http调用的组件,可以有本地调用效果。

  1. @FeignClient定义的接口,也会作为应用程序暴露的web接口,相当于@Controller定义的接口。在浏览器端需完全匹配的形式请求,否则不能正确响应。
  2. 客户端的负载均衡可使用@RibbonClient注解。@EnableFeignClients自带客户端负载均衡。
  3. feign接口中的参数名若未标识@RequestParam,则默认为@RequestBody。尽管方法上面定义的请求类型为get,但只要未设置@RequestParam,实际请求也会为post。
  • feign接口与接口服务需要使用注解与未使用注解要保持一致,否则会出现转换问题
  1. 使用Spring Cloud Feign作为HTTP客户端调用远程HTTP服务
  2. 关于使用feign调用异常处理参考
  • feign定义的接口中,在接口类与方法上面添加@RequestMapping,以使用组合映射。这种方式的配置,与hystrix一起使用的时候,会报requestmapping重复,因spring mvc中不能存在多个bean对应同一requestmapping,但只是定义在方法上是没问题的。
  • feign定义的接口,如果使用注解@component

docker

docker容器

  1. 查看docker所有运行的容器docker ps;根据关键字查看docker运行容器docker ps -a|grep eyd
  2. 删除镜像docker rmi [imageId];若镜像在运行则需要先删掉镜像运行的容器,docker rm [containName]
  3. 查看docker镜像 docker images
  4. 运行docker镜像,以eyd-register-center为例
  • 当前命令窗口启动,docker run -p 10021:10021 ,ctr+c则会关闭运行
  • 后台守护进程启动,docker run --name register-center -d -p 10021:10021 ip_addr:5000/eyd/eyd-register-center
  1. 查看日志
  • docker ps -a
  • docker logs -f $CONTAINER_ID #查看docker实例运行日志,即时输出
  • docker logs -f `docker ps -a|grep register-center|awk '{if($11 != "grep") {print $1}}'` #一步根据关键字查看即时输出日志,其中register-center为关键字
  1. docker rm `docker ps -a | grep Exited | awk '{print $1}'` #删除已退出的所有容器
  • 进入容器内部docker exec -it [containerid] /bin/bash
  • copy容器内部文件docker cp [containerid]:/app.jar . 参考

docker-maven-plugin

打包docker镜像的maven插件

  1. 打包镜像 mvn clean package -Dmaven.test.skip=true -U docker:build
  2. 打包镜像并上传docker私服 mvn clean package -Dmaven.test.skip=true -U docker:build -DpushImage
  3. 打包镜像并将指定tag上传docker私服 mvn clean package -Dmaven.test.skip=true -U docker:build -DpushImageTags -DdockerImageTag=latest 未验证通过
  4. others
  • set DOCKER_HOST=tcp://ip_addr:2375
  1. problem
  • Dockfile中添加的jar包会带上版本,当应用程序版本进行变更的时候,也需要修改Dockfile文件
  1. 相关资料

markdown

  1. 相关资料

spring boot admin

  1. 相关资料

spring cloud config

  1. 相关资料
  1. 问题点
  • 高可用,集群(conifg-server引入eureka注册服务,config-client则需开启通过服务发现的方式访问conifg-server
  • 配置文件修改后,应用集群的自动化更新

spring boot

  • 国际化消息配置,与hibernate validation配合使用,保存时可对常见的验证规则定制相应的友好提示。
  • Spring Boot国际化(i18n)
  • 。。。。

etcd

kubernetes

相关资料 Kubernetes初探:原理及实践应用 一个适合 Kubernetes 的最佳网络互联方案

  • 更改kubernetes配置后,启动应用程序
cd /root/app_deploy
sh app_deploy_st.sh -h
sh app_deploy_st.sh -p app_name -v 3.0.1.P1
  • 测试环境的运行情况
kubectl get pod --namespace=st-eyd -o wide
kubectl get pod --namespace=kube-system -o wide

swagger

All Swagger Resources(groups) http://localhost:8080/springfox/swagger-resources
Swagger UI endpoint: http://localhost:8080/springfox/swagger-ui.html
Swagger docs endpoint: http://localhost:8080/springfox/v2/api-docs

zipkin

技术选型

gradle

  • 常用命令
gradle build -x test --stacktrace
grdle publish

hibernate

  • Hibernate session FlushMode有五种属性:
1、NEVEL:已经废弃了,被MANUAL取代了
2 MANUAL:
如果FlushMode是MANUAL或NEVEL,在操作过程中hibernate会将事务设置为readonly,所以在Spring与Hibernate集成后进行增加、删除或修改操作过程中会出现如下错误
org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER) - turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition;
解决办法:配置事务,spring会读取事务中的各种配置来覆盖hibernate的session中的FlushMode;
3 AUTO
设置成auto之后,当程序进行查询、提交事务或者调用session.flush()的时候,都会使缓存和数据库进行同步,也就是刷新数据库。
4 COMMIT
提交事务或者session.flush()时,刷新数据库;查询不刷新
5 ALWAYS:
每次进行查询、提交事务、session.flush()的时候都会刷数据库
ALWAYS和AUTO的区别:当hibernate缓存中的对象被改动之后,会被标记为脏数据(即与数据库不同步了)。当 session设置为FlushMode.AUTO时,hibernate在进行查询的时候会判断缓存中的数据是否为脏数据,是则刷数据库,不是则不刷, 而always是直接刷新,不进行任何判断。很显然auto比always要高效得多。

JPA的FlushModeType只有两种:
1、COMMIT:仅当提交事务时才能进行刷新
2、AUTO:(默认)在执行查询时进行刷新
  • 对于程序中写的update语句,并没有及时输出到控制台,这和Hibernate session的flushMode有关,参考上面
AUTO-只有在发生下次查询且只针对当前实体类的查询的时候才会flush到db,这时候控制台才会打印出sql
COMMIT-只有在事务提交的时候才提交sql语句到db