微服务和单体应用的宏观理解
开始一个HelloWorld应用
HelloWorld分析
使用Spring Initializr快速构建SpringBoot应用
微服务:一组小型应用通过HTTP的方式进行沟通的开发思想
单体应用:ALL IN ONE
单体应用的不足:
随着业务逻辑的不断更新和迭代开发,起初的小型应用会不断膨胀,当应用达到一定规模量时,敏捷开发和部署维护的效率就会举步维艰。也就是说,单体应用的可持续性能力较弱。
微服务的解决方案:
通过分解巨大的单体式应用使得可持续性开发和优化等扩展能力增强。
自由的开发技术选择。(不同组件的功能可以使用更加合适的技术实现)
微服务架构的不足:
微服务本身的分布式系统导致固有复杂性:组件之间消息传递的通讯成本。
迭代开发所遗留的耦合问题依然存在:在修改某一个服务时,其他与之相关的服务不可避免的也要相应修改,但较单体应用来说,业务逻辑更清晰,耦合度更低。
总结:相对来说,单体式开发更加适合简单轻量的应用,微服务虽然仍旧存在不足,但更适合构建复杂应用开发。
org.springframework.boot
spring-boot-starter-parent
2.1.6.RELEASE
org.springframework.boot
spring-boot-starter-web
2.1.6.RELEASE
org.springframework.boot
spring-boot-maven-plugin
package zkrun.top;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class HelloWorld {
public static void main(String[] args) {
SpringApplication.run(HelloWorld.class,args);
}
}
package zkrun.top.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HelloController {
@ResponseBody
@RequestMapping("/hello")
public String hello()
{
return "hello world";
}
}
命令行直接部署
java -jar springboot-helloworld-1.0-SNAPSHOT.jar
org.springframework.boot
spring-boot-starter-parent
2.1.6.RELEASE
spring-boot-starter-parent依赖的父项目spring-boot-dependencies定义了几乎所有经常使用依赖的版本,所以在以后导入依赖通常是不需要写版本号的(除了一些特殊的没有被声明的包)
web模块:
org.springframework.boot
spring-boot-starter-web
2.1.6.RELEASE
springboot是对spring框架的迭代封装(如果把spring理解为Java开发的框架,那springboot就是spring开发的框架)。
举个栗子:在spring开发中常用的jar包,例如spring在web开发中常用的spring-web和spring-webmvc这些都被集成到了spring-boot-starter-web场景启动器中。那么在springboot中开发web应用就不用导入web所需的包,而是直接使用已经集成了web常见包的场景启动器。
通俗来说,场景启动器就是某一类模块的jar包集合。
package zkrun.top;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class HelloWorld {
public static void main(String[] args) {
SpringApplication.run(HelloWorld.class,args);
}
}
将主配置类(@SpringBootApplication标注的类)的所在包及子包里面所有的组件扫描进IOC容器。
package zkrun.top.springboot_quick.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
//@Controller
//@ResponseBody
@RestController
public class HelloControlller {
@RequestMapping("/hello")
public String hello()
{
return "hello world quick";
}
}