前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot——HelloWorld

SpringBoot——HelloWorld

作者头像
Noneplus
发布2019-09-24 16:16:49
7800
发布2019-09-24 16:16:49
举报
文章被收录于专栏:开发笔记开发笔记

微服务和单体应用的宏观理解

微服务:一组小型应用通过HTTP的方式进行沟通的开发思想 单体应用:ALL IN ONE 单体应用的不足: 随着业务逻辑的不断更新和迭代开发,起初的小型应用会不断膨胀,当应用达到一定规模量时,敏捷开发和部署维护的效率就会举步维艰。也就是说,单体应用的可持续性能力较弱。 微服务的解决方案: 通过分解巨大的单体式应用使得可持续性开发和优化等扩展能力增强。 自由的开发技术选择。(不同组件的功能可以使用更加合适的技术实现) 微服务架构的不足: 微服务本身的分布式系统导致固有复杂性:组件之间消息传递的通讯成本。 迭代开发所遗留的耦合问题依然存在:在修改某一个服务时,其他与之相关的服务不可避免的也要相应修改,但较单体应用来说,业务逻辑更清晰,耦合度更低。 总结:相对来说,单体式开发更加适合简单轻量的应用,微服务虽然仍旧存在不足,但更适合构建复杂应用开发。

新的体会:

根据演化原则,微服务是单体应用在业务发展到一定规模的演化策略。微服务的出现并不是替换单体,而是在单体应用无法满足业务需求的情况下破局的一种解决方案。

【举个栗子】

  • 2003年4月,淘宝秘密起始于湖畔花园,购买了一个LAMP(Linux+Apache+MySQL+PHP)架构的网站。
img
img
  • (2008年后)服务化/中心化的业务系统架构
img
img

LAMP架构是最简单的架构,但是同时也是最合适当初淘宝的架构。在淘宝无人问津的时代,几个亿的并发量又有什么意义呢?最初的LAMP到使用Oracle数据库,经历重量级EJB框架的淘宝,最终实现服务化的架构模式。

技术的作用是实现业务,业务的发展才是技术革新的标准。

更多淘宝技术发展可参考:https://blog.csdn.net/wp1603710463/article/details/50166797


微服务架构是这个时代最火的技术,但却不是业务的起点。

反手一个HelloWorld

环境:JDK8

开发工具:Intellij IDEA

SpringBoot版本:2.1.8

Maven和Tomcat都是使用IDEA内置的。

使用Spring Initializr构建应用

  • 创建工程
1568260736945
1568260736945
1568260807248
1568260807248

选择web模块测试

1568260841696
1568260841696
  • 创建Controller测试
1568261112940
1568261112940
代码语言:javascript
复制
package zkrun.top.helloworld.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {


    @RequestMapping("/hello")
    public String hello()
    {
        return "hello SpringBoot!";
    }
}
  • 启动
1568261163680
1568261163680
  • 访问:http://localhost:8080/hello
1568261201001
1568261201001

关于RestController

1568261267260
1568261267260

关于POM

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.8.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>zkrun.top</groupId>
    <artifactId>helloworld</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>helloworld</name>
    <description>Demo project for Spring Boot</description>

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

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

parent版本仲裁

代码语言:javascript
复制
 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.8.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

spring-boot-starter-parent依赖的父项目spring-boot-dependencies定义了经常使用依赖的版本,所以在以后导入依赖通常是不需要写版本号的(除了一些特殊的没有被声明的包)

1568261496300
1568261496300

spring-boot-starter场景启动器

比如说web场景启动器包含了诸如Tomcat,webmvc等场景启动器

1568261659130
1568261659130

webmvc场景启动器又包含了beans,core,web等jar包

1568261831930
1568261831930

场景启动器是将开发时常用的jar包根据使用的场景进行了一次整合,使得开发更加的方便,快速。

【同时一定程度上解决了自己引用jar包导致的冲突,但也会导致jar包不可见性,使得开发者在熟悉底层原理的到路上越走越远,有利有弊吧】

@SpringBootApplication

1568262109871
1568262109871

@SpringBootApplication包含@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan等注解

1568262155660
1568262155660

@SpringBootConfiguration包含@Configuration

1568262210210
1568262210210

@Configuration包含@Component

1568262306101
1568262306101

@EnableAutoConfiguration开启自动配置包含

1568262434887
1568262434887

@AutoConfigurationPackage包含

1568262457020
1568262457020

将主配置类(@SpringBootApplication标注的类)的所在包及子包里面所有的组件扫描进IOC容器。

部署

1568262739454
1568262739454
1568262753007
1568262753007

找到jar所在目录

代码语言:javascript
复制
java -jar helloworld-0.0.1-SNAPSHOT.jar

访问:http://localhost:8080/hello

1568262920952
1568262920952

代码参考:

https://github.com/HCJ-shadow/SpringBootPlus

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 微服务和单体应用的宏观理解
    • 新的体会:
    • 反手一个HelloWorld
      • 使用Spring Initializr构建应用
        • 关于RestController
          • 关于POM
            • parent版本仲裁
            • spring-boot-starter场景启动器
            • @SpringBootApplication
        • 部署
        • 代码参考:
        相关产品与服务
        云数据库 MySQL
        腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档