2018.06.06
工作内容:
1.尝试解决前端开发手册,开发新功能,已经全局安装了gulp但是不能启动问题;尝试本地安装,重新全局安装,未解决;卸载gulp,重新安装gulp,依然不能启动,未解决;
2.尝试搭建后端开发手册,测试与集成;按照流程搭建,能够通过http://localhost:8000/访问到正常界面;但是manager-service服务一直连不上数据库,启动不成功;重新拉取镜像,重新初始化数据库,能启动所有服务;但是访问http://localhost:8000/出现 EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.未解决;
3.学习了解k8s、docker、后端开发流程,git常用指令;
4.参与平台培训。
学习内容:
1.k8s组件
是基于容器技术的分布式架构领先方案,是容器集群管理系统。
1)master是集群管理节点,负责管理集群;
2)Node是集群架构中运行pod的服务节点;
3)Pod 运行于Node节点上,若干相关容器的组合;
4)Replication Controller管理Pod的副本,保证集群中存在指定数量的Pod副本;
5)Service定义了Pod的逻辑集合和访问策略;
6)Label在k8s中任意对象都通过Lable进行标识;
2.Docker
相关概念;
1)镜像(Image),镜像是静态的/可以被用户分享的文件,只能pull或者push;
2)容器(Container),可以理解为镜像的动态状态;
3)仓库(Repository),Docker中的仓库很像git的代码仓库。
基本操作:查看镜像 docker images 获取镜像 docker pull 启动容器 docker-compose up,
从docker进入mysql docker exec -it mysql /bin/bash,
3.后端开发流程熟悉
1)infa层
DO类--》对应数据库中的具体类
mapper--》mapper接口类和mapper.xml
2)domain层
entity类--》对应DO类
convertor类--》用于E。DTO。DO三者之间转换
Repository--》对数据库进行操作,有对应接口和实现类
service--》进行业务操作
3)app层 应用层
4)api层 展现层
DTO--》封装用户请求
controll--》是对一个具体的DTO资源进行处理
2018.06.07
工作内容:
1.前端开发手册--》开发新功能--》开发新模块,按照流程走,不能启动gulp,切换nodejs版本,重新全局安装gulp不能解决;咨询前端同事,demo文件夹为空,加入相关文件,gulp能够运行。
2.后端开发手册--》集成与测试,服务启动报错,删除现有镜像,新建文件夹重新拉取;所有服务都能启动成功,但是不能访问loaclhost:8000,logs发现不能启动manager-service服务;改为从github上下载项目本地运行,启动服务成功;但是不能在eureka上显示,给启动类加上@EnableEurekaClient,成功显示;但是不能访问http://localhost:8963/swagger-ui.html,重新初始化数据库,配置路由,访问成功。
学习内容:spring boot
1.Profile,在不同环境下使用不同配置@Profile("dev"/"prod")
2.事件(Application Event)为Bean与Bean之间的消息传递提供了支持;步骤,定义事件,定义监听,容器发布
3.多线程,实现AsyncConfigurer接口,获取一个基于线程池的TaskExecutor,@EnableAsync开启对异步的支持,@Async声明异步
4.this 1)表示构造函数传递,this(a,b) 2)在类的非static成员内部使用,表示这个类本身或者对象类型
super 1)调用父类构造方法 2)调用父类的protected方法
5.spring boot配置文件 https://blog.csdn.net/lpfsuperman/article/details/78287265
2018.06.08
工作内容:
1.跟据文档搭建前端开发手册--》开发新功能,需要改动的小细节已经发到群里;
2.重新搭建后端开发手册--》测试与集成部分,能启动所有服务,手动配置路由,能进入到http://localhost:8963/swagger-ui.html页面。
学习内容:
1.spring-retry是针请求超时情况采取一下重试操作
1)添加maven依赖 org.springframework.retry 2)在启动项添加重试配置 @EnableRetry 3)@Retryable 标注此注解的方法在发生异常时会进行重试
2.zuul主要功能是路由转发和过滤器;路由功能是将外部请求转发到具体的微服务上;过滤器是对请求处理的过程进行干预;@EnableZuulProxy开启服务
3.Eureka服务注册发现
server
1)添加依赖 <artifactId>spring-cloud-starter-eureka-server</artifactId>
2)application.yml配置
security:
basic:
enabled: true #开启认证
eureka:
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://user:password@localhost:8761/eureka
3)主程序入口添加 @EnableEurekaServer//开启Eureka Server
Clients
同上,application.yml配置:
eureka:
client:
serviceUrl:
defaultZone: http://user:123456@localhost:8761/eureka #注册 中心已经开启认证
链接:https://www.cnblogs.com/brant/p/6298342.html
4.bootstrap与application
1)bootstrap.yml先加载 application后加载
2)bootstrap.yml 可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。
application.yml 可以用来定义应用级别的
5.@Order控制配置类的加载顺序
2018.06.11
学习内容:
1.spring基础学习
Spring IOC容器,Spring BaenFactory/ApplicationContext,Spring依赖注入,基于构造器注入和set方法注入/自动装配等。
2.学习springboot+mybatis,用注解方式实现,能够正常访问;用配置文件方式,报错org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.scptest.springbootmybatisdemo1.mapper.UserMapper.getUserById,修改配置文件,修改mapper文件,未解决;修改application.yml文件,解决。
2018.06.12
1.Docker for windows一直启动不成功;
报错:[Docker for Windows error: “Hardware assisted virtualization and data execution protection must be enabled in the BIOS” [closed]]
https://stackoverflow.com/questions/39684974/docker-for-windows-error-hardware-assisted-virtualization-and-data-execution-p,解决方法都尝试了一遍,未解决;win10
一直不能开启hyper-v虚拟机,准备重新升级系统。
2.访问404错误
将@Countller改为@RestController或者加上@ResponseBody;
1)@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML
2)@RestController是@ResponseBody + @Controller合体,当你在这个controller中方法只是想返回一个页面时,就不能用@RestController,因为它会把你的返回值当作数据返回,而不是页面名字,所以这时候就只能用@Controller。
3.Establishing SSL connection without server's identity verification
解决:在mysql连接上加上?&useSSL=true&useUnicode=true&characterEncoding=utf8
4.git checkout master
error: pathspec 'master' did not match any file(s) known to git.
解决:git checkout -b master
https://blog.csdn.net/wankui/article/details/53328369
5.jmeter学习
1)status 415错误
为该次请求修改请求头里的 Content-Type ,修正为 application/json;charset=UTF-8
2)status 401错误
在HTTP管理头添加对应的Jwt_Token。
2018.06.13
用jmeter对gilab-service进行测试;
1)一直status 415错误,即使添加了Content-Type = application/json,删掉http管理,重新添加或者删除Content-Type重新添加;
2)status 403或者其他,都是参数未传递正确。
2018.06.14
1.git解决分支冲突,两个分支都对同一个文件进行了提交,对这两个分支进行合并会失败,手动更改进行合并;分支合并时加上--no-ff 禁用Fast forward模式,可以从历史上看出分支信息。
2、@ApiOperation不是spring自带的注解是swagger里的
@ApiOperation(value = “接口说明”, httpMethod = “接口请求方式”, response = “接口返回参数类型”, notes = “接口发布说明”;
@ApiParam(required = “是否必须参数”, name = “参数名称”, value = “参数具体描述”)
3、地址①http://localhost:8989/SSSP/emps?pageNo=2
地址②http://localhost:8989/SSSP/emp/7
如果想获取地址①中的 pageNo的值 ‘2’ ,则使用 @RequestParam ,
如果想获取地址②中的 emp/7 中的 ‘7 ’ 则使用 @PathVariable
4、@RequestBody 注解则是将 HTTP 请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象。
5.Java 8中的[Optional<T>]以包含非空值的容器对象,在 [Stream API]中很多地方也都使用到了Optional。
1)Optional<SomeType> someValue = someMethod();
if (someValue.isPresent()) { // check
someValue.get().someOtherMethod(); // retrieve and call
}
2)orElseThrow如果有值则将其返回,否则抛出supplier接口创建的异常
3)map如果返回值不为null,则创建包含mapping返回值的Optional作为map方法返回值,否则返回空Optional
4)ofNullable 指定的值创建一个Optional,如果指定的值为null,则返回一个空的Optional
6.java Patter.matches https://www.cnblogs.com/ggjucheng/p/3423731.html
7.projectDO.getStatusCode().is2xxSuccessful()
1)ResponseEntity<T>是Spring对HTTP请求响应的封装,包括了几个重要的元素,如响应码、contentType、contentLength、响应消息体等;
2)getStatusCode()方法取得HttpStatus对象;getBody();getHeaders();等
3)is2xxSuccessful();判断状态吗是否是2开头
https://blog.csdn.net/u012702547/article/details/77917939
8.Class<T>以及Class<?>的理解
Class<T>在实例化的时候,T要替换成具体类
Class<?>它是个通配泛型,?可以代表任何类型
9.lambda () -> 5 不需要参数,返回值为 5
2018.06.19
1、给所有api都加上对应的角色;
2、IDEA中pom.xml报错project上Failed to read artifact descriptor for
1)去库文件夹中查询对应的jar文件,删除文件,重新下载;
2)在m2文件夹下放入setting.xml文件,清理项目重新加载;
2018.06.20-2018.06-22
1、从业务角度测试所有api角色是否添加正确;
2、mvn pacakge项目报错,找不到指定的jar文件,spring-cloud和spring-boot版本要配套,从官网或者对应版本,解决;
3、搭建eureka,eureka-sever能够正常启动;但是eureka-client不能注册到server,一直报错,There was a problem with the instance info replicator com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server.尝试更换spring-boot和cloud版本,未解决。
4、ZooKeeper典型应用场景
ZooKeeper 是一个高可用的分布式数据管理与协调框架。基于对ZAB算法的实现,该框架能够很好地保证分布式环境中数据的一致性。也是基于这样的特性,使得 ZooKeeper 成为了解决分布式一致性问题的利器。
2018.06.25
1、优化开发(DEV)、测试(QA)、运维(OPS)的流程,开发运维一体化,通过高度自动化工具与流程来使得软件构建、测试、发布更加快捷、频繁和可靠。
里面两个核心点是:持续集成与持续交付
1)持续集成:
CI是一种将被测代码频繁集成到项目稳定分支的做法。所谓的”被测代码”,指的是单独分支上开发的功能,因此这部分的代码会被测试然后集成在主线上。
持续集成是指软件个人研发的部分向软件整体部分交付,频繁进行集成以便更快地发现其中的错误。
2)持续交付:
持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。持续交付优先于整个产品生命周期的软件部署,建立在高水平自动化持续集成之上。
3)持续部署:
持续部署是指当交付的代码通过评审之后,自动部署到生产环境中。持续部署是持续交付的最高阶段。这意味着,所有通过了一系列的自动化测试的改动都将自动部署到生产环境。
4)“开发人员提交代码,持续集成服务器获取代码,执行单元测试,根据测试结果决定是否部署到预演环境,如果成功部署到预演环境,进行整体验收测试,如果测试通过,自动部署到产品环境,全程自动化高效运转。”
https://www.cnblogs.com/zhuwenlubin/p/5888498.html
2、1)Optional.of(T value)
,该方法通过一个非 null
的 value 来构造一个 Optional
,返回的 Optional
包含了 value 这个值。对于该方法,传入的参数一定不能为 null
,否则便会抛出 NullPointerException
。
2)Optional.ofNullable(T value)
,该方法和 of
方法的区别在于,传入的参数可以为 null
—— 但是前面 javadoc 不是说 Optional
只能包含非 null
值吗?我们可以看看 ofNullable
方法的源码:
原来该方法会判断传入的参数是否为 null
,如果为 null
的话,返回的就是 Optional.empty()
。
3)Optional.empty()
,该方法用来构造一个空的 Optional
,即该 Optional
中不包含值 —— 其实底层实现还是 如果 Optional
中的 value 为 null
则该 Optional
为不包含值的状态,然后在 API 层面将 Optional
表现的不能包含 null
值,使得 Optional
只存在 包含值 和 不包含值 两种状态。
3.matches() 方法用于检测字符串是否匹配给定的正则表达式。
调用此方法的 str.matches(regex) 形式与以下表达式产生的结果完全相同:
Pattern.matches(regex, str)
4.一个接口有两个实现类,
1) @Resource(name = "manImpl")//注意是manImpl不是ManImpl,因为使用@Service,容器为我们创建bean时默认类名首字母小写
2)@Autowired @Qualifier("manImpl")
5.Mybatis动态SQL Parameter 'name' not found. Available parameters are [arg1, arg0, param1, param2]
1)将语句中的具体参数名称改为param1,param2即可。
- 采用map传递参数parameterType="Map"