搭建ipsec VPN 服务器

使用 Linux 脚本一键快速搭建自己的 IPsec VPN 服务器。支持 IPsec/L2TP 和 Cisco IPsec 协议,可用于 Ubuntu/Debian/CentOS 系统。你只需提供自己的 VPN 登录凭证,然后运行脚本自动完成安装。

IPsec VPN 可以加密你的网络流量,以防止在通过因特网传送时,你和 VPN 服务器之间的任何人对你的数据的未经授权的访问。在使用不安全的网络时,这是特别有用的,例如在咖啡厅,机场或旅馆房间。

阅读全文

Java常用工具类集锦

NumberUtils工具类

判断字符串是否是数字

NumberUtils.isNumber(“5.96”);//结果是true

阅读全文

hexo持续集成

申请注册coding,然后通过coding升级至腾讯云开发者平台

https://feedback.coding.net/topics/7257

阅读全文

SpringCloudEureka源码详解

概述

Spring Cloud Eureka是Spring Cloud Netflix项目下的服务治理模块。

由于微服务概念的引入,使大型服务在一定程度上彻底的解耦,当服务集群足够庞大的时候,服务治理成为了微服务的痛点之一。

阅读全文

mysql主从同步带来的影响及部分解决方案

前因

场景1:线上的数据异步同步使用的是rabbitmq,当对数据库数据进行增删改时候会发送一条mq消息到同步服务,同时进行查库写入es。

场景2:线上redis数据读取mysql中数据写入,由于该数据为访问量巨大的数据,所以未设置过期时间,有增删改操作时,会读库重新写入redis。

阅读全文

线上long型数据丢失精度问题

前因

在dev和qa环境正常获取到用户的userId,dev和qa环境的userId长度都不长,通过userId查询数据,显示数据完全正常。

但是上线之后,很快有运营反馈使用userId查询不出结果,经过验证发现确实这样,开始排查问题

阅读全文

Linux磁盘管理

Linux磁盘管理好坏直接关系到整个系统的性能问题。

Linux磁盘管理常用三个命令为df、du和fdisk。

df:列出文件系统的整体磁盘使用量
du:检查磁盘空间使用量
fdisk:用于磁盘分区

df

Linux磁盘管理好坏直接关系到整个系统的性能问题。

阅读全文

stream-常用数组操作

对User集合进行升序,倒序操作

对listResult进行排序,根据伴随度进行降序,根据集合中对象User中的伴随度进行倒序排列…reversed(),默认正序,reversed反转后即倒序;

阅读全文

Docker

docker ps 查看运行正常进程

docker ps -a 查看所有存在过进程

docker search XXX 搜索镜像

docker rm -f xxx 删除images

阅读全文

Springboot集成druid数据库连接池

1.使用http://start.spring.io/ 新建web项目,选择springboot版本为1.5.13选择mysql,mybatis,web依赖,下载好生成的demo

2.导入idea,然后写导入druid依赖

1
2
3
4
5
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.23</version>
</dependency>

