yml 文件中使用环境变量

Spring Boot 中可以用 spring.profiles.active 参数来指定系统环境,让系统加载不同的配置文件。
可以在程序启动的时候加上参数来指定需要的配置

1
java -Dspring.profiles.active="dev" -jar user.jar

阅读更多

Spring Boot 项目中只能有一个main方法

对Spring Boot 项目用maven进行打包的时候报错以下错误

[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.4.1.RELEASE:repackage (default) on project nlp-user: Execution default of goal org.springframework.boot:spring-boot-maven-plugin:1.4.1.RELEASE:repackage failed: Unable to find a single main class from the following candidates [com.raventech.user.Application, com.raventech.user.util.Utils] -> [Help 1]

阅读更多

Docker Hello World

查看linux版本

1
2
3
4
5
6
$ lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.2.1511 (Core)
Release: 7.2.1511
Codename: Core

阅读更多

Nginx 安装

安装编译工具及库文件

  • 切换到root用户下面
  • yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

阅读更多

Node.js中用escape解决sql注入

直接拼写sql进行数据库的操作时,很容易被人在动态参数中加入特殊字符产生sql注入,威胁数据库的安全。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
'use strict';

const mysql = require('mysql');

let param = 'ns';
let pool = mysql.createPool({
user: 'root',
password: 'root',
database: 'nlp_dict'
});

pool.getConnection(function (err, conn) {
let sql = 'select * from tb_nature where nature = "' + param + '" and del_status=1';
conn.query(sql, function (err, result) {
console.log(result);
})
});

阅读更多

Android 基础

Android 开发的基本环境

  • JDK (Java Development Kit)
  • IDE (Android Studio)
  • Android SDK (Android Software Development Kit)
  • ADT (Android Development Tools)

阅读更多

sql 操作

删除重复的数据

1
2
3
4
5
6
7
delete a from tb_dict a
where (a.keyword,a.nature) in (
select * from (select keyword,nature from tb_dict group by keyword, nature having count(*) > 1) b
)
and a.id not in (
select * from (select min(id) from tb_dict group by keyword, nature having count(*)>1) c
)

阅读更多

mysql 批量删除错误分析

1
2
3
4
delete t1 from tb_dict t1 
where t1.id in (
select t2.id from tb_dict t2 where t2.nature = 'v-taxi'
);

阅读更多

List 进行 remove 操作时抛出 java.lang.UnsupportedOperationException 异常分析

今天将一个数组转换成 List 然后进行 remove 操作时却抛出 java.lang.UnsupportedOperationException 异常。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
String pattern = " ^, v, m, n-music-name, $ ";
String[] patternSplit = Utils.getStringTrimSplit(pattern, ",");

// 去除模式中的^和$标识
List<String> natureList = Arrays.asList(patternSplit);
if ("^".equals(natureList.get(0))) {
natureList.remove(0); // throw java.lang.UnsupportedOperationException
}
if ("$".equals(natureList.get(natureList.size() - 1))) {
natureList.remove(natureList.size() - 1); // throw java.lang.UnsupportedOperationException
}

String[] natureArray = natureList.toArray(new String[natureList.size()]);
System.out.println(natureArray.length);

阅读更多

缓存的相关概念和应用

一般都是用Redis或者Memcached来做数据的缓存,让程序的读取效率更高,以此缓解数据库的压力。

缓存穿透

原因:我们在项目中使用缓存通常都是先检查缓存中是否存在,如果存在直接返回缓存内容,如果不存在就直接查询数据库然后再缓存查询结果返回。这个时候如果我们查询的某一个数据在缓存中一直不存在,就会造成每一次请求都查询DB,这样缓存就失去了意义,在流量大时,可能DB就挂掉了。有人利用不存在的key频繁攻击我们的应用,这就是漏洞。

阅读更多