0%

使用方法

HTML转换pdf

wkhtmltopdf --window-status completed --debug-javascript "http://localhost:9137/manager/assessment/report/v2/class?testId=791078347730882560&classId=hpjrblnxkdv2qx9u941qfm3vwplpmhpr&printPdf=true" -

  • window-status completed: 读取网页参数, 当页面 window.status = "completed" 时, 才算页面渲染完成, 解决异步js页面无法正常渲染的问题.
  • debug-javascript: 开启js debug

特定页面样式

  • chart 图表必须设置高宽, 不然不显示.
  • 不希望被切分的div 如图表, 添加样式: page-break-inside:avoid;
  • 将表格分页切分页后加头
    1
    2
    3
    4
    5
    6
    table tr {
    word-break: break-all;
    page-break-before: always;
    page-break-after: always;
    page-break-inside: avoid;
    }
阅读全文 »

编码

  • Setting-Editor-File Encodings- UTF-8

自动生成注释

生成类/接口注释

  • Setting-Editor-File and Code Templates-Class|Interface
    1
    2
    3
    4
    5
    6
    7
    8
    /**
    *
    * ${Todo}
    *
    * @author wb
    *
    * @create ${DATE}
    **/

    生成方法注释

  • Setting-Editor-Live Templates
    1
    2
    3
    4
    5
    6
    7
    8
    **
    * $TODO$
    $params$
    * @return $return$
    * @throws
    * @Date $date$ $time$
    * @Author wb
    */
    主要是生成参数的脚本:
    1
    groovyScript("def result=''; def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList(); for(i = 0; i < params.size(); i++) {result+=' * param ' + params[i] + ((i < params.size() - 1) ? '\\r\\n    ' : '')}; return result", methodParameters())

自定义实时模板

Idea 有很多如 psvm iter 的实时模板, 我们也可以自定义一些自己常用的.
设置路径: Setting-Editor-Live Templates

首先点击右边的 + 号创建一个Template Group分组, 然后再新建的分组中添加对应的实时捷模板

自动生成方法说明注释

  • Abbreviation: mdoc 设置指令, 在方法上方输入/mdoc会调用该模板, 注意不输入/无法取到参数与返回值
  • Template Text: 模板
    1
    2
    3
    4
    5
    6
    7
    /**
    * $description$
    * @date $date$ $time$
    * @since xxx@qq.com
    $params$
    $return$
    */
    Edit variables(编辑模板中的变量):
  • description: 留空, 生成模板时留空的值会让你手动输入
  • date: date()
  • time: time()
  • params:
    1
    groovyScript("if(\"${_1}\".length() == 2) {return '';} else {def result=''; def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList();for(i = 0; i < params.size(); i++) {if(i<(params.size()-1)){result+=' * @param ' + params[i] + ' : ' + '\\n	'}else{result+=' * @param ' + params[i] + ' : '}}; return result;}", methodParameters()); 
  • return:
    1
    groovyScript("def returnType = \"${_1}\"; def result = ' * @return ' + returnType; return result;", methodReturnType());

    生成RequestMapping方法

  • Abbreviation: mrqm 设置指令, 在代码中输入mrqm会生成生成RequestMapping方法
  • Template Text: 模板, $END$ 设置光标最后的位置
    1
    2
    3
    4
    5
    6
    /mdo$END$
    @RequestMapping("/$RequestMapping$")
    public String $method$($Params$) {

    return "$returnObject$";
    }

    生成ResponseBody方法

  • Abbreviation: mrsb 设置指令, 在代码中输入mrsb会生成生成ResponseBody方法
  • Template Text: 模板, $END$ 设置光标最后的位置
    1
    2
    3
    4
    5
    6
    7
    /mdo$END$
    @RequestMapping("/$RequestMapping$")
    @ResponseBody
    public $returnType$ $method$($Params$) {

    return $returnObject$;
    }

    生成私有方法

  • Abbreviation: mpr 设置指令, 在代码中输入mpr会生成私有方法
  • Template Text: 模板, $END$ 设置光标最后的位置
    1
    2
    3
    4
    5
    /mdo$END$
    private $returnType$ $method$($Params$) {

    return $returnObject$;
    }

    生成无返回值的私有方法

  • Abbreviation: mprv 设置指令, 在代码中输入mprv会生成无返回值的私有方法
  • Template Text: 模板, $END$ 设置光标最后的位置
    1
    2
    3
    4
    /mdo$END$
    private void $method$($Params$) {

    }

    生成公共方法

  • Abbreviation: mpu 设置指令, 在代码中输入mpu会生成公共方法
  • Template Text: 模板, $END$ 设置光标最后的位置
    1
    2
    3
    4
    5
    /mdo$END$
    public $returnType$ $method$($Params$) {

    return $returnObject$;
    }

    生成无返回值的公共方法

  • Abbreviation: mpuv 设置指令, 在代码中输入mpuv会生成无返回值的公共方法
  • Template Text: 模板, $END$ 设置光标最后的位置
    1
    2
    3
    4
    /mdo$END$
    public void $method$($Params$) {

    }

    文件模板

    Idea 支持为所有文件创建/修改模板.
    设置路径: Setting-Editor-File and Code Templates

