Spring与Spring Boot

从开发及架构上,Spring框架具有以下优点:

  1. Spring的依赖反转功能让我们可以开发出方便进行测试的代码。
  2. 提供了易用、灵活、强大的数据事务管理支持功能。
  3. Spring强大的开放基因,使得其可以和众多框架,如JAP/hibernate、JSF、Kafka、RabbitMQ、Thymeleaf等整合。
  4. 提供了标准化的Web应用开发支持Spring MVC。

Spring Boot框架所提供的自动配置机制可以完成这些配置,快速启动一个项目,并且在后续的开发上配置保持最简。

在使用上,Spring Boot通过提供一系列名称以spring-boot-starter开头的启动器帮助我们简化项目的依赖。

  1. spring-boot-starter-web:Web应用开发
  2. spring-boot-starter-logging:日志处理
  3. spring-boot-starter-jpa:数据存储管理
  4. spring-boot-starter-security:安全管理
  5. spring-boot-starter-actuator:应用监控
  6. spring-boot-starter-data-redis:Redis数据库集成
  7. spring-boot-starter-amqp:消息中间件集成。

快速启动Spring Boot

2、编写应用引导类

@SpringBootApplication注解告诉Spring容器:使用该类作为所有Bean源,通过该起始点构建应用的上下文。

@SpringBootApplication注解继承自@EnableAutoConfiguration和@ComponentScan,通过该注解使得项目启动时Spring就会对该类所属目录下的所有子包进行扫描并根据SpringBoot的自动配置机制进行配置。

Application类的main()方法调用了SpringApplication.run(),该方法在项目启动时构建一个Spring容器,并返回一个ApplicationContext对象,也就是项目应用的上下文。

对于引导类来说其是整个应用启动的初始点,因为,如果在应用启动时需要进行某些初始化处理,那么最好都在该类中完成。

3、编写配置文件

Spring Boot配置文件支持properties和yml两种格式,默认文件名称都是application,存放在resources目录中。

4、运行项目

对后续将要编写的微服务来说,更多的时候是打包成一个部署单元。在打包时就会使用Maven脚本中配置的spring-boot-maven-plugin插件,然后通过mvn clean package命令将项目打包成一个Fat Jar,在生产环境下可以直接使用java -jar test.jar。

Fat jar是通过Mavne打包所生成的这种Jar不仅仅包含本项目中源码所编译生成的Java类文件,还会包含项目所依赖的第三方库及有关项目启动的相关信息。

spring-boot-starter-web默认依赖了spring-boot-starter-tomcat,通过该依赖,SpringBoot在启动应用时就会启动一个内嵌的Tomcat容器,并在该容器中运行项目。如果不想使用Tomcat作为启动容器,而是使用Jetty,那么可以在pom.xml文件中排除对Tomcat的依赖,并增加spring-boot-starter-jetty。

使用SpringBoot构建实例项目

1、经典三层应用架构

架构分层采用最广泛三层架构开发

  1. 客户端层UI层:主要用来与用户进行交互,显示数据并接受用户的输入。
  2. 应用层:关注业务规则的制定和业务流程的实现,负责与UI层进行交互及数据存储的处理。
    1. 业务逻辑层:定义业务实体(Domain),业务逻辑的具体实现(Service)。
    2. 接口层(API层):使用REST方式提供API接口,提供数据集业务处理(Controller)。
    3. 数据接口层(DAO):负责业务实体对象的数据处理(Repository)。
  3. 存储层:即持久层,主要用来保存我们的业务数据(Mysql、MongoDB、Redis或者文件存储系统)。

2、设计业务实体

清晰地识别出这些业务实体,以及它们之间如何交互及关联关系之后,才能进行下一步开发。

这些业务实体是开发系统的核心,一旦业务实体对象定义不合理,往往会造成业务逻辑实现的复杂度升高及系统灵活性降低,甚至可能需要重新设计开发。

3、实现数据管理

ORM(Object Relational Mapping)框架可以辅助将业务对象通过映射的方式存储到数据库中,而不需要使用最原始的SQL语句。

JPA(Java Persistence API)完成数据存储处理。通过JPA可以将业务与具体所要存储的数据库解耦,方便在多种数据库之间进行切换。

  1. @Entoty:指所注解的类会被认为是JPA的一个实体对象,JAP就会对该对象进行映射处理。
  2. @Id: 用来注解数据库主键,并且通过@GeneratedValue自动生成主键的方式,默认使用数据自增方式
  3. @OneToOne、@OneToMany、@ManyToOne、@ManyToMany:实体关联关系,用来处理业务实体之间一对一、一对多、多对一、多对多关系的声明。
  4. @Table :注解使用在业务实体类上,自定义实体类映射到数据库具体哪张表上。
  5. @Column :使用该注解自定义字段映射关系。

4、编写业务逻辑层

按照开发方式来说,设计和开发的顺序应该是:Entity->REST API->业务逻辑层->数据存储层,通过测试驱动的方式设计锁需要的功能。

DTO(Data Transfer Object):数据传输对象,用来处理跨进程或网络传输数据聚合容器。

5、编写RESTful API(Controller层)

Spring MVC针对Controller提供了两个注解@Controller和@RestController。

@RestController注解,在该类中所有使用了@RequestMapping的方法就会返回响应体(response body)。

@Controller注解,则会将HTML部分的代码也一起返回给调用者。

@RequestMapping注解,可以使用在方法或类上,如果是注解在类上,那么该类中所有注解的方法都会继承类中锁声明的属性。@GetMapping和@PostMapping,分别处理GET和POST请求。

6、数据库初始化