2.设置druid
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
package com.my.blog.website.config;
import com.alibaba.druid.filter.Filter;
import com.alibaba.druid.filter.logging.Slf4jLogFilter;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import com.github.pagehelper.PageHelper;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
/**
* cn.sparrowx.druid.conf
*
* @author bosong
* @since 2018/6/11 15:30.
*/
@Configuration
public class DruidConfiguration {
private static final Logger logger = LoggerFactory.getLogger(DruidConfiguration.class);
private static final String DB_PREFIX = "spring.datasource";
@Bean
public ServletRegistrationBean druidServlet() {
logger.info("init Druid Servlet Configuration ");
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
// IP白名单
servletRegistrationBean.addInitParameter("allow", "");
// IP黑名单(共同存在时,deny优先于allow)
servletRegistrationBean.addInitParameter("deny", "");
//控制台管理用户
servletRegistrationBean.addInitParameter("loginUsername", "bosong");
servletRegistrationBean.addInitParameter("loginPassword", "qwe13579QWE");
//是否能够重置数据 禁用HTML页面上的“Reset All”功能
servletRegistrationBean.addInitParameter("resetEnable", "true");
return servletRegistrationBean;
}
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
filterRegistrationBean.addUrlPatterns("/*");
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
return filterRegistrationBean;
}
List<Filter> list=new ArrayList<>();
@Bean
Slf4jLogFilter logfilter(){
Slf4jLogFilter slf4jLogFilter=new Slf4jLogFilter();
slf4jLogFilter.setConnectionLogEnabled(false);
slf4jLogFilter.setStatementLogEnabled(false);
slf4jLogFilter.setStatementExecutableSqlLogEnable(true);
slf4jLogFilter.setResultSetLogEnabled(true);
list.add(slf4jLogFilter);
return slf4jLogFilter;
}
//解决 spring.datasource.filters=stat,wall,log4j 无法正常注册进去
@ConfigurationProperties(prefix = DB_PREFIX)
class IDataSourceProperties {
private String url;
private String username;
private String password;
private String filters;
private String connectionProperties;
@Bean //声明其为Bean实例
@Primary //在同样的DataSource中,首先使用被标注的DataSource
public DataSource dataSource() {
DruidDataSource datasource = new DruidDataSource();
datasource.setName("blog-onlie");
datasource.setUrl(url);
datasource.setUsername(username);
datasource.setPassword(password);
//configuration
datasource.setInitialSize(1);
datasource.setMinIdle(1);
datasource.setMaxActive(20);
datasource.setMaxWait(60000);
datasource.setTimeBetweenLogStatsMillis(300000);
datasource.setTimeBetweenEvictionRunsMillis(60000);
datasource.setMinEvictableIdleTimeMillis(300000);
datasource.setTestWhileIdle(true);
datasource.setTestOnBorrow(false);
datasource.setTestOnReturn(false);
datasource.setPoolPreparedStatements(true);
datasource.setMaxPoolPreparedStatementPerConnectionSize(20);
datasource.setAsyncInit(true);
datasource.setProxyFilters(list);
datasource.setValidationQuery("select 'x'");
try {
datasource.setFilters(filters);
} catch (SQLException e) {
System.err.println("druid configuration initialization filter: " + e);
}
datasource.setConnectionProperties(connectionProperties);
return datasource;
}
@Bean(name = "sqlSessionFactory")
@Primary
public SqlSessionFactory sqlSessionFactoryBean() {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource());
bean.setTypeAliasesPackage("com.my.blog.website.model.Vo");
// 分页插件
PageHelper pageHelper = new PageHelper();
Properties properties = new Properties();
properties.setProperty("reasonable", "true");
properties.setProperty("supportMethodsArguments", "true");
properties.setProperty("returnPageInfo", "check");
properties.setProperty("params", "count=countSql");
pageHelper.setProperties(properties);
// 添加插件
bean.setPlugins(new Interceptor[] {pageHelper});
// 添加XML目录
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
try {
bean.setMapperLocations(resolver.getResources("classpath:mapper/*.xml"));
return bean.getObject();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Bean
@Primary
public SqlSessionTemplate sqlSessionTemplate(
SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
@Bean
@Primary
public PlatformTransactionManager annotationDrivenTransactionManager() {
return new DataSourceTransactionManager(dataSource());
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getFilters() {
return filters;
}
public void setFilters(String filters) {
this.filters = filters;
}
public String getConnectionProperties() {
return connectionProperties;
}
public void setConnectionProperties(String connectionProperties) {
this.connectionProperties = connectionProperties;
}
}
}

6.配置application.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://xxxxxx:3306/teaching?useSSL=false
username: root
password: SK7q1NJTgWERV924WLnm7IcxBHjDNJ81UMo10EuFzjcXwblNte68QyxAHpoaV57KHRob7Rle+syYyvaGE2Fa7Q==
# 下面为连接池的补充设置,应用到上面所有数据源中
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: config,stat,wall,slf4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;config.decrypt=true;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAItGtxZCgxe9j3hEBJtW46xjlm6doeYY0/VvOEqcs3VQG5pcA3Tyv0SjjMXAq0zOQdI6nGMXUhtqrMG41Yk7RgMCAwEAAQ==
# mybatis配置
mybatis:
mapper-locations: classpath*:/mapper/*Mapper.xml
server:
port: 10086
logging:
level: debug
file: logs/spring.log

7.数据库密码可以经过加密,加密方法可以直接在网上查询,配置好数据库的查询语句 就可以了 。登录到http://localhost:10086/druid/login.html使用账号密码登录进去即可成功

阅读全文