first blood

 

目录

一  开发工具推荐:idea

1.idea开发工具优势

2.idea注册码

3.初始化配置

4.插件推荐

二  springboot

1.项目来源

2.maven结构

3.启动方式

4.springboot原理

5.自定义springboot starter

 三 restful

1.什么是restful?

2. 流行原因

3.消息结构返回定义

4.springmvc改为fastjson转义数据

四 docker简单的使用

1.docker是什么

2.docker构成

3.为啥要用

4.学习方向


一  开发工具推荐:idea

1.idea开发工具优势

    idea对代码提示和补充完善更智能,单元测试更方便,完美支持springboot,和其它工具集成也很方便,并且个性化设计很强。

2.idea注册码

       http://idea.codebeta.cn,这个license是我在用的,比较稳定,其它的可以自行百度,当然可以的话建议支持正版,不建议破解,因为可能导致部分组件无法使用,这个还是蛮坑的,而且基本找不到原因。

3.初始化配置

       建议看https://blog.csdn.net/robertohuang/article/details/75042116博客,另外不足的可以自行百度,网上资料比较多。比较重要的一点是配置文件格式问题,默认是gbk,开发最好改成utf-8,防止中文乱码。

4.插件推荐

  • lombok --实体类生成工具
  • visualvm --jdk自带的一款jvm分析工具
  • Alibaba Java Coding Guidelines --阿里推出的代码规范插件
  • GsonFormat --json自动生成实体类 (Alt + S)
  • Maven Helper  -- maven树状分析,去重,去冲突神器
  • MyBatis plugin --CTRL+ALT+B快速定位到mapper和xml

 基本每个工具,框架都能找到插件,例如mybatis等等,只是我没用过,这里不做推荐。

        


二  springboot

1.项目来源

    项目可以从https://start.spring.io/获取,也可以直接从idea里面拉取,项目大概目录为:

java为代码存放目录,resources为资源目录,test单元测试用,target为打包目录

这个是人事考勤系统,是由springboot开发的单系统web项目。

2.maven结构

springboot和cloud更新速度十分快,最好经常关注下版本升级修改了什么配置,然后评估是否需要升级,现在大部分应用应该还在springboot 1.5.x版本,2.0版本是今年年初提交的,改动比较大,网上资源也比较少,所以初学者建议还是从低版本开始。

3.启动方式

    java -jar xxx.jar可以直接启动项目,同时可以指定参数运行,比如java -jar xxx.jar --server.port=80 指定端口为80运行,此时会覆盖项目配置文件,运行在80端口上

4.springboot原理

     简单的说,springboot启动是依靠xxxApplication.java中的main方法,同时关键的还有一个@SpringBootApplication注解。

@SpringBootApplication
public class ProduceLoginApplication {

    public static void main(String[] args) {
        SpringApplication.run(ProduceLoginApplication.class, args);
    }
}

@SpringBootApplication继承了@EnableAutoConfiguration注解,springboot之所以只需要简单配置就能使用的原因是它已经默认为我们写好了大量的默认配置类,当我们引入jar包的时候,EnableAutoConfiguration会自动将其默认配置注册为bean对象供我们使用。

5.自定义springboot starter

  参考自定义的阿里mq,地址为:

<dependency>
   <groupId>com.douzi.mq</groupId>
   <artifactId>spring-boot-douzi-mq</artifactId>
   <version>1.0.0</version>
</dependency>

 三 restful

1.什么是restful?

      RESTful API是一套rest风格的api,用于规范多种形式的前端和同一个后台的交互方式的协议。

      restful中每个路径代表的是一种资源,通过"/"标识层级关系,比如查询3年2班小明的成绩,那么url可以为"/score/3/2/小明",通过一层一层的关系确定资源的地址,另外可以通过"-"或"_"来标识资源比较长的资源名称,比如查询学生信息,可以表示为"/student_infomation/小明",这样比较人性化。

      通过http的请求方式代表对应的CRUD处理,协议规范get代表retrieve查询,post代表create创建,put代表update更新,delete代表delete删除请求,通过http的状态能马上知道这是一个什么类型的请求

      可具体参见http://www.runoob.com/w3cnote/restful-architecture.html介绍。

2. 流行原因

  • 日益增多的设备,比如手机,平板等各种联网电子设备增多,传统的浏览器session已不能满足需求。
  • html等前端技术的发展,行业的具体细分,越来越多的公司注重前端页面的设计,导致前端发展越来越热,前端需要从后台剥离出来,jsp技术由于需要服务器的支持等局限性正在被淘汰,现在流行的前后端分离技术,前端开发和后端开发可以互不干扰的开发, 前端甚至可以通过nodejs等服务器独立启动,后台只需要关注数据,因此这种完全的数据结构越来越流行。
  • json格式跨平台性,这种数据结构几乎支持所有平台,也是推动这种技术发展的奠基石。

