[mica微服务专栏] mica-launcher 微服务启动器的考虑和使用
前言
微服务中规范往往比代码更加重要,一些良好的规范,能让我们少走弯路。mica-launcher
启动器就是对服务名和服务环境进行了定制的处理,使得企业开发更加方便快捷。
服务名规范
服务名在微服务中起着至关重要的位置,一个好的服务名应该见名知意。下面是笔者在工作中总结的规范。
小开发团队-两级
例如:user-api
- 第一级 服务名
- 第二级 服务类型
多个开发团队-三级
将组名放到第一位,方便快速定位到技术组。
例如:mica-user-api
- 第一级 组名
- 第二级 服务名
- 第三级 服务类型
环境划分
愿景
启动器的使命就是让我们的 jar 在各种环境中都可以方便启动,不用添加过多的配置,减少学习成本,能快速上手。提供了环境的日志打印,避免启动期间的各种问题。
环境划分
dev(开发)、test(测试)、ontest(线上测试)、prod(正式),默认dev
启动环境变量
java命令行:
java -jar app.jar --spring.profiles.active=dev
JAVA_OPS
set JAVA_OPTS="-Dspring.profiles.active=test"
标注方式(代码层面,junit单元测试非常实用)
@ActiveProfiles({"junittest","productprofile"})
ENV方式
系统环境变量 SPRING_PROFILES_ACTIVE(注意:是大写)
背景故事
mica-launcher 最早的雏形初现在笔者的一些 JFinal 项目中,期初主要是为了适应开发阶段的 jetty 和正式环境的 tomcat 日志目录。
在 Spring boot 中我便设计了 mica-launcher 来处理服务环境,使其更加方便好用。
使用
使用起来比原生的 spring boot
启动器里多了一个服务名参数,微服务中服务名对一个服务特别重要,故在启动器启动时写死。
Maven
<dependency>
<groupId>net.dreamlu</groupId>
<artifactId>mica-launcher</artifactId>
</dependency>
Gradle
implementation "net.dreamlu:mica-launcher"
示例:
@SpringBootApplication
public class MicaExampleApplication {
public static void main(String[] args) {
MicaApplication.run("mica-example", MicaExampleApplication.class, args);
}
}
注意:使用了 mica-launcher
启动器,需要结合 mica-test
进行单元测试,具体文章请查看 mica test 单元测试。
启动器自动化配置
代码中可以采用注入 MicaProperties
来读取启动器中的一些变量,比如 env
等。
mica.prop
可以在配置文件中自定义配置
。然后再在代码中使用 MicaProperties
读取。
配置项 | 默认值 | 说明 |
mica.env | dev | 【只读】mica 环境变量,方便在代码中获取,设置无效. |
mica.is-local | false | 【只读】判断是否为 本地开发环境 |
mica.prop | 无 | 装载自定义配置 mica.prop.xxx |
自定义配置
mica:
prop:
site-name: 如梦技术
site-url: https://www.dreamlu.net
配置读取
@Autowired
private MicaProperties micaProperties;
public boolean savePost() {
String siteName = micaProperties.get("site-name");
String siteUrl = micaProperties.get("site-url");
// .....
}
启动器插件扩展
启动器的主要目的是能更加方便的去注入一些通用配置,降低使用难度。mica-log4j2
就是一个启动器的扩展。
插件扩展基于 java SPI 技术,关于 java SPI 具体使用可以百度。
实现 LauncherService,重写 launcher 方法
下面是 LauncherService 的代码。
/**
* launcher 扩展 用于一些组件发现
*
* @author L.cm
*/
public interface LauncherService {
/**
* 启动时 处理 SpringApplicationBuilder
* @param builder SpringApplicationBuilder
* @param env 系统变量 Environment
* @param appName 服务名
* @param profile 环境变量
* @param isLocalDev 是否本地开发
*/
void launcher(SpringApplicationBuilder builder, Environment env, String appName, String profile, boolean isLocalDev);
}
编写 SPI 文件放置到 resources 目录下
文件路径和文件名 META-INF/services/net.dreamlu.mica.launcher.LauncherService
。
内容为你编写的插件完整类名,例如:net.dreamlu.mica.log.LogLauncherServiceImpl
。
最佳实践
mica-launcher
中我们预制了环境变量,您可以再服务里将配置中心按环境来划分域名。在配置中可以使用 ${mica.env} 占位符完成配置。
例如:(配置服务域名)
config-dev.dreamlu.net config-test.dreamlu.net ......
使用示例:
spring:
cloud:
consul:
host: https://config-${mica.env}.dreamlu.vip
port: 8500
config:
format: yaml
相关链接
-
mica 源码 Gitee(码云):https://gitee.com/596392912/mica
-
mica 源码 Github:https://github.com/lets-mica
-
文档地址(官网):https://www.dreamlu.net/#/doc/docs
-
文档地址(语雀-可关注订阅):https://www.yuque.com/dreamlu/mica
关注我们
扫描上面二维码,更多精彩内容每天推荐!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
mybatis-plus源码分析之sql注入器
微信公众号「后端进阶」,专注后端技术分享:Java、Golang、WEB框架、分布式中间件、服务治理等等。 老司机倾囊相授,带你一路进阶,来不及解释了快上车! mybatis-plus是完全基于mybatis开发的一个增强工具,它的设计理念是在mybatis的基础上只做增强不做改变,为简化开发、提高效率而生,它在mybatis的基础上增加了很多实用性的功能,比如增加了乐观锁插件、字段自动填充功能、分页插件、条件构造器、sql注入器等等,这些在开发过程中都是非常实用的功能,mybatis-plus可谓是站在巨人的肩膀上进行了一系列的创新,我个人极力推荐。下面我会详细地从源码的角度分析mybatis-plus(下文简写成mp)是如何实现sql自动注入的原理。 温故知新 我们回顾一下mybatis的Mapper的注册与绑定过程,我之前也写过一篇「Mybatis源码分析之Mapper注册与绑定」,在这篇文章中,我详细地讲解了Mapper绑定的最终目的是将xml或者注解上的sql信息与其对应Mapper类注册到MappedStatement中,既然mybatis-plus的设计理念是在mybat...
-
下一篇
ZooKeeper节点数据量限制引起的Hadoop YARN ResourceManager崩溃原因分析
环境 Hadoop版本:Apache Hadoop 2.6.3 ZooKeeper版本:ZooKeeper 3.4.10 两个ResourceManager节点:主节点RM01,从节点RM02 背景 最近有一次我们的Hadoop监控平台发出ResourceManager(以下简称RM)崩溃的报警信息,于是我们分析了RM的日志和ZooKeeper服务端(以下简称ZK)的日志,异常日志信息分别如下: RM日志 RM01的异常日志如下: 2019-03-03 02:33:01,826 INFO org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore: Retrying operation on ZK. Retry no. 999 2019-03-03 02:33:02,088 INFO org.apache.zookeeper.ClientCnxn: Opening socket connection to server 10.204.245.44/10.204.245.44:5181. Will not a...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker安装Oracle12C,快速搭建Oracle学习环境
- 面试大杂烩
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS关闭SELinux安全模块
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2全家桶,快速入门学习开发网站教程
- MySQL数据库在高并发下的优化方案