• 网络存储文件共享之WebDAV

    WebDAV 基于 HTTP 协议的通信协议,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法,使应用程序可对Web Server直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制。

    常用的文件共享有三种:FTP、Samba、WebDAV,它们各有优缺点,了解后才能更好地根据自己的需求选择方案。

    (更多…)
  • Privoxy 动态代理和广告过滤

    Privoxy 是一个非缓存web代理,它具有高级过滤功能,可以增强隐私,修改网页数据和HTTP头,控制访问,删除广告。本章介绍socks代理转http,动态代理和广告过滤功能。

    (更多…)
  • Java 多线程并发编程

    在Java中开启新线程执行,一般做法是继承Runnable接口,实现run(),然后使用new Tread().start(run)。如果我们需要对执行结果处理或者线程限制,使用Java提供的并发工具会使多并发编程变得简单。

    Java并发工具在 java.util.concurrent 包及其子包 java.util.concurrent.atomic 和 java.util.concurrent.locks 下。本章会介绍相关工具用法。

    (更多…)
  • Java 日期时间工具包 – java.time

    从JDK8开始,Java 提供了新的日期时间处理方法用来代替旧的日期类(Date)。本章主要讲它们的用法以及和旧日期类互转。

    日期和时间

    Java 新的日期工具类在 java.time 包及子包中 ,日期类主要有 LocalDateTimeLocalDateLocalTime ,这三个API类很相似,以下是常用API及说明。

    (更多…)
  • 自动代理脚本

    代理上网有两种模式,一种是全局代理,所有的流量都走代理服务器,另一种是自动代理,根据规则决定是否使用代理。设置自动代理可以实现智能分流,多个代理服务器同时使用。

    实现自动代理的方案有多种,浏览器可以使用SwitchyOmega插件,安装Privoxy实现动态代理。本章使用的是PAC自动代理脚本,主要是因为它跨平台,无需安装第三方软件或插件,几乎所有的系统都支持。

    PAC代理脚本使用JavaScript语法,当系统设置PAC代理脚本后,浏览器执行请求时会先从脚本中的 FindProxyForURL 方法中获取代理服务器。

    function FindProxyForURL(url, host) {
    
        return "代理服务器";
    }

    参数说明:
    url
    前当请求的url,如:https://engr-z.com
    host
    当前url中的主机名,如:engr-z.com 返回值说明:
    DIRECT
    不使用代理,示例:”DIRECT”
    PROXY
    使用http代理,示例:”PROXY 127.0.0.1:8888″
    SOCKS
    使用socks代理,示例:”SOCKS 127.0.0.1:1080″
    SOCKS5
    使用socks5代理,示例:”SOCKS5 127.0.0.1:1080″ 可以同时返回多个代理设置,用分号分隔,应用会依次按顺序检查返回一个可使用的代理服务器。示例:”SOCKS5 127.0.0.1:1080;PROXY 127.0.0.1:8888;DIRECT”
    优先使用socks5代理,如果不可用则使用http代理,如果http代理也不可用则跳过代理直接连接。

    内置函数

    PAC脚本支持基本的JavaScript语法,同时还内置一些函数可以帮助我们简化处理

    • isPlainHostName(host)

    判断是否为本地主机

    if (isPlainHostName(host)) {
        return "DIRECT";
    else
        return "PROXY proxy:80";
    }

    如果是本地主机直接连接,否则使用http代理

    • shExpMatch(host, “”)

    匹配url,支持 *

    if (shExpMatch(url,"*.google.com/*")) {
        return "PROXY 192.168.1.1:3128";
    }
    • isInNet

    访问IP是否在某个子网内

    if (isInNet(host, "192.168.0.0", "255.255.225.0")) {
        return ""
    }

    更多函数以考:Proxy Auto-Configuration (PAC) file

    以下是我自己写的PAC脚本,可作为模板使用:

    var domains = {
        "google.com": 1,
        "youtube.com": 1
    };
    
    var proxy = "SOCKS5 127.0.0.1:1080; SOCKS 127.0.0.1:1080; PROXY 127.0.0.1:8888; DIRECT;";
    
    var direct = 'DIRECT;';
    
    function FindProxyForURL(url, host) {
        var lastPos;
        do {
            if (domains.hasOwnProperty(host)) {
                return proxy;
            }
            lastPos = host.indexOf('.') + 1;
            host = host.slice(lastPos);
        } while (lastPos >= 1);
        return direct;
    }

    只需在domains添加要代理的域名,如 facebook.com,twitter.com
    如果有多个代理,比如公司的网络走公司代理,可在 domains 中的值处理
    var domains = {
    “google.com”: 1,
    “youtube.com”: 1,
    “公司网络”: 2
    };

    if (domains.hasOwnProperty(host) == “2”) {
    return “公司代理”
    }

    设置PAC

    把PAC上传到http服务器,或者放本地,在系统设置网络中找到自动代理配置,填上PAC的访问地址即可。

    Windows:

    Android:

    IOS:

    在手机上使用PAC脚本,可能会遇到某些APP不支持,这种情况需要使用Privoxy来做自动代理,将在后续介绍。

  • Spring Boot 集成 Elasticsearch

    Elasticsearch (简称ES) 是一个基于 Lucene 的分布式、高扩展、高实时的搜索与数据分析引擎。本章介绍 Spring Boot 应用集成 Elasticsearch ,通过 Spring 封装的API访问 Elasticsearch 。

    Spring Data Elasticsearch 是 Spring Data 子项目,提供对 Elasticsearch 集成与访问的支持。需要注意的是 Spring Data Elasticsearch 版本 3.2.x 与 4.x 不兼容,在升级 Spring Boot 版本时要做好评估。本章是以 Spring Data Elasticsearch 4.x 为基础。

    (更多…)
  • Spring Boot 集成 Sharding JDBC 分库分表

    Apache ShardingSphere 是一套开源的分布式数据库解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar 这 3 款既能够独立部署,又支持混合部署配合使用的产品组成。它们均提供标准化的数据水平扩展、分布式事务和分布式治理等功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。

    (更多…)
  • Spring Boot 集成 Kafka Stream

    Kafka 从0.10版本开始支持流处理,我们可以使用 Kafka Streams 来开发实时应用程序。本章介绍 Spring Boot 集成 Kafka Streams 进行流式计算。

    Spring Boot 集成 Kafka 的基本配置和用法在”Spring Boot 集成 Kafka“有介绍,这里不再详述。

    (更多…)
  • Spring Boot 集成 Kafka

    Kafka 是由 Apache 软件基金会开发的一个开源流处理平台,由 Scala 和 Java 编写。 Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。本章介绍 Spring Boot 集成 Kafka 收发消息。

    (更多…)
  • Spring Boot 集成 ActiveMQ (Artemis)

    Apache ActiveMQ 是一款基于 Java 的消息服务器,它使用行业标准协议,支持我们把各种语言和平台开发的系统连接在一起。目前 ActiveMQ 分为两个版本:ActiveMQ 5 和 ActiveMQ Artemis (下一代ActiveMQ)。当 ActiveMQ Artemis 达到 ActiveMQ 功能时会变为 ActiveMQ 6 。

    Spring JMS 是专门用来处理 Spring 消息的模块。它支持主流的消息中间键,能完美结合 ActiveMQ 。Spring Boot 应用通过集成 Spring JMS 模块整合 ActiveMQ ,本文涉及 ActiveMQ 5 和 ActiveMQ Artemis 两种配置方法,根据项目实际使用 ActiveMQ 的版本,采取一种配置即可。

    (更多…)
  • Spring Boot 集成 Redis

    Redis 是一个高性能的Key-Value内存数据库。Spring 官方对 Redis 提供支持,使用 Spring Data Redis 可以选择 Jedis 或 Lettuce 客户端,在 Spring Boot 项目中操作 Redis 简单方便。

    Spring Data Redis 是 Spring Data 家族的一部分,它提供了配置方法和访问 Redis 接口的抽象。在内底层实现上,我们可以选择使用 Jedis 或 Lettuce 来访问 Redis 数据库。

    (更多…)
  • Spring Boot 集成 MyBatis Plus

    MyBatis Plus 是 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。MyBatis Plus 提供 Spring Boot 支持。全新的 MyBatis Plus 3.0 版本基于 JDK8,提供了 lambda 形式的调用。

    (更多…)
  • Spring Boot 集成 JUnit 单元测试

    为自己的应用编写单元测试是一个很好的习惯。在Java开发中最流行的测试工具非JUnit莫属,它已经成为Java单元测试的事实标准。Spring Boot测试模块不仅集成JUnit框架,还提供了许多实用程序和注解,方便我们测试应用。

    (更多…)
  • Spring Boot 集成 Spring JDBC

    Spring JDBC模块负责访问操作数据库,在中小型项目中使用Spring框架自己的JdbcTemplate方便快捷,而且稍加封装完全不输MyBatis框架。

    Spring 生态中的 Spring Data JDBC 和 Spring Data JPA 就是对原生JDBC的加强,它提供查询数据库并映射成实体的功能,和MyBatis有很多相似之处。关于 Spring Data 相关的知识会另起新篇。

    (更多…)
  • Spring Boot 集成 Spring MVC

    Spring MVC是一款优秀的、基于MVC思想的应用框架,它是Spring的一个子框架。是当前最优秀的MVC框架。

    Spring Boot整合Spring MVC只需在pom.xml中引入

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>${version}</version>
    </dependency>
    (更多…)