注意占位符需开启 Enable Live Templates 功能

阅读全文 »

Window 下安装

  1. 下载地址:https://github.com/MSOpenTech/redis/releases
    • Redis) 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip压缩包到 C 盘,解压后,将文件夹重新命名为 redis。
  2. 运行
    • 开启服务器
      • 打开一个 cmd 窗口 使用cd命令切换目录到 C:\redis 运行 redis-server.exe redis.windows.conf
    • 连接数据库
      • 这时候另启一个cmd窗口,原来的不要关闭,不然就无法访问服务端了
      • 切换到redis目录下运行 redis-cli.exe -h 127.0.0.1 -p 6379

        Linux 下安装

  3. 下载地址:http://redis.io/download,下载最新稳定版本。
  4. 安装运行
    • 源码安装
      1
      2
      3
      4
      5
      6
      7
      wegt http://download.redis.io/releases/redis-4.0.9.tar.gz
      tar -zvxf redis-4.0.9.tar.gz
      cd redis/
      #编译
      make
      #编译完成文件生成到当前目录下的src下
      cd src
    • 启动redis
      1. ./redis-server 注意这种方式启动redis 使用的是默认配置。也可以通过启动参数告诉redis使用指定配置文件使用下面命令启动。
      2. ./redis-server redis.conf redis.conf是一个默认的配置文件。我们可以根据需要使用自己的配置文件。
    • 运行
      1. 启动redis服务进程后,就可以使用测试客户端程序redis-cli和redis服务交互了。 比如:

        1
        2
        3
        4
        5
        ./redis-cli
        redis> set foo bar
        OK
        redis> get foo
        "bar"

        Redis 配置

        Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf.
        你可以通过 CONFIG 命令查看或设置配置项


语法

Redis CONFIG 命令格式如下:

redis 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME

阅读全文 »

复制一份 tomcat 作为备用容器

  1. cp -R tomcat/ tomcat_2

设置环境变量

  1. 编辑环境变量 vim /etc/profile, 最后一行添加:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ##########first tomcat###########
    CATALINA_BASE=/www/server/tomcat
    CATALINA_HOME=/www/server/tomcat
    TOMCAT_HOME=/www/server/tomcat
    export CATALINA_BASE CATALINA_HOME TOMCAT_HOME
    ##########second tomcat##########
    CATALINA_2_BASE=/www/server/tomcat_2
    CATALINA_2_HOME=/www/server/tomcat_2
    TOMCAT_2_HOME=/www/server/tomcat_2
    export CATALINA_2_BASE CATALINA_2_HOME TOMCAT_2_HOME
  2. 更新环境变量 source /etc/profile

配置 tomcat_2

  1. 配置启动环境变量, 进入 tomcat_2 目录, 编辑其 bin/catalina.sh, 找到OS specific support. $var _must_ be set to either true or false., 插入 tomcat2 的环境变量

    1
    2
    3
    4
    5
    # OS specific support.  $var _must_ be set to either true or false.
    # 添加tomcat2 环境变量
    export CATALINA_BASE=$CATALINA_2_BASE
    export CATALINA_HOME=$CATALINA_2_HOME
    ...
  2. 配置容器端口, 编辑 tomcat_2/conf/server.xml, 分别修改下列几个端口号, 与 tomcat1 的端口不同即可.

    1
    2
    <!-- 8005=>9005 tomcat shutdown端口-->
    <Server port="9005" shutdown="SHUTDOWN">
    1
    2
    3
    4
    <!-- 8080=>9080 tomcat web端口-->
    <Connector port="9080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" />
    1
    2
    <!-- 8009=>9009 AJP1.3端口 -->
    <Connector port="9009" protocol="AJP/1.3" redirectPort="8443" />
  3. 防火墙放通端口 8080 9080

