SpringBoot 配置测试用例不启用定时器

  |  
阅读次数
  |  
字数 267
  |  
时长 ≈ 1 分钟

我们先看一下代码:

1
2
3
4
5
6
7
8
9
10
11
12
@RunWith(SpringRunner.class)
@SpringBootTest(classes = App.class)
@ActiveProfiles("local")
@Slf4j
public class FooServiceTest {
}

@SpringBootApplication
@EnableScheduling
@Slf4j
public class App {
}

使用以上代码,在测试用例中启动时,会执行App这个类进行初始化,在App中我们使用了@EnableScheduling表示启用定时器,这时候如果我们在运行测试用例时不需要启动定时器配置,我们应该使用@ConditionalOnProperty加一下条件限制,来达到这个功能,具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@RunWith(SpringRunner.class)
@SpringBootTest(classes = App.class)
@ActiveProfiles("local")
@TestPropertySource(properties = "app.scheduling.enable=false")
@Slf4j
public class FooServiceTest {
}

@SpringBootApplication
@Slf4j
public class App {

@ConditionalOnProperty(
value = "app.scheduling.enable", havingValue = "true", matchIfMissing = true
)
@Configuration
@EnableScheduling
public static class SchedulingConfiguration {
}

}

这里使用了一个静态内部类来达到此效果,在类上面加上配置启动限制@ConditionalOnProperty,默认为启用,然后我们在写测试用例时,不需要启动的时候则使用@TestPropertySource设置条件里面的属性app.scheduling.enablefalse即可。

Logback 问题点总结

  |  
阅读次数
  |  
字数 2,181
  |  
时长 ≈ 8 分钟

LogbackLog4j 一样都是基于 slf4j 的日志实现框架,但前者较后者后者更多的性能优势因而被作为Log4j的替代品被广泛进行使用。

本次我们就来简单总结一下Logback常见的一些问题:

1.工作原理

先看一张图:

当调用logger.trace/debug/info/warn/error()时

Read More

Java ThreadPoolExcutor

  |  
阅读次数
  |  
字数 4,322
  |  
时长 ≈ 20 分钟

我们先打开java.util.concurrent.ThreadPoolExecutor类,看下它的文档注释,大概了解一下它的作用。
我们可以了解到该类主要作用是进行线程池的创建,然后我们继续看到下面这一段描述

To be useful across a wide range of contexts, this class provides many adjustable parameters and extensibility hooks. However, programmers are urged to use the more convenient Executors factory methods Executors.newCachedThreadPool() (unbounded thread pool, with automatic thread reclamation), Executors.newFixedThreadPool(int) (fixed size thread pool) and Executors.newSingleThreadExecutor() (single background thread), that preconfigure settings for the most common usage scenarios. Otherwise, use the following guide when manually configuring and tuning this class:

大概就是说为了更加方便使用,该类提供了手动配置以及调优的方法,不过一般比较推荐java.util.concurrent.Executors类的工厂方法进行创建线程池,它可以创建

Read More

小程序 语法小程序用户量破千啦!

  |  
阅读次数
  |  
字数 256
  |  
时长 ≈ 1 分钟

“日语语法库”小程序自2019-03-28上线以来到今天2019-04-12刚好两个星期,刚好用户量破千,可以申请流量主进行营收了,做一下总结。

  1. 总结一下语法小程序两个星期以来的数据。
  2. 总结一下为什么相比之前两个小程序,语法小程序能带来更多的用户量以及流量稳定增长。

    Read More

IDEA 使用Cloud Toolkit内置Arthas快速进行服务器诊断

  |  
阅读次数
  |  
字数 484
  |  
时长 ≈ 2 分钟

参考

Cloud Toolkit
Alibaba Cloud Toolkit 是一款IDE 插件,帮助开发者更高效地开发、测试、诊断并部署应用。
利用此,开发者能够方便地将本地应用一键部署到任意机器,或 ECS、EDAS、Kubernetes;
并内置 Arthas 诊断、高效执行终端命令和 SQL 等。

Arthas
Arthas 是Alibaba开源的Java诊断工具。

使用Cloud Toolkit内置Arthas进行远程诊断
通过Cloud Toolkit插件使用Arthas一键诊断远程服务器

Read More

Logback totalSizeCap不生效

  |  
阅读次数
  |  
字数 712
  |  
时长 ≈ 3 分钟

问题描述

项目使用logback作为日志管理框架。

logback project

logback index

logback issues

这几天发现线上的info日志文件,总大小超过了设定阈值,仍然没删除掉旧文件,但是error日志却如期删除了。
info级别的日志,totalSizeCap为5G

1
2
3
4
5
6
7
8
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>
${logger.path}/info.%d{yy-MM-dd}.%i.log
</fileNamePattern>
<maxHistory>6</maxHistory>
<maxFileSize>1GB</maxFileSize>
<totalSizeCap>5GB</totalSizeCap>
</rollingPolicy>

error级别的日志,totalSizeCap为2G

1
2
3
4
5
6
7
8
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>
${logger.path}/error.%d{yy.MM.dd}.%i.log
</fileNamePattern>
<maxHistory>6</maxHistory>
<maxFileSize>1GB</maxFileSize>
<totalSizeCap>2GB</totalSizeCap>
</rollingPolicy>

经过排查发现是使用的版本刚好有一个这样的bug所导致的。

Read More

mpvue中使用vant-weapp组件库

  |  
阅读次数
  |  
字数 549
  |  
时长 ≈ 2 分钟

一、介绍

使用mpvue构建编译小程序,vant-weapp组件库作为页面组件,做一些记录。

mpvue
vant-weapp

二、使用

复制编译文件

按照mpvue官方(五分钟上手教程 )初始化mpvue项目,进入到项目根目录安装vant-weapp依赖

1
npm i vant-weapp -S --production

安装完毕之后,在node_modules目录下找到vant-weappdist下面的所有文件复制到你项目的/static/vant/目录下。

引入组件

app.json下加入

1
2
3
"usingComponents": {
"van-search": "/static/vant/button/index"
}

使用组件

1
<van-button>测试</van-button>

Read More

GitHubPage 搭建项目主页的一些问题

  |  
阅读次数
  |  
字数 343
  |  
时长 ≈ 1 分钟

在将Vue的编译静态文件上传至GitHub仓库,作为项目主页进行访问的过程中遇到了一些问题,记录一下。

1.Vue的基础路径问题

生成静态页后,想放到GitHub作为项目主页,路径需要设置为”./“

1
2
3
module.exports = {
baseUrl: "./"
};

2.将Vue项目编译完成后的dist上传至GitHub仓库

将Vue项目进行npm run build之后,将dist的文件全部上传至新建的项目主页仓库。

3.在已有个人主页后,创建项目主页

如果之前创建过GitHub个人主页,并设置过个性域名,则项目主页不需要上传CNAME文件,直接将静态文件上传至仓库即可。

Read More

Grafana Variables变量使用

  |  
阅读次数
  |  
字数 309
  |  
时长 ≈ 1 分钟

使用Grafana对Elasticsearch数据进行展示时,可使用变量来对一个图表进行动态传参操作,下面我们就来简单了解一下怎么使用吧。

1.选择需要添加变量的仪表盘

1.1. 进入Grafana主页后选择左侧侧边栏
1.2. 选择`Dashboards` -> `home`进入仪表盘主页
1.3. 选择需要添加变量的仪表盘点击进入。

Read More