0%

这里以QuarkusGET STARTED项目为例,主要此项目使用到了quarkus-universe-bom依赖管理及特殊的编译插件。

准备

先下载项目

1
2
3
4
5
6
mvn io.quarkus:quarkus-maven-plugin:1.13.0.Final:create \
-DprojectGroupId=org.acme \
-DprojectArtifactId=getting-started \
-DclassName="org.acme.getting.started.GreetingResource" \
-Dpath="/hello"
cd getting-started

迁移

阅读全文 »

目标

gradle中配置Springboot环境参数,使之能根据参数打包目标环境。

方案

maven对应配置参考

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
<profiles>
<profile>
<id>dev</id>
<properties>
<profileActive>dev</profileActive>
<package.environment>dev</package.environment>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>prod</id>
<properties>
<profileActive>prod</profileActive>
<package.environment>prod</package.environment>
</properties>
</profile>
</profiles>

<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/application-${package.environment}.properties</include>
<include>**/application.properties</include>
</includes>
</resource>
</resources>
...
</build>

这里有2个目标:

  1. springboot能获取目前activeProfile
  2. 根据目标环境变量package.environment过滤目标配置资源文件
阅读全文 »

背景

需要做一个异步数据处理的任务,输入速度大于输出(推送形式)速度。脑子里面第一个想到的就是mq,mq香啊,rabbitmqkafkarocketmqpulsar。无奈资源有限,不能选择独立部署的中间件,排除掉独立部署的中间件之后,首先就可以想到一些其他处理技术:ForJoinPool,RxJava 当然还有就是今天的主角akka。首先,我以前简单用过akka,但是其实没有系统的了解过,这时候就强烈强烈强烈推荐看看官方网站

设定

假定我们的业务是一个数据采集回推的任务

1
2
3
4
graph
用户批量提交采集请求-->按照请求执行子采集任务
按照请求执行子采集任务-->执行回推结果

其中子采集任是比较耗时的任务,也是整个流程中相对的瓶颈点。

阅读全文 »

对于只使用IntelliJ IDEA开发Java的同学,接触gradle的机会可能不是太多,或者说只借助于原生的Gralde-plugin可能都是模模糊糊的,只能大概的对应与maven的scope来边猜边用,对于使用android studio的同学可能借助于Android Plugin for Gradle,能够更直观的理解一些。但是可能不清楚对应的改变和原理。

gradle < 4.0.1android studio 2.x之前,支持的依赖方式如下:

Compile: 默认的依赖方式,任何情况下都会依赖
Provided: 只提供编译时依赖,打包时不会添加进去
Apk:只在打包Apk包时依赖(使用较少)
TestCompile:只在测试时依赖
DebugCompile:只在Debug构建时依赖
ReleaseCompile:只在Release构建时依赖

gradle >= 4.0.1android studio >= 3.0,支持的依赖方式如下:

compile: 弃用,被implementation替代
implementation: 实现依赖,同时会打入compileClasspath和runtimeClasspath
compileOnly: 编译时依赖,只会打入compileClasspath
annotationProcessor: 在编译中用于注解处理,以下会以Lombok举例
testAnnotationProcessor: 在测试编译中用于注解处理,以下会以Lombok举例
runtimeOnly:运行时依赖,只打包至runtimeClassPath
testImplementation:编译时只为测试构建相关依赖
testCompileOnly:测试编译时所使用的依赖,不打入运行时
testRuntimeOnly:测试运行时所使用的依赖

源代码依赖配置关系图
源代码依赖配置关系图
测试代码依赖配置关系图
测试代码依赖配置关系图

阅读全文 »

准备

硬件环境
CPU: Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz 双核四线程
MEM: 8G

系统环境
CentOS Linux release 7.3.1611 (Core)

软件环境
hadoop-3.0.0-beta1
jdk8
在linux环境下推荐使用axel下载工具

安装依赖

1
2
yum install openssh
yum install pdsh

解压安装

1
2
tar xvf hadoop-3.0.0-beta1.tar.gz -C /usr/local/
cd /usr/local/hadoop-3.0.0-beta1

接下来验证安装

1
./bin/hadoop

如果安装成功,那么可以看到hadoop的使用说明文档

阅读全文 »

官方提供的create-react-app来初始化整个工程,具体参考官方说明, 但是这样我们就不知道如何从无到有合理的搭建起react的开发环境。
我们今天主要来讲讲第二种。这样可以学习到Babel、webpack来配合react工程的构建。
一个现代化的前端工程编译系统通常由以下部分构成:

  • 包管理器 比如Yarnnpm
  • 打包器, 比如webpackBrowserify。 它可以让你编写模块化代码并将其打包成一个小文件,以便优化加载时间。
  • 编译器 比如Babel。它让你可以编写更新的javascript代码能够运行在老版本的浏览器上。

初始化工程

1
2
mkdir reactdemo
npm init -y

使用npm安装React

1
npm install --save react react-dom

官方建议使用配合Babel来使用React,这样可以在javascript代码中使用ES6与JSX。

1
npm install --save-dev babel-cli babel-loader babel-preset-es2015 babel-polyfill babel-preset-env

安装webpack

1
npm install --save-dev webpack webpack-dev-server

接下来创建两个模板文件:build/index.htmlapp/index.js
修改index.html内容为如下

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>React Set up</title>
</head>
<body>
<script src="bundle.js"></script>
</body>
</html>

app/index.js中编写一些基本的es6代码

1
2
const message = "Hello, world!";
console.log(message);

创建webpack.config.js并编辑其内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
module.exports = {
entry: ['babel-polyfill', './app/index.js'],
output: {
path: __dirname + '/build',
filename: 'bundle.js'
},
module: {
loaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader'
}
]
},
devServer: {
port: 3000,
contentBase: './build',
inline: true
}
}

编辑package.json中的scripts,添加build与start

1
2
3
4
5
6
7
8
{
...
"scripts": {
"build": "webpack",
"start": "webpack-dev-server"
},
...
}

同样在package.json中添加babel配置(也可以在.babelrc中配置)

1
2
3
"babel": {
"presets": ["es2015"]
},

执行以下命令

1
2
npm run build
npm run start

打开浏览器http://localhost:3000,打开console,可以看到输出

添加React
安装依赖

1
npm install --save-dev react react-dom babel-preset-react

编辑babel配置

1
2
3
"babel": {
"presets": ["es2015", "react"]
}

编辑index.html

1
2
3
4
<body>
<div id="root"></div>
<script src="bundle.js"></script>
</body>

然后在index.js中编辑入标准的ReactHelloWorld

1
2
3
4
5
6
7
import React from 'react';
import ReactDOM from 'react-dom';

ReactDOM.render(
<h1>Hello, world!</h1>,
document.getElementById('root')
);

最终的工程目录结构为

1
2
3
4
5
6
7
8
9
10
11
{project root}
│ package-lock.json
│ package.json
│ webpack.config.js

├─app
│ index.js

└─build
bundle.js
index.html

扩展阅读

参考

目标 对于商品标题中的核心词进行配置相关同义词来人工提高商品搜索的准确度

现状

目前我们使用elasticsearch作为我们的数据仓库,主要存储一些商品数据。对于elasticsearch本身没有做特定的优化和定制,使用的都是默认配置,包括使用默认的standard作为分词器。索引本身没有定制。

阅读全文 »

最近做了一个爬虫项目,经过了 从无框架的httpclient+jsoup,到使用webmagic,再到改造webmagic做定制化使用的三个阶段。接下来,我讲介绍一下我们在这个过程中获得的经验和夸过的一些坑。

阅读全文 »