阅读全文 »

安装准备

  1. Linux系统安装memcached,首先要先安装libevent库。
  • Ubuntu/Debian: sudo apt-get install libevent libevent-deve
  • Redhat/Fedora/Centos yum install -y libevent libevent-deve

安装

  1. 仓库安装
  • Ubuntu/Debian: sudo apt-get install memcached
  • Redhat/Fedora/Centos: yum install -y memcached
阅读全文 »

直接看代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/**
* @program: canary
* @description: spring 内置的json处理框架是Jackson。我们可以对它配置达到不返回Null属性的json数据
* @author: wb
* @create: 2018-07-26 17:39
**/


@Configuration
public class JacksonConfig
{
@Bean
@Primary
@ConditionalOnMissingBean(ObjectMapper.class)
public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder)
{
ObjectMapper objectMapper = builder.createXmlMapper(false).build();

// 通过该方法对mapper对象进行设置,所有序列化的对象都将按改规则进行系列化
// Include.Include.ALWAYS 默认
// Include.NON_DEFAULT 属性为默认值不序列化
// Include.NON_EMPTY 属性为 空("") 或者为 NULL 都不序列化,则返回的json是没有这个字段的。这样对移动端会更省流量
// Include.NON_NULL 属性为NULL 不序列化,就是为null的字段不参加序列化
//objectMapper.setSerializationInclusion(Include.NON_EMPTY);

/* 为空的不参加序列化 */
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
// 字段保留,将null值转为""
/*objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>()
{
@Override
public void serialize(Object o, JsonGenerator jsonGenerator,
SerializerProvider serializerProvider)
throws IOException, JsonProcessingException
{
jsonGenerator.writeString("");
}
});*/
return objectMapper;
}
}

准备工作

  • Nginx 负载均衡已配置
  • Tomcat 已开启多个容器
  • Tomcat 8
  • 官方文档: https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration
  • 参考资料: https://www.cnblogs.com/jsonhc/p/7344902.html
  • 下载所需jar包, 每个tomcat版本对应的包不同

  • wget http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager/2.1.1/memcached-session-manager-2.1.1.jar
  • wget http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager-tc8/2.1.1/memcached-session-manager-tc8-2.1.1.jar
  • wget http://repo1.maven.org/maven2/net/spy/spymemcached/2.11.1/spymemcached-2.11.1.jar
  • 如果仅仅只是用java来做序列化器只需上面这三个包就ok
  • 下面两个包,配置后一直报错,未测试通过
  • wget http://repo1.maven.org/maven2/de/javakaffee/msm/msm-javolution-serializer/1.8.3/msm-javolution-serializer-1.8.3.jar
  • wget http://repo1.maven.org/maven2/de/javakaffee/msm/msm-javolution-serializer/2.1.1/msm-javolution-serializer-2.1.1.jar
  • 下载完成后放入tomcat/lib目录中

修改两个tomcat配置文件

  • vim {tomcat}/conf/context.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <Context>
    <!-- web application will be reloaded. -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>

    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->
    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="n1:127.0.0.1:11211,n2:127.0.0.1:22122"
    failoverNodes="n1"
    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
    />
    </Context>

最近发现运维大哥在新环境部署相关服务后生成的数据出现中文乱码的问题, 记录一下

修改系统编码环境变量

locale 查看当前系统编码:

这是修改后正常状态, 如不是需修改 cat /etc/sysconfig/i18n 文件, 修改为:

1
LANG="zh_CN.UTF-8"
阅读全文 »

今天完成的事情:

完成微信登陆认证流程, 通过opeonId 和 access_token 获取用户信息

微信公众号获取用户信息

1. 获取code, 必须在微信开发工具或者微信中打开才会跳转

  • redirect_uri必须填写网页授权域名, 公众号设置>功能设置>网页授权域名
    https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx2750055a558bbe86&redirect_uri=http://academy.home.canary.dounixue.net/&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
  • 跳转后url
    http://academy.home.canary.dounixue.net/?code=001oDwYl1bI7al0xsVXl1AqTYl1oDwYD&state=STATE

2. 通过code以及appid/secret 获取 access_token

阅读全文 »