3.消息结构返回定义

   我们可以选择一种方案规范消息返回结构,这套方案可以应用到各种项目中。目前有两种方案,一个是通过枚举定义消息结构返回,例如:

    success(0,"success"),
    middle(1,"请求成功但是未校验通过"),
    nohandlerfound(1014,"当前资源不存在,请检查路径"),
    unexist(1013,"服务不存在"),
    unreachable(9999,"服务异常,稍后重试"),
    systemerror(1001,"系统异常"),
    paramtererror(1002,"参数异常"),
    signfail(1003,"验签失败"),
    contenterror(1004,"support application/json only"),
    templetenotenabled(1005,"模板无效"),
    notexits(1006,"短信不存在"),
    notneedcheck(1007,"无需校验"),

还有一种是构建者设计模式,类似

return R.code(0).msg("success");

这种一连串的消息返回结构。大家是否还有更好的设计方案?

4.springmvc改为fastjson转义数据

springmvc底层默认为jaskjson转义,但是fastjson作为json转换工具,速度是最快的。所以可以改成fastjson以提高转义效率。更快的响应。需要先引入fastjson pom文件

@Configuration
public class FastJsonConfiguration implements WebMvcConfigurer {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setSerializerFeatures(
                SerializerFeature.DisableCircularReferenceDetect,  //消除对同一对象循环引用,避免进入死循环
                SerializerFeature.WriteMapNullValue,  //输出值为null的字段
                SerializerFeature.WriteNullStringAsEmpty ,//字符型如果为null,则输出""
                SerializerFeature.WriteNullBooleanAsFalse //Boolean如果为null,则输出false
        );
        fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
        converters.add(fastJsonHttpMessageConverter);
    }
}

核心代码其实为SerializerFeature对象的配置,上述只是设置了四种格式,其它的可以根据需求自己配置:

public enum SerializerFeature {
    QuoteFieldNames,
    UseSingleQuotes,
    WriteMapNullValue,
    WriteEnumUsingToString,
    WriteEnumUsingName,
    UseISO8601DateFormat,
    WriteNullListAsEmpty,
    WriteNullStringAsEmpty,
    WriteNullNumberAsZero,
    WriteNullBooleanAsFalse,
    SkipTransientField,
    SortField,
    /** @deprecated */
    @Deprecated
    WriteTabAsSpecial,
    PrettyFormat,
    WriteClassName,
    DisableCircularReferenceDetect,
    WriteSlashAsSpecial,
    BrowserCompatible,
    WriteDateUseDateFormat,
    NotWriteRootClassName,
    /** @deprecated */
    DisableCheckSpecialChar,
    BeanToArray,
    WriteNonStringKeyAsString,
    NotWriteDefaultValue,
    BrowserSecure,
    IgnoreNonFieldGetter,
    WriteNonStringValueAsString,
    IgnoreErrorGetter,
    WriteBigDecimalAsPlain,
    MapSortField;
}

四 docker简单的使用

1.docker是什么

    docker是一种容器技术,可以简单理解为虚拟机技术,但是现在可以替代虚拟机。一台物理机可能只能运行3到4个虚拟机,但是可能运行成千上万个docker容器,简单来说,docker是共享宿主的资源,将只需要用到的独立的文件单独拉出来,形成一个容器,其它的都是共享,所以比虚拟机容量小很多,虚拟机每个都是copy一份镜像,相同的文件需要运行几遍,特别费内存和磁盘。

2.docker构成

    docker三要素:镜像、容器、仓库。镜像可以理解为我们的java代码,是最基础的单元,容器好比虚拟机(jvm),容器都是在镜像的基础上运行的,容器类似千层饼的结构,是由多个镜像一层层组合的。

(此处应该有图)

仓库的话就是存放镜像的,好比svn、git仓库,国外有docker hub(类似github)、中国有阿里云等,可以直接从这些网站拉取镜像下来,然后在本机运行。

    docker三剑客:docker compose(docker多服务部署)、docker Machine(docker多环境安装)、docker Swarm(docker集群)

3.为啥要用

  1. 使用docker能避免我们在不同的服务器上安装相同的运行环境,比如我们需要迁移一个项目,或者从开发服转换到测试服,两类服务器需要安装相同的运行环境,否则各种坑,如果是分布式的环境,要安装的服务器一多,想想就头疼。docker不依赖宿主环境,只要服务器上安装了docker,镜像push上去就能运行,所以避免了踩坑。
  2. docker命令相对简单,运行服务比较方便,比如运行redis使用docker run redis 就能启动一个默认配置的redis(前提镜像依拉下来 docker pull redis)。

4.学习方向

   docker简单的命令,dockerfile书写,docker compose多服务的类似dockerfile书写。作为开发工程师,其实这个只是一个加分项,本身这个偏运维,所以大概了解,会使用已ok。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值