分布式和微服务
单体应用:系统界面、静态资源、业务组件等都会在一个工程里,将来发布需要全部发布到一台tomcat服务器上。
分布式:将一个系统的界面、静态资源、业务处理进行拆分,发布到不同的服务器上,然后用户请求过来,调用多个服务器资源处理,给用户响应。
微服务:属于开发分布式应用的架构思想,将大型系统的业务处理部分,进行微型化拆分,拆分出的业务可以独立部署,
这些业务之间可以通过协议进行调用,从而实现一个完整业务处理。
优点:提升系统的性能、扩展性。
微服务架构技术主流有以下两种:
1. SpringBoot+SpringCloud (国外,Pivotal)
2. Dubbo+Zokeerper(国内,阿里)
SpringBoot
SpringBoot是对Spring框架及其相关技术进行的封装,可以简化Spring应用搭建和开发过程。(敏捷开发)
SpringBoot优点:
1. 去除了XML配置方式,完全采用Java配置方式
2. 内置tomcat服务器,自动发布应用(main方法启动)
3. 基于jar包方式发布程序
4. 提供一系列的启动器(jar包集合),便于导入
5. 采用properties或yml文件做配置
6. 提供了自动配置机制,自动创建一些常用对象,例如JdbcTemplate、DataSource、DispatcherServlet等
MAVEN
MAVEN是一个项目构建工具,可以对创建、编译、打包、生成文档等过程进行管理。maven工程都有一个pom.xml文件,
通过在pom.xml追加定义,实现jar包和工具的导入。
MAVEN优点:一种标准化的方式构建项目,一个清晰的方式定义项目的组成,一个容易的方式发布项目的信息,
以及一种简单的方式在多个项目中共享JARs。
SpringBoot程序结构
1. pom.xml导入boot启动器
spring-boot-starter-parent //启动器父项,统一控制版本、jdk版本、编码等
spring-boot-starter //spring核心、boot自动配置、yaml解析等
spring-boot-starter-jdbc //spring-jdbc、hikari
spring-boot-starter-web //springmvc、jackson、restful、tomcat
spring-boot-starter-test //spring-test、junit
spring-boot-starter-data-redis //spring-data-redis
spring-boot-starter-data-jpa //spring-data-jpa
spring-boot-devtools //热启动,代码修改后自动重启
2. 添加application.properties或者application.yml
properties格式
server.port=8888
yml格式
server:
port: 8888
3. 添加启动类RunXxxx
@SpringBootApplication
public class RunBoot {
public static void main(String[] args) {
SpringApplication.run(RunBoot.class);
}
}
4. 业务处理组件(Controller、Service、Dao等)
注意:业务组件一定要放在启动类包下或子包下。
SpringBoot程序启动过程
1. Boot程序启动入口为SpringApplication.run(RunBoot.class, args);
2. 静态run方法内部创建了一个SpringApplication对象,并且执行该对象的run方法
3. 创建SpringApplication对象时,做了一些初始化工作加载Initializers和Listeners组件(根据spring.factories定义加载)
4. run方法内部会创建一个Spring容器对象ApplicationContext(根据底层Env环境不同创建不同的ApplicationContext)
5. run方法内部还会加载启动Logo Banner信息
6. run方法内部对ApplicationContext容器进行各项信息设置,例如bean对象(refreshContext),环境参数(prepareContext),启动Banner等
7. 如果有tomcat等服务器启动服务器,发布程序执行