如何有效地使用SprinBoot框架来创建微服务应用程序呢?

就个人而言,笔者在开发许多应用程序时都使用了Spring Boot,而不仅仅是在微服务环境中工作时。如果开发人员尝试使用了Spring Boot而不是标准的Spring Framework配置,那么笔者相信他将再也不想回过头来使用标准的Spring Framework配置。为了支持这个结论,我们找到了一个有趣的图表,它说明了Java框架存储库在GitHub上的流行程度,其网址为

https://redmonk.com/fryan/2017/06/22/language-framework-popularity-a-look-at-java-june-2017/。开发人员也可以通过网络搜索找到最新的此类统计图表。

服务。在这种情况下,很明显它们不应共享公共资源(如数据库或Web容器)。由此可见,在一个Web容器上部署许多WAR文件是微服务所不能接受的模式。因此,Spring Boot是显而易见的选择。

就个人而言,笔者在开发许多应用程序时都使用了Spring Boot,而不仅仅是在微服务环境中工作时。如果开发人员尝试使用了Spring Boot而不是标准的Spring Framework配置,那么笔者相信他将再也不想回过头来使用标准的Spring Framework配置。为了支持这个结论,我们找到了一个有趣的图表,它说明了Java框架存储库在GitHub上的流行程度,其网址为

https://redmonk.com/fryan/2017/06/22/1language-framework-popularity-a-look-at-java-june-2017/。开发人员也可以通过网络搜索找到最新的此类统计图表。

接下来我们将具体讨论如何使用Spring Boot开发应用程序。

使用Spring Boot开发应用程序

===================

要在项目中启用 Spring Boot,我们推荐的方法是使用依赖关系管理系统(DependencyManagement System)。在这里,开发人员可以看到如何在Maven和 Gradle项目中包含适当工件的简短片段。以下是Maven项目pom. xml中的示例片段。

org.springframework.boot

spring-boot-starter-parent1.5.7.RELEASE

org.springframework.boot

spring-boot-starter-web/dependency>

</ dependencies>

使用Gradle,开发人员将不需要定义父依赖项。以下是 build.gradle中的一个片段。

plugins{

id ‘org.springframework.boot’ version ‘1.5.7.RELEASE’

)

dependenciesi

compile( “org.springframework.boot:spring-boot-starter-web: 1.5.7.RELEASE”)

在使用Maven时,没有必要继承

spring-boot-starter-parent POM。或者,开发人员也可以使用以下依赖关系管理机制。

org.springframework .boot

spring-boot-dependencies1.5.7.RELEASE

pom

import

现在,开发人员所需要的只是创建主应用程序类并使用@SpringBootApplication来注解它,这相当于联合使用其他3个注解(Annotation),即@Configuration 、@EnableAutoConfiguration和@ComponentScan:

eSpringBootApplication

