美文网首页
项目框架基础架构

项目框架基础架构

作者: Mr_Gao_ | 来源:发表于2018-07-26 15:22 被阅读0次

    一、项目介绍

    • 元数据系统管理二期,项目代号xy。
    • 项目接口测试地址:http://192.168.x.xx:8088/xy/swagger-ui.html
    • 项目前端页面地址:http://192.168.x.xx:8080

    二、软件架构

    本项目提供后台接口,不提供前端页面显示效果。

    基础架构:

    • Maven 构建工具
    • SpringBoot 微框架
    • RestfulApi 风格编程
    • Mybatis 持久层框架
    • Mybatis-Plus, 是Mybatis的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
    • Swagger2,是一款RESTFUL接口的文档在线自动生成+功能测试功能软件。
    • Redis 缓存数据库
    • JWT(JSON WEB Token),是一种基于JSON的、用于在网络上声明某种主张的令牌(token)。
    • Lombok,可以减少很多重复代码的书写。比如说getter/setter/toString等方法的编写。
    • Druid,是阿里巴巴开源平台上一个数据库连接池实现,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池。

    三、开发环境

    1. 项目结构


      image.png
    1. AOP自动记录用户操作日志

    切面类 com.kingbase.xy.config.AopAspect

     * aop切面类
     *
     * 自动记录系统增删改查操作日志
     *
     * @Dictionary
     * 可以根据自定义注解自动匹配返回值中的字典值
     * 
     * @ColumnMapping
     * 可以根据自定义注解自动替换返回值中的内容
     * 例如数据库存储用户ID,返回结果中可以自动转成用户Name
     *
     *
     *
     * 详见AopAspect代码
    
    1. 通用增删改查使用示例
    /**
     * 系统注册表-前端控制器
     * @author ghy
     * @date 2018-06-19
     */
    @Api(description= "系统注册表-前端控制器")
    @RestController
    @RequestMapping("/system")
    public class SystemController extends BaseController<System,SystemDto> {
    //此类继承BaseController后就自动支持增删改查功能,具体实现详见BaseController
    //System对象是数据库T_SYSTEM对应实体类
    //SystemDto对象是和页面交互用的专属对象,即接收页面传递的参数使用DTO对象,向页面传递数据时也要用DTO对象
    }
    
    1. 业务异常处理
    
    /**
     * 自定义业务异常枚举类
     * @author ghy
     */
    public enum ExceptionEnum {
    
        TWO_PASSWORD_UNEQUAL(10001, "两次输入的密码不同,请重新输入。"),
        INCORRECT_CREDENTIALS(10002, "用户名密码不匹配,请重新输入。"),
        ACCOUNT_EXIST(10003, "用户已存在,请直接登录。");
    
        //其余代码省略
    }
    
    
    可以根据实际业务情况throw异常,例注册用户时两次输入密码不同即抛出异常
    throw ExceptionEnum.TWO_PASSWORD_UNEQUAL.getEx();
    
    
    1. Lombok常用注解
    @Getter
    该注解使用在类上,提供get方法。
    
    @Setter
    该注解使用在类上,提供set方法。
    
    @Data
    该注解使用在类上,该注解会提供getter、setter、equals、canEqual、 * hashCode、toString方法。
    
    @Accessors(chain = true)
    该注解使用在类上,该注解使类支持链式编码,例         
    SystemLog log = new SystemLog();
        log.setIp(ip)
            .setUserId(ConstantsUtil.USER_ID)
            .setMethodType(type)
            .setMethodAttr(attr!=null && attr.length()>8000?"":attr)
            .setMethodDesc(methodDesc)
            .setMethodName(methodName)
            .setModelName(classDesc)
            .setMethodUrl(uri)
            .setOperTime(new Date());
    
    @AllArgsConstructor
    该注解使用在类上,该注解提供一个全参数的构造方法,默认不提供无参构造。 
    
    @NoArgsConstructor
    该注解使用在类上,该注解提供一个无参构造
    
    @Cleanup
    该注解使用在属性前,该注解是用来保证分配的资源被释放,自动调用close()方法。
    
    @Synchronized
    该注解使用在方法上,给方法加上同步锁。
    
    Log日志注解
    @CommonsLog
    private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);
    @JBossLog
    private static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(LogExample.class);
    @Log
    private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());
    @Log4j
    private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class);
    @Log4j2
    private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
    @Slf4j
    private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
    @XSlf4j
    private static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);
    
    仅列出常用Lombok常用注解,其余感兴趣自己学习。
    

    四、部署环境

    环境要求:jdk1.8+

    maven可以将springboot程序打包成jar包或war包

    jar包

    <groupId>com.kingbase.xy</groupId>
    <artifactId>metadata</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    

    war包

    <groupId>com.kingbase.xy</groupId>
    <artifactId>metadata</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    
    • jar包程序运行命令 java -jar 包名
    • war包 放在Tomcat webapps下启动Tomcat即可

    五、IDEA插件安装

    工欲善其事必先利其器

    1. IDEA设置自动引入包资源路径和自动去掉无用的import


      image.png
    2. IDEA安装jrebel热部署插件,修改代码自动编译,增加开发效率


      image.png
    1. IDEA安装lombok插件,开发工具必须装lombok插件否则编译不通过
      同上搜索Lombok plugin
    1. IDEA安装阿里巴巴Java编码指南插件支持
      同上搜索Alibaba Java Coding Guidelines

    常用校验注解

    空检查
    @Null       验证对象是否为null
    @NotNull      验证对象是否不为null, 无法查检长度为0的字符串
    @NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
    @NotEmpty 检查约束元素是否为NULL或者是EMPTY.
    
    Booelan检查
    @AssertTrue     验证 Boolean 对象是否为 true  
    @AssertFalse    验证 Boolean 对象是否为 false  
    
    长度检查
    @Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内  
    @Length(min=, max=) 
    验证字符串的长度是否在给定的范围之内,包含两端
    
    日期检查
    @Past        验证 Date 和 Calendar 对象是否在当前时间之前  
    @Future     验证 Date 和 Calendar 对象是否在当前时间之后  
    @Pattern    验证 String 对象是否符合正则表达式的规则
    
    数值检查:建议使用在Stirng,Integer类型,不建议使用在int类型上,因为表单值为“”时无法转换为int,但可以转换为Stirng为"",Integer为null
    @Min            验证 Number 和 String 对象是否大等于指定的值  
    @Max            验证 Number 和 String 对象是否小等于指定的值  
    @DecimalMax 被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度
    @DecimalMin 被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度
    @Digits     验证 Number 和 String 的构成是否合法  
    @Digits(integer=,fraction=) 验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。
    
    @Range(min=, max=) Checks whether the annotated value lies between (inclusive) the specified minimum and maximum.
    @Range(min=10000,max=50000,message="range.bean.wage")
    private BigDecimal wage;
    @Valid递归的对关联对象进行校验, 如果关联对象是个集合或者数组,那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验.(是否进行递归验证)
    @CreditCardNumber信用卡验证
    @Email 验证是否是邮件地址,如果为null,不进行验证,算通过验证。
    @ScriptAssert(lang= ,script=, alias=)
    @URL(protocol=,host=, port=,regexp=, flags=)
    

    相关文章

      网友评论

          本文标题:项目框架基础架构

          本文链接:https://www.haomeiwen.com/subject/zvqbmftx.html