概述 生产环境中的服务可能会出现各种问题,但总不能让服务下线来专门排查错误,这时候最好有一些手段来获取程序运行时信息,比如 接口方法参数/返回值.外部调用情况 以及 函数执行时间等信息以便定位问题.传统的日志记录方式的确可以,但有时非常麻烦,甚至可能需要重启服务,因此代价太大,这时可以借助一个牛批的工具:BTrace ! BTrace 可用于动态跟踪正在运行的 Java程序,其原理是通过动态地检测目标应用程序的类并注入跟踪代码 ( "字节码跟踪" ),因此可以直接用于监控和追踪线上问题…
将Spring Boot项目运行在Docker上 一.使用Dockerfile构建Docker镜像 1.1Dockerfile常用指令 1.1.1ADD复制文件 1.1.2ARG设置构建参数 1.1.3CMD容器启动命令 1.1.4COPY复制文件 1.1.5ENTRYPOINT入口点 1.1.6ENV设置环境变量 1.1.7EXPOSE声明暴露的端口 1.1.8FROM指定基础镜像 1.1.9LABEL为镜像添加元数据 1.1.10MAINTAINER 指定维护者的信息 1.1.11RUN执行…
现实情况是这样的,因为在练习spring boot整合mybatis,所以自己新建了个项目做测试,可是在idea里面mapper接口注入报错,后来百度查询了下,把idea的注入等级设置为了warning,至于怎末设置可以自行百度,这里不再赘述,但是接下来spring boot能够运行起来,但是通过浏览器访问的时候,就会报错,后来也是经过多方查询,发现了问题的原因,特此记录一下: spring  boot整合mybatis时,要将mapper装配到spring容器中,要在mapper接口中加上@M…
让Spring Boot项目启动时可以根据自定义配置决定初始化哪些Bean 问题描述 实现思路 思路一 [不符合要求] 思路二[满足要求] 思路三[未试验] 问题描述 目前我工作环境下,后端主要的框架是Spring Boot,目前面临的问题也是在Spring Boot中出现的. 具体情况是这样的,期望是搭建一个公用的框架,适用于多种业务场景的,集成好如Redis,日志管理,定时任务管理等一系列配置即用的框架,但是在集成好Activiti框架后我发现有的项目并不需要使用Activiti框架,但是由…
BTrace 是什么 BTrace 是检查和解决线上的问题的杀器,BTrace 可以通过编写脚本的方式,获取程序执行过程中的一切信息,并且,注意了,不用重启服务,是的,不用重启服务.写好脚本,直接用命令执行即可,不用动原程序的代码. 原理 总体来说,BTrace 是基于动态字节码修改技术(Hotswap)来实现运行时 java 程序的跟踪和替换.大体的原理可以用下面的公式描述:Client(Java compile api + attach api) + Agent(脚本解析引擎 + ASM +…
很尴尬,为了使用Spring Boot的Initializr,特意下了个Intellij Idea,刚按提示新建一个Spring Boot的Maven项目后,就出现红叉叉了.因为IDE是新的,开始是Maven配置问题,这样设置一下就可以跑Maven了:File -> Setting -> Build,Excution,Deployment -> Build Tools -> Maven -> 修改Maven home directory.User setting file为你…
前言 之前调试前端bug都是在开发环境中做完并多次测试没有问题之后发布测试环境,验收合格之后发布生产.但生产环境偏偏会有和开发和测试环境不一致的情况,例如测试环境需要加密,而开发环境先不加密,测试环境传给我们的时间格式和生产环境时间格式不一致,数组对象不一致等导致线上生产报错的bug. 为了更好的在线上环境检测到具体的bug,节省我们在本地把地址改为生产的地址并走多一遍流程测试的麻烦,Chrome浏览器dbug测试就显得尤为重要了. 一.定位js代码并标记dbug 首先F12打开控制台,然后选择…
公司最近开发了一个项目是用golang 写的,现在要部署到线上环境去,又不想在服务器上装单独的golang,决定用docker 封装下,直接打到镜像里面,然后就直接在hub.docker.com上面搜了下golang的镜像,直接就docker pull golang 最新的是1.9的版本 然后参考官方的文档弄了下Dockerfile大概是这样: FROM golang MAINTAINER jackluo #指定工作目录 WORKDIR /go/src/ActivitApi COPY . . C…
1.前言 本文主要介绍在XCode5环境下,如何根据App自己生成的crashlog来调试真机上运行时产生的crash问题. 2. 步骤 (1)构造一段会crash的代码,并放到viewDidLoad里面,如下图所示: 以上代码会在objectAtIndex处因为数组越界而crash (2)在程序中捕获crash,生成crashlog,并保存到程序自己的沙盒中,如果需要分析线上bug,也可以将log文件上传到自己的服务器中. 捕获crash很简单,主要是以下步骤: 在didFinishLaunc…
热部署是什么 大家都知道在项目开发过程中,常常会改动页面数据或者修改数据结构,为了显示改动效果,往往需要重启应用查看改变效果,其实就是重新编译生成了新的Class文件,这个文件里记录着和代码等对应的各种信息,然后Class文件将被虚拟机的ClassLoader加载. 而热部署正是利用了这个特点,它监听到如果有Class文件改动了,就会创建一个新的ClaassLoader进行加载该文件,经过一系列的过程,最终将结果呈现在我们眼前. 类加载机制 Java中的类经过编译器可以把代码编译为存储字节码的C…
导读:近期有一个业务部门的同学反馈说他负责的C工程在小概率情况下SpringMvc会返回415,通过输出的日志可以确定是SpringMvc找不到content-type这个头了,具体为什么找不到了呢?请听我娓娓道来. 关键词:http 415,SpringMvc,nginx,lua,wireshark,jmeter 问题现象: 近期接到一个同学的反馈说,他负责的C工程在小概率的情况下SpringMvc会返回415,通过输出的日志发现请求头里面并没有content-type了,所以才导致Sprin…
Spring boot 项目启动过程中: org.springframework.boot.SpringApplication#prepareEnvironment 当程序步入listeners.environmentPrepared(environment);这里后,就会读取配置文件中信息. private ConfigurableEnvironment prepareEnvironment(SpringApplicationRunListeners listeners, Applicatio…
今天用VS Code打开之前基于IDEA搭建并开发的Spring Boot项目,启动调试后出现如下错误: 17:43:05.214 [restartedMain] ERROR org.springframework.boot.SpringApplication - Application run failed java.lang.IllegalStateException: Failed to load property source from location 'classpath:/appl…
Spring Boot提供了两种 “开机自启动” 的方式,ApplicationRunner和CommandLineRunner 这两种方式的目的是为了满足,在容器启动时like执行某些方法.我们可以通过实现ApplicationRunner或者CommandLineRunner来实现,他们都是在SpringAppliaction执行之后开始执行的.这个特性可以让我们自定义一些在容器启动时需要初始化的逻辑 ApplicationRunner接口: 官方doc: Interface used to…
每个项目从开发到测试再到上线所需要的各种环境是不同的,这就需要维护相应的配置文件,比如properties或yml文件.有了配置文件后就要考虑如何与应用进行集成. 对于云环境来讲,项目发布需要打成镜像,再进行部署.如果把spring boot项目连同配置文件(变量)一起打入JAR包并不是一个很好的选择,我们的做法是JAR不包含配置文件,待启动镜像和JAR时将配置文件动态赋值给JAR包. 对于Spring Boot项目,有两种做法可以实现该目的: 1. --spring.config.locati…
Spring Boot项目再启动的时候默认会在控制台输出一个字符banner图案,如下图: 我们可以通过下面的方法关闭启动时显示字符banner图案: 关闭banner方法一: public static void main(String[] args) { SpringApplicationBuilder application=new SpringApplicationBuilder(HelloSpringBootSettingBannerApplication.class); applic…
项目搭建页面 https://start.spring.io/ 各个依赖的作用 List of dependencies for Spring Boot 2.1.5.RELEASE Core DevTools: Spring Boot Development Tools Lombok: Java annotation library which helps to reduce boilerplate code and code faster Configuration Processor: Ge…
知识点: 1.修改端口号 2.修改context-path 3.其它配置说明 配置端口号: Spring boot 默认端口是8080, 如果想要进行更改的话, 只需要修改applicatoin.properties文件, 在配置文件中加入: server.port=8081 配置context-path 在application.properties进行配置: server.context-path=/spring-boot 访问地址就是http://ip:port/spring-boot 其…
用Spring Boot默认支持的 Scheduler来运行定时任务,有时在服务器运行一段时间后会自动关闭.原因:Schedule默认是单线程运行定时任务的,即使是多个不同的定时任务,默认也是单线程运行.当线程挂掉时,定时任务也随之终止. 解决方法: 一.改为多线程执行定时任务: 加一个配置类,实现SchedulingConfigurer接口,重写configureTasks方法即可: import org.springframework.context.annotation.Configura…
Spring Boot Application 事件和监听器 寻找到application.yml的读取的操作. 从spring.factories 中查看到 # Application Listeners org.springframework.context.ApplicationListener=\ org.springframework.boot.context.config.ConfigFileApplicationListener,\ ConfigFileApplicationLis…
昨天在集成shiro-redis的时候,使用sessionId在其他微服务获取用户的session时,发生错误:There is no session with id [xxx]. 查遍了所有资料,基本上说的时cookieId造成的,和我的问题明显不一致,无奈只能down源码,调试跟踪.发现错误代码是因为RedisSessionDAO.doReadSession方法catch了异常后,没有抛出造成的,直接返回一个session 为null的返回值,上代码: @Override protected…
一:pom.xml配置修改 <!--如果想打成jar包,修改为jar--> <packaging>war</packaging> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <!-- 打成war的时候打开注释,本地开发用内嵌tomca…
更多 PM2 的用法介绍请参考: PM2简易使用手册 - 掘金 由于 PM2 通常都用于 node 应用, 所以 exec_mode 应写为 fork, 其中最重要的是 args, -jar 和 jar 包所在的位置应该注明, 如果需要提供其他参数, 也要在 args 中一并注明. 假设创建如下所示的 fz.json, 使用命令 pm2 start fz.json 即可运行 fz.jar. 使用命令 tail -f /home/imzhizi/log/fz-out.log 还可以查看运行日志.…
Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled. 2017-05-13 20:11:30.651 ERROR 1869 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPLICATION…
小插曲 开始很纠结,买了一个 yuancheng.works 域名会不会冒犯到 yuancheng.work 站长. 还在群里咨询了 @Phodal 等前辈.重新搞一个新域名,yuancheng.works 重定向到那个域名上. 后来,我仔细想了一下. 我仅仅是搜集远程工作信息,不求啥利益,最多网站有流量了,挂点儿谷歌广告,养活自己的服务器. 思考再三,我还是用了这个域名,目前穷,裸辞在家学习. 远程.works 的初衷 给大家提供一个了解远程工作的窗口. 远程工作是一种选择,不是逃避,不是不想…
默认情况下,当继承MongoRepository的CRUD在@SpringBootApplication的子包下时,xxxRepository是能够自动被扫描和创建代理的.但是如果不在默认路径下,就无法注入了,即使是扫描路径加到了@ComponentScan也一样. 解决方法: 在springboot启动类中添加@EnableMongoRepositories注解,标注mongoRepository类的路径,如下: @Configuration @EnableMongoRepositories(…
pringboot 项目一般直接地址加端口就可以访问了,不像放在tomcat里面还需要加上项目名. 现在,想访问的时候加上项目名用来区分,只要在配置文件里面加上 server.context-path=/项目名,就可以了 server.context-path=/ProjectName 技术交流群:816227112 原文链接 : https://blog.csdn.net/orangetop/article/details/80598108…
#!/bin/bash nohup java -jar -Dspring.profiles.active=prop app-0.0.1.jar > app.log 2>&1 &…
下载.NET Core SDK 下载地址:https://www.microsoft.com/net/download/windows 第一步:Add the dotnet product feed(添加dotnet产品) To start installing .NET, you'll need to register the Microsoft signature key and add the Microsoft Product feed. This only needs to be do…
下载.NET Core SDK 下载地址:https://www.microsoft.com/net/download/windows 第一步:Add the dotnet product feed(添加dotnet产品) To start installing .NET, you'll need to register the Microsoft signature key and add the Microsoft Product feed. This only needs to be do…