public class Application{

public static void main(String[]args){

SpringApplication.run(Application.class, args);

)

一旦声明了主类和 spring-boot-starter-web,则开发人员只需要运行第一个应用程序。而且,如果开发人员使用了诸如 Eclipse或IntelliJ之类的集成开发环境( IntegratedDevelopment Environment,IDE),则应该只运行主类。否则,必须像标准Java应用程序一样使用java -jar命令构建和运行应用程序。首先,开发人员应该在应用程序构建期间提供负责将所有依赖项打包到可执行JAR的配置。这个可执行JAR有时也被称为胖JAR(Fat JAR)。如果在 Maven项目的pom.xml 中定义了spring-boot-maven-plugin,则会执行该操作。

org.springframework.boot

spring-boot-maven-plugin

</ build>

该示例应用程序在Tomcat 容器上仅执行启动Spring环境,Tomcat容器在端口8080上可用。胖JAR的大小约为14MB。开发人员可以使用集成开发环境轻松查看项目中包含的库。这些都是基本的Spring库,如 spring-core、spring-aop、spring-context,Spring Boot,已经嵌入的Tomcat,用于日志记录的库如 Logback、Log4j和Slf4j,此外还有用于JSON的序列化(Serialization)或反序列化(Deserialization)的Jackson库。为项目设置默认的Java版本是一个很好的选择。开发人员可以通过声明java.version属性在pom.xml中轻松设置它。

<java. version>1.8</java.version>

开发人员可以通过向Jetty服务器添加新的依赖项来更改默认的Web容器。

org.springframework.boot

spring-boot-starter-jetty

</ dependency

自定义配置文件

快速创建应用程序并且无须很大的工作量,这两者对于开发人员来说其实是一回事,但同样重要的是能够轻松自定义和覆盖默认设置。在这一方面,Spring Boot可以派上用场,提供支持配置管理的机制。要自定义配置,最简单的方法是使用配置文件,然后将配置文件追加到应用程序胖JAR。Spring Boot 会自动检测名称以application前缀开头的配置文件。它所支持的文件类型是.properties 和.yml。

因此,开发人员可以创建诸如 application.properties或 application.yml 之类的配置文件,甚至包括特定于配置文件的文件,如

application-prod.properties或 application-dev.yml。此外,开发人员还可以使用操作系统环境变量和命令行参数来外部化配置。使用properties或YAML文件时,它们应放在以下位置之一。

口当前应用程序目录的/config子目录。

口当前应用程序目录。

口类路径/config包(例如,在JAR中)。

口类路径根。

如果要为配置文件指定一个特定名称,而不是 application或 application - {profile} ,则需要在启动期间提供spring. config.name环境属性。开发人员还可以使用spring.config.location属性,该属性包含以逗号分隔的目录位置或文件路径列表。

java -jar sample-spring-boot-web.jar - - spring .config. name=example

java -jar sample-spring-boot-web.jar–

spring。config. location=classpath:/example.properties

在配置文件内部,开发人员可以定义两种类型的属性。首先,有一组常见的预定义Spring Boot 属性,它主要由来自sringobo-autoconfigure 库的底层类使用。其次,开发人员还可以考虑定义自己的自定义配置属性,然后使用@ConfigurationProperties或@Value注解将其注入应用程序。

现在可以先从预定义的属性开始。Spring Boot 项目所支持的完整列表可以在它们的说明文档的Common application properties (常见应用程序属性)一节的 Appendix A (附录A)中得到。其中,大多数都特定于某些Spring模块,如数据库、Web 服务器、安全性模块和其他- -些解决方案等,但是也有一组核心属性。 就个人而言,笔者更喜欢使用YAML而不是properties文件,因为YAML文件更方便阅读,当然,具体使用哪一种文件取决于开发人员的个人喜好。最常见的是覆盖应用程序名称之类的属性(该名称将用于服务发现和分布式配置管理)、网络服务器端口、日志或数据库连接设置。

一般来说, application.yml 文件存放在src/main/resources目录中,然后在Maven构建之后位于JAR根目录中。以下是一个配置文件示例,它将覆盖默认服务器端口、应用程序名称和日志记录属性。

server:

port: S{port:2222}

spring:

application:

name: first-service

logging:

pattern:

console: “d{HH:mm:ss.SSs} 号-51eve1- %logger{36} -号msg号n”

file: “&d{HH:mm:ss.SSS) [thread] 8-51evel 8logger{36] - 8msg8n”

level:

org . spr ingframework.web: DEBUG

file: app.1og

这里很值得称道的是,开发人员不必为日志记录配置定义任何其他外部配置文件,如log4j.xml 或logback.xml。 在之前的文件片段中,可以看到我们已经将org,springframework.web的默认日志级别更改为DEBUG和日志模式,并创建了一个日志文件app:log,放置在当前应用程序目录中。现在,默认的应用程序名称是first-service, 默认HTTP端口是2222.

开发人员的自定义配置设置也应放在相同的properties 或YAML文件中。以下是一个带有自定义属性的application.yml示例。

name: first-service

my:

servers:

一dev.bar .com

一foo.bar.com

也可以使用@Value注解注入一个简单的属性。

@Component

public class CustomBean

@Value (“$ (name)”)

private String name;

还可以使用@ConfigurationProperies注解注入更复杂的配置属性。例如,在YAML文件中的my servers属性中定义的值列表即可被注入java.util.List类型的目标bean中。

@ConfigurationProperties (prefix- “my”)

public class Config {

private List servers = new ArrayList();

public List getServers() {

return this.servers;

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

总结

本文从基础到高级再到实战,由浅入深,把MySQL讲的清清楚楚,明明白白,这应该是我目前为止看到过最好的有关MySQL的学习笔记了,我相信如果你把这份笔记认真看完后,无论是工作中碰到的问题还是被面试官问到的问题都能迎刃而解!

MySQL50道高频面试题整理:

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-643gm0P2-1712022516112)]

总结

本文从基础到高级再到实战,由浅入深,把MySQL讲的清清楚楚,明明白白,这应该是我目前为止看到过最好的有关MySQL的学习笔记了,我相信如果你把这份笔记认真看完后,无论是工作中碰到的问题还是被面试官问到的问题都能迎刃而解!

MySQL50道高频面试题整理:

[外链图片转存中…(img-P7wgZM9z-1712022516113)]

  • 28
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值