• 关于maven工程结构的一点建议

    有人喜欢谈论各种底层或者炫技的东西,我个人更倾向于先做好工程结构和代码规范。绝大部分情况下,我们是达不到语言或者系统的性能瓶颈的(大厂的系统除外),多数情况下,系统慢的原因就是一个,代码写的烂! 阿里巴巴推出的《阿里巴巴java开发手册》,很具有指导意义,大部分情况下,按照规范就可以很大程度上提高代码的可读性和规范性。但是,当遇到复杂业务的项目的时候,还是稍显不足,需要再细化一下。 在Java的项目中,无论是基于maven 还是gradle做的依赖管理,工程结构都是相似的。结合《阿里巴巴java开发手册》基本还是分为controller,service,manager,dao 相对于以前的三层结构,多了一个manager层,文档上说的是作为业务下沉,以及第三方调用。这么一来,manager层就变成了整个项目中最重的一层。我们主要也是对manager的细化。 1.出于对项目发展的不确定性,我...
    • 0
    • 61
    • 0
    • 2019-10-09
  • 如何实现下载

    前言 我们一般在浏览器看到的下载功能,基本是点击按钮就会触发浏览器的下载功能,将文件下载在本地。当作为码农的我们接到要求实现一个下载功能,我们该如何实现呢? 很多时候前端接收到下载需求,一般只要告诉对接的后端,后端处理就好了, 那么后端是如何处理的呢? 最近身边同事遇到文件无法下载的问题,在帮忙解决的时候发现, 前后端两位竟然都不知道该如何处理,在解决问题的同时顺便整理一波。 文件下载实现方式 1.a标签使用download 下载内容 后端直接提供url的文件 使用方式: 直接 <a href="path" download="filename">文件下载</a> 或者通过js触发,创建a标签执行下载 注意事项: 下载资源必须同源,无法跨域,这块被坑了很久,网上搜的中文资料都没有提及到这块,跨域的使用属性只会打开图片,在标准文献上才有提示明确提示 同时存在兼容性,只能兼容chrome、fi...
    • 1
    • 14
    • 1
    • 2019-10-05
  • 解决babel-node运行sequelize的报错问题

    在使用babel-node运行sequelize项目,执行create的时候,会报如下错误 TypeError: Class constructor Model cannot be invoked without 'new' 这个问题,找了很久没找到解决方案,暂时的处理方法,就是把es6写法改成define的方式。 比如 class TestUser extends Sequelize.Model{ } TestUser.init({ id: { type: Sequelize.INTEGER, allowNull: false, primaryKey: true, autoIncrement: true }, title: { type: Sequelize.STRING } ...
    • 0
    • 17
    • 0
    • 2019-09-28
  • java bean 转换工具orika

    在java项目中,由于业务场景需要,我们经常会需要做bean的转换。 最基本的写法是get/set去对每个属性赋值,但是,更多的时候,bean里面的属性比较多,如果每次都这么手动写,工作量毕竟大,而且也不易维护。 apache,和spring都有BeanUtils,但是是基于反射的,性能较差。当然也有性能高的,比如BeanCopier,但是只能用于属性名一样的两个bean。有没有性能比较好,适用性也比较好的呢? orika可以满足。 1.jar包 <dependency> <groupId>ma.glasnost.orika</groupId> <artifactId>orika-core</artifactId> <version>1.5.4</version> </dependency> 2.创建映射工厂 MapperFactory mapperFactory...
    • 0
    • 22
    • 0
    • 2019-09-28
  • 巨坑Springboot打的jar其他项目无法引用里的类

    1.原因 因为springboot-maven-plugin打包的第一级目录为Boot-INF,无法引用 2.解决 不能使用springboot项目自带的打包插件进行打包 <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> 使用传统项目的maven打包 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>m...
    • 0
    • 22
    • 2
    • 2019-09-26
  • redisson实现分布式锁

    随着微服务的推广,现在越来越多的有一定体量的项目,都开始微服务化。 微服务的优点,不必赘述。但是,凡是都是有两面的,比如,分布式的并发安全性。在单应用中,我们可以通过加锁的方式去实现。那么在分布式项目中,我们同样是遵循加锁的思路。 redisson作为一个redis客户端,自身就有分布式锁的功能。 1.在spring boot项目中配置redisson 1.1添加依赖 <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter</artifactId> <version>3.11.4</version> </dependency> <dependency> <groupId>org.redisson</groupId> <artifactI...
    • 0
    • 33
    • 2
    • 2019-09-25
  • nextjs 如何配置移动端适配

    解决问题方案: 使用amfe-flexible 引入postcss,使用px-to-rem、autoprefix插件 什么是amfe-flexible 淘宝提供的解决移动端适配方案, 具体参考https://github.com/amfe/article/issues/17 注意:目前官方已经明确表明,该方案存在一些问题,建议使用vw+rem的方案,后续调研 如何使用? 直接在html中直接引用amfe-flexible.js。 在我们的项目中的配置,将amfe-flexible.js存放在根/static目录下面,在Head标签通过script标签引用 <Head> <title>Demo</title> <meta name="viewport" content="initial-scale=1.0, width=device-width" /> <script src="...
    • 0
    • 28
    • 3
    • 2019-09-22
  • feign client中对不同类型返回值decode的处理

    在spring cloud的微服务项目中,我们在微服务之间的调用经常是通过feign client去操作的。 由于是局域http的rest风格接口,很多人会去做一层包装,类似这种: { "code":"ok", "message":null, "data":"hello" } 如果是这种对象形式的返回值,一般是没有问题的。但是,由于是微服务,有的时候,我们会更倾向于贴近RPC的写法,返回什么,就是什么,不做包装。这样一来,我们就可以返回String,Integer,Long,Object等各种类型的返回值。 之前我是用的JacksonDecode作为decode的实现方式,在一次使用String 作为返回类型的时候,发现会报错。原因就是jackson不能直接继续一个非json的字符串。于是,便考虑其他途径。 我们先看Decode的接口 public interface Decoder {...
    • 0
    • 18
    • 0
    • 2019-09-22
  • nodejs模仿spring boot根据环境使用配置文件

    在spring boot的项目中,我们可以根据 spring.profiles.active参数设置当前启用的配置文件。这样,我们可以很方便的切换环境。 于是在Koa项目中,我们也模仿srping boot写一个配置文件加载的函数。 1.设计好目录结构 参考maven项目,配置文件的文件夹名称 resources,项目代码目录 server (这是一个nextjs项目,否则命名src会更好) 2.读取配置文件 在server文件夹下,创建 bootstrap文件夹,存放一些启动时需要加载的文件。配置文件读取类AppConfig 也放这里。 import _ from "lodash"; import args from "yargs"; import yaml from "js-yaml"; import fs from "fs"; const argv = args.argv; cons...
    • 0
    • 32
    • 0
    • 2019-09-18
  • nextjs 9 和 antd 组合使用

    在nextjs项目中,使用antd作为组件包,由于需要做一些样式的定制,所以使用了less文件。 但是,在使用启动时候出现如下报错: [ error ] ./node_modules/antd/es/config-provider/style/index.less // https://github.com/ant-design/ant-motion/issues/44 .bezierEasingMixin(); ^ Inline JavaScript is not enabled. Is it set in your options? in /Users/bane/Develop/workspace/moensun/ithere/it-here-web-topic/node_modules/antd/es/style/color/bezierEasing.less (lin...
    • 0
    • 10
    • 0
    • 2019-09-18