SpringBoot框架提供的Spring JDBC初始化DataSource特性,是在启动系统时检测classpath根目录下是否有schema.sql和data.sql脚本文件,如果这两个脚本文件都存在或其中一个,将会尝试加载并执行该脚本。如果脚本初始化产生异常,那么应用系统启动将会失败。

还可以在配置文件中通过设置spring.datasource.schema属性的值,定义数据库创建脚本的位置,通过spring.datasource.data属性设置数据初始化脚本的位置。如果将spring.datasource.initialize属性设置为false,则在启动时不将不执行数据库初始化处理。

使用@onetomany取不到值_SpringCloud微服务架构篇2:微服务基础—SpringBoot使用相关推荐

  1. Spring Cloud构建微服务架构(五)服务网关

    通过之前几篇Spring Cloud中几个核心组件的介绍,我们已经可以构建一个简略的(不够完善)微服务架构了.比如下图所示: alt 我们使用Spring Cloud Netflix中的Eureka实 ...

  2. 什么是微服务架构?什么是服务注册与服务发现?

    文章目录 基础名词 分布式 高可用 集群 什么是微服务 服务注册与服务发现 SpringCloud Alibaba 服务关系以及调用关系 服务注册中心 Nacos服务发现的领域模型 Nacos元数据 ...

  3. SpringCloud微服务架构实战:微服务治理

    微服务治理 Spring Cloud 工具套件为微服务治理提供了全面的技术支持.这些治理工具主要包括服务的注册与发现.负载均衡管理.动态路由.服务降级和故障转移.链路跟踪.服务监控等.微服务治理的主要 ...

  4. Spring Cloud 云架构下的微服务架构:部门微服务(Dept)

    作者 | springML 来源 | CSDN 博客 责编 | Carol 出品 | CSDN云计算(ID:CSDNcloud) 封图| CSDN下载于视觉中国 对于 Rest 基础架构实现处理是 S ...

  5. 1.微服务架构-什么是微服务

    什么是微服务 我们先来看看为什么要考虑使用微服务. 构建单体应用 我们假设,您开始开发一个打车应用,打算与 Uber 和 Hailo 竞争.经过初步交流和需求收集,您开始手动或者使用类似 Rails. ...

  6. 微服务架构 与 Dubbo 微服务框架、SpringCloud 微服务框架 详解

    微服务架构 与 Dubbo 微服务框架.SpringCloud 微服务框架 详解 什么是微服务架构? 微服务架构就是将单体的应用程序分成多个应用程序,这一个应用程序就组成一个服务,这多个应用程序就组成 ...

  7. hystrix 页面_SpringCloud微服务架构篇5:微服务熔断机制-Hystrix

    由于网络原因或者自身的原因,微服务并不能保证服务百分之百可用.如果单个服务出现问题,则调用该服务时会出现延迟甚至调用失败的情况:若调用失败,用户则会重新刷新页面并尝试再次调用,再加上其他服务的调用,从 ...

  8. 微应用是什么_SpringCloud微服务架构篇1:微服务架构开发

    大型分布式系统具有复杂性.隐匿性.配合性和易变性四大难题,不会存在任何单一软件工程上的突破,能让开发生产力得到一个数量级上的提升. 1.单体架构应用的困境 一个典型的单体架构应用就是将一个应用中所有的 ...

  9. php微服务架构设计模式,《微服务架构设计模式》读书笔记---第十一章:开发面向生产环境的微服务应用...

    为了部署到生产环境中,需要考虑三个关键的质量属性:安全性,可配置性和可观测性. 开发安全的服务 需要实现安全性的四个方面: 身份验证. 访问授权.验证是否允许访问主体对指定数据完成请求的操作. 审计. ...

最新文章

  1. 使用深度学习阅读和分类扫描文档
  2. SQL操作的组成部分-数据查询
  3. Python多线程技术增加网站帖子的查看量
  4. 4g无线网卡搭建服务器,我买了一个4G无线网卡,可不知道怎么在手机里使用?
  5. [转]Windows 7 蓝屏后获取 MEMORY.DMP 文件及注意事项
  6. vue点击ul中的li显示,点击其他地方隐藏
  7. COM组件设计与应用(三)(转载)
  8. jsp value设置为函数的返回值_python中的生成器函数是如何工作的?
  9. spring定时,cronExpression表达式解释
  10. hdu acmsteps 2.1.3 Cake
  11. 数据库--Oracle
  12. 人工智能及其应用-产生式系统实验-植物识别系统-java
  13. 如何从CPU顶盖获取有用信息
  14. 从T7模型中取训练参数
  15. Excel如何在表格内打勾
  16. java程序员3-5年职业规划,附源代码
  17. Android 面试必备 - 线程
  18. 拼多多店铺是如何运营高客单价的商品,拼多多可以买高客单价的商品吗?
  19. 点赋网络:网店详情页设计中应包含哪些设计元素
  20. 几个常用的、重要的网络命令!(ping,Tracert ,winipcfg等)

热门文章

  1. 【编码】-整数排序-2016.08.10
  2. PLSQL大数据生成规则
  3. 定制软件项目经理应该善于说“NO”
  4. OpenCV-实现背景分离(可用于更改证件照底色)
  5. 华为机试HJ12:字符串反转
  6. linux activemq修改端口号,linux下 activemq集群配置
  7. 前端 鼠标一次移动半个像素_今天来说说鼠标的DPI该怎么设置
  8. php状态机,有限状态机FSM的原理与GO的实现
  9. 这8款开源自动化测试框架,你还没用上?
  10. 一个人学的软件测试,到底有多难?