spring cloud eureka 注册服务显示IP端口号
Spring cloud 显示 INSTANCE-ID 如果以IP + 端口号的形式显示,会更清析的定位每个服务所在的机器节点的状态。
依赖的 pom12345<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-commons</artifactId> <version>2.1.0.RELEASE</version></dependency>
yml 相关配置1234567eureka: client: service-url: defaultZone: http://10.168.16.101:8761/eureka/ instance: instance-id: ${spring.cloud.client.ip-address}:${spring.application.instance_id:${serve ...
spring cloud 四种服务下线方式
这里指已经在 Eureka 注册中心注册的服务,如果需要停用,有四种方式进行停用。
1.直接关闭最粗暴。写这个是因为,直接关闭,如果 Eureka 开了保护模式,会导至服务已关闭,但是未下线,还是会重试调用。如果不需强稳定性的话可以这么干。
2.客户端主动通知注册中心下线安全。Eureka注册中心在收到某个客户端下线后不会马上通知所有的注册的客户端,而是等到客户端进行心跳的时候(心跳(续约)频率,默认30秒 )再将下的数据返回。通过这种方式下线的话,可以在某个服务下线后防止其他服务调用此服务失败。
白话就是,服务状态下线了,但是不通知其他服务。等到续约时间到了,再通知所有注册服务。
猜测,服务下线后,在没有心跳前,其他服务还是可以进行调用。等到心跳后,通知所有服务已下线,其他服务认为已下线,就不会再调该下线服务。
12345678 @Autowired private DiscoveryClient client; @ResponseBody @GetMapping("/eurekaUnRegister") public String shut ...
springboot 发送邮件
最近重写一个邮件服务来给告警业服务用,做成一个内置的应用。直接使用 spring 的 javamail 来实现。公司使用腾讯企业邮箱。这个例子正常使用,可以直接套上使用。
邮件配置以下配置方式二选一
代码方式
yml方式
代码方式1234567891011121314151617181920212223242526272829303132333435363738394041424344454647package com.liukai.springmail.send;import org.springframework.beans.factory.annotation.Configurable;import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;import org.springframework.boot.autocon ...
静态资源配置的问题
spring boot 的项目是将静态资源打包到.jar 的文件包中, 项目中有碰到需要使用外部静态资源的情况,使用外部资源的一直老出问题,查了google 后发现是指定的方式不对。
静态资源配置将 resource/static 进行映射,springboot 默认优先级:
/META-INF/resources//resources//static//public/
spring 属性合配 resources 配置1.本项目包含路径:
12345spring:mvc: static-path-pattern: /lateresources: static-locations: classpath:/templates/dist/
这两天遇到的坑
2.指定项目外的磁盘路径如果要映射本地磁盘路径,可以使用,注意必须得有 file:, 注意必须得有file:,注意必须得有file: 否则 404, 重要事情说三遍。
12345spring:mvc: static-path-pattern: /lateresources: static-locations: fil ...
springboot 注解实现日志切面
项目中很多时候需要去打印方法入参和出参的日志,有助于排查错误。注解需要操作简单。常用的方式之一就是使用切面来切日志。
步骤:
定义自定义注解
编写自定义注解的切面方法
使用注解在需要输出日志的方法上
1.自定义注解1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253/** * * controller 注解切面 * @author liukai * @data 2018/8/7 15:26. */@Target({ElementType.PARAMETER, ElementType.METHOD})//目标是方法@Retention(RetentionPolicy.RUNTIME)//注解会在class中存在,运行时可通过反射获取@Documented//文档生成时,该注解将被包含在javadoc中,可去掉@Inheritedpublic @interface ControllerLog { /** ...
什么是上下文context
上下文(背景/语境) context是当前运行程序的环境。网上各种不可说,模糊不清,但是一个概念的提出肯定有最初的含义。
总结上下文可以理解成:
上下文指由代码已运行的程序环境,不是指代码。
一组状态,这个好理解,取 spring cloud 的官方文档的例子:
一个Spring Cloud应用程序通过创建一个"引导"上下文来进行操作,这个上下文是主应用程序的父上下文。引导上下文使用与主应用程序上下文不同的外部配置约定,因此使用bootstrap.yml application.yml(或.properties)代替引导和主上下文的外部配置。这里所谓的 引导上下文 就是一组状态,实际就是一个保存配置的大对象,换个角度理就是环境。
环境背景每一段程序都有很多外部变量。只有像Add这种简单的函数才是没有外部变量的。一旦你的一段程序有了外部变量,这段程序就不完整,不能独立运行。你为了使他们运行,就要给所有的外部变量一个一个写一些值进去。这些值的集合就叫上下文。
摘自知乎
和其他传入对象参数没什么区别。但是通常使用Context来描述有几个特点:被传入Context的 ...
spring boot 使用maven打jar包配置
使用 ide 进行开发时,直接在ide上启动即可,如果要放到服务器上进行使用,就必须打成jar包,这里使用 maven 的打包插件进行打包。注意 <mainClass>com.devops.WebApplication</mainClass> 这行要改成你的启动类。
1234567891011121314151617181920212223242526272829303132<build> <finalName>devops-web</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> ...
spring boot 添加默认根路径跳转
同一组数据分组需求:一个 list 里可能会有出现一个用户多条数据的情况。要把多条用户数据合并成一条。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 public static void main(String[] args) { List<User> users = Arrays.asList( new User(1, "liu big big", "123456789"), new User(2, "liu big big", "987654321"), new User(3, "su xiao xiao", "55555555& ...
springboot打war包
spring boot 在内置了 tomcat,但是会使用到外置 tomcat 的情况。在使用外置 tomcat 时需要让 spring boot 的打包方式打成 war 包。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273<build> <finalName>fund</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> < ...
CommandLineRunner 指定启动顺序
这个实际是可以用来当用启动时加载某些程序,相当于以前的 static{ } 这种块。这种方式优雅的多。
12345678910@Component@Order(value=1)public class Runner1 implements CommandLineRunner { @Override public void run(String... args) throws Exception { System.out.println("执行顺序 -> 1"); }}
12345678910@Component@Order(value=2)public class Runner2 implements CommandLineRunner { @Override public void run(String... args) throws Exception { System.out.println("执行顺序 ...