springboot框架在哪个软件运行

springboot框架在哪个软件运行,第1张

Spring Boot框架可以在任何支持Java运行的软件中运行,比如Tomcat、Jetty、Undertow等Web容器,也可以在独立的Java虚拟机(JVM)中运行。这是因为Spring Boot框架的核心是Java语言,而Java的跨平台性使得它可以在各种 *** 作系统和软件中运行。
在Web容器中运行Spring Boot框架,需要将Spring Boot应用程序打包成可执行的WAR包或JAR包,然后将其放入Web容器中进行部署和运行。而在独立的JVM中运行Spring Boot框架,则需要将Spring Boot应用程序打包成可执行的JAR包,然后通过命令行或脚本启动JAR包即可。
此外,Spring Boot还提供了Spring Boot CLI工具,可以在命令行中快速创建、运行和测试Spring Boot应用程序,这对于快速原型开发和测试非常方便。
总之,Spring Boot框架可以在任何支持Java运行的软件中运行,这也是Java作为一种跨平台语言的优点所在。

Spring Boot MapStruct 是什么

在一个成熟的工程中,尤其是现在的分布式系统中,应用与应用之间,还有单独的应用细分模块之后,DO 一般不会让外部依赖,这时候需要在提供对外接口的模块里放 DTO 用于对象传输,也即是 DO 对象对内,DTO对象对外,DTO 可以根据业务需要变更,并不需要映射 DO 的全部属性。

这种 对象与对象之间的互相转换,就需要有一个专门用来解决转换问题的工具,毕竟每一个字段都 get/set 会很麻烦。

MapStruct 就是这样的一个属性映射工具,只需要定义一个 Mapper 接口,MapStruct 就会自动实现这个映射接口,避免了复杂繁琐的映射实现。MapStruct官网地址: mapstructorg/

Maven 的配置
pomxml

写转换关系

SpringBoot自动装配是springboot重要的功能点。Boot系列、其它框架与Boot的整合很多是基于自动装配的。 我们在写SpringBoot项目时,Maven的pom依赖能看到很多的starter 都是基于自动装配的

自动装配的原理 网上已经有很多的讲解了,这里不再冗余了。

ProviderConfigration

@Configuration注解在类上表示此类为自动装配类。@Bean通常与@Configuration 一起使用,将方法的返回值注入到spring的bean容器中

@Bean 注解的方法是将方法名做为beanName。上面ProviderProperties这个Bean 在spring容器中的beanName为providerHpProperties(作者工作中踩过这个坑)

@ConditionalOnProperty 不讲解。SpringBoot有很多的@ConditionalXXX 实现条件式注入bean。感兴趣的可以下去了解一下

@ConfigurationProperties 将配置文件的符合规则的key 对应的映射到文件中。

prefix :前缀

ignoreInvalidFields :配置true时不能被正常解析的属性会忽略,spring正常启动。默认为false,解析失败时报错。简单来说就是类型不匹配。

ignoreUnknownFields:配置true时属性未找到时会忽略,spring正常启动。默认为false,未找到时报错。简单来说就是没找到。

对应的配置文件

此时我们已经通过自动装配的方式向Spring的bean容器中注册了两个bean,分别为:ProviderProperties、ProviderSwitch

使用和其它bean一样,@Autowired即可。

如果你写的自动装配类是用于本项目的。那么需要注意@Configuration注解的类需要在scanBasePackages扫包的路径内,否则spring无法加载到自动装配类。更别谈自动装配了(如果在springfactories文件中配了,可以不用扫包 *** 作。见下文)。

很多时候我们需要编写像SDK这样供外界系统使用的包。我们又想最小程度上减轻引入方的配置(不想让三方去添加扫包 *** 作),那么此时自动装配就起到了关键性的作用(SpringBoot很多的starter都是这样)。下面来说一下具体的流程

在resources目录下创建META-INF/springfactories文件。

文件结构key,value的形式。key为EnableAutoConfiguration(因为我们这章将的是自动装配),value为我们编写的Configration类全路径

SPI文件有很多的扩展点(很多的配置项key),不在一一叙述。可以在idea中直接搜索springfactories,可以看到有很多。

SpringBoot在启动中会找到Path下面的所有springfactories文件,并使用SpringFactoriesLoader将文件加载解析为K,V的形式。

在按照key分发至对应的扩展点,将配置的value(就是class全路径)加载解析到Spring中,实现SPI。

在我们完成了以上几步后,我们的sdk包中的自动装配就完成啦。三方引入时也不用扫包啦。

偷偷告诉大家:@Configuration 可以和 @ComponentScan一起使用,如下:

这样comhpconfig包及子目录 也会被spring扫描到。作为一个SDK 既不用三方去扫包,又可以自己扫描一些特定包,岂不是美哉!

在引入了以下依赖后

直接mvn package 命令后,在target目录下可以找到以下文件

将spring-configuration-metadatajson 拷贝到resources的META-INF目录下。

之后在编写配置文件的时候就会有提示,如下

作为一个sdk包,三方在使用的时候一定会对你竖起大拇指的。心想:这个人真强!

好的以上就是分享的内容啦。希望大家看了后会有收获,对编码上会有帮助!

11点了,该睡觉了。

对了,今天三妹说我有点小帅(我老婆,我是二哥她是三妹)!哈哈哈!今晚睡觉怕是要笑出声了 QAQ

背景

随着公司一年多的成长,我们已经开发了数十个项目了,后台有JAVA的有PHP的,为了更好地提升开发与管理效率,各技术大牛小牛们时常进行激烈的PK,碰撞出了许许多多爱的火花,比如其中之一:微服务实践

设计

只需要有一套BASE微服务,BASE微服务生成业务系统微服务实例,供各个业务系统调用;业务系统不直接调用BASE,只能调用微服务INSTANCE。

这是运维的问题,让运维去解决,运维使用工具,实际也不算困难,反正执行的都是脚本,不需要手工 *** 作。

单点故障影响全局,我们选择了稳定更重要;另外saas的话,为了应对不同行业,会存在过度设计的嫌疑;私有化更容易。

调用逻辑

设计理念

非模块化,谈不上微服务,比如我们上面的用户微服务、产品微服务、地址微服务等,都需要先模块化,为了更好地落实开发,你可能不得不,边模块化边微服务,模块化的时候要注意,不能有关联查询,包要完全独立,到时候微服务才能拆开。

松耦合表示我们模块之间不直接依赖,无状态,可以单独地为外界提供服务;

强内聚是指,我们虽然要拆分成一个个小的微服务,但是也要考虑某些功能的强关联性,比如一个凳子是由四个脚与一个板组成,我们不能把四个脚与板分开售卖,就没有意义了。

开发

spring-boot :较springmvc更加简约了,springmvc有一大零的配置文件,比如spring-servlet、spring-mybatis、springxml与webxml,这些在spring-boot都不需要了,只需要强大的注解功能即可,boot更合适微服务。

spring-cloud :里面有比较多组件,用于支持微服务,比如spring cloud config统一配置中心,用于多环境的配置文件配置,大家再也不用为多个微服务的开发、测试与生产环境的配置文件管理而发愁了;spring cloud eureka用于服务注册与发现,下面有单独介绍;其它的组件大家可以去官网看看,这里不一一介绍,总之如果JAVA平台,尽量使用spring体系的内容。

我们采用mysql,因为我们是应用多,但数据量单表并不算大,多则不超过百万,mongodb也实验过,开发非常快,也非常灵活,但因为不是关系型数据库,维护成本较高。

RESTFUL :URL的资源与 *** 作解耦,让URL更加符合语义,上百个接口也非常好管理,网上有很多文章讲得非常透彻,这玩意不是特别好理解,要多领悟,在项目中实践,就有矛塞盾开的感觉,这里不做详细介绍。

接口文档swagger :比起传统全手工写接口文档,swagger有统一的输出格式,不管是几个人写的;swagger采用写代码的方式来写接口文档,以前修改了代码,还必须打开wiki手工修改接口文档,现在只需要修改一下代码即可,程序员更愿意修改了,成本更低了,前端与其它调用者不会天天吼着,你这接口咋又变了,新加的字段是啥意思呀。

RocketMQ:一直纠结kafka与rocketMQ,最终选择了RocketMQ

为了性能上面的考虑,尽量使用异步编程,比如注册送优惠券,那么注册成功就可以给用户返回注册成功了,但是送优惠券可以是异步调用的,不阻塞注册的线程。

微服务框架下,日志不可能还分散在各个服务节点上,必须有统一的日志中心。ELK是一个实时日志分析平台,就是将各个服务的日志汇总于日志中心,然后可以按照系统、节点等进行搜索,除上述搜索条件外,我们还在各个微服务实现了按照业务id(一次请求生成一个业务id)与用户id搜索日志,方便跟踪与定位问题。

当然可能有更加轻量级与好用的disconf或spring cloud config,但是我们有php开发的应用,以上二者都不支持。如果全是JAVA应用,采用disconf还是非常不错的。

测试

每个程序员都有这样的经历,刚上线,客户又反馈了bug,原来是我们修改某个功能代码的时候,导致了其它功能的bug,每次上线心里都没底;这就体现了接口测试的必须性,尤其是每次版本升级的时候,都需要执行一遍,以防修改某个接口导致其它接口报错,比手动测试靠谱许多。

部署

docker已经家喻户晓了,这是继虚拟机以后,又一重大变革,将所有的单个微服务都放在docker中,这样你何时何地想部署,直接丢过去就OK了,快到爆。

用几句简单的命令就搞定了负载均衡,而且还可以平滑升级,版本升级的时候,大家就不用告诉客户:系统通知,某日某晚00:00-08:00我行处于系统升级维护中,大家不要去取钱哦,因为你可能取不出来,呵呵。

升级

我们采用工具flyway,可以对数据库脚本进行版本控制。

传统的版本升级,

1开发推代码并同时记录自己提交了哪些文件;

2项目经理根据svn审核文件,并打包成war包;

3投到测试环境让测试公司测试;

4中途修改了文件,可能需要重新打包;

我都写不下去了,项目经理像个超人似的。

现在用持续集成(CI)非常简单,我们用的工具是Jenkins,推完代码,点几下按钮就完成了上线,不管是测试环境,还是生产环境都非常简单,不然项目经理核对文件眼睛都绿了。

结尾

本文主要是介绍微服务开发上的选型,对于细则不做深究,大家感兴趣可以了解下各个组件。当然,我们的选型未免正确,不同场景应用可能完全不同,本文仅供参考。

  SSL是Secure Socket Layer的缩写,中文名为安全套接层协议。使用该协议后,您提交的所有数据会首先加密后,再提交到网易邮箱,从而可以有效防止黑客**您的用户名、密码和通讯内容,保证了您个人内容的安全。
SSL证书: 是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。因为配置在服务器上,也称为SSL服务器证书。
ssl也是传输协议。
基于ssl协议开发的一款软件叫openssl。
linux系统默认已经安装。
>

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/13041618.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-29
下一篇 2023-05-29

发表评论

登录后才能评论

评论列表(0条)

保存