Spring Boot 起步
………………………………………………………………………………………………………………
【应用配置】application.yml 【port】【context-path】【datasource】【jpa】
@Value("${var}") 可取到 yml 所声明的变量
@ConfigurationProperties(prefix="yourgroup") 一次性取到 yml 所声明一组变量
【profile 机制】application.yml application-dev.xml application-prod.xml
spring.profiles.active=dev (properties写法,常用在说明文档)
……………………………………………………………………………………………………………………………………
【Controller】@RestController = @ResponseBody+@Controller 可以返回 JSON
@RequestMapping(路由,方法) 懒人写法 @GetMapping @PostMapping
@PathVariable 等同于 express 中的 req.params 大家都爱叫路径参数 请求参数 路径变量...
@RequestParam 等同于 req.query ,记住 Servlet的req.getParameter是不区分 urlencoded 来的还是 form-data。
…………………………………………………………………………………………………………………………………………
【REST API】http://en.wikipedia.org/wiki/Representational_state_transfer
GET /grils
POST /grils
GET /girls/id
PUT /grils/id 如果没有则创建,postman注意使用 x-www-form-urlencoded 而不是 form-data
DELETE /girls/id
【mysql】jdbc:mysql://127.0.0.1:3306/dbname
spring.datasource.driver...
【jpa】比较流行 hibernate 实现 JPA 规范。
jpa.hibernate.ddl-auto:create # 每次启动应用都创建一个
jpa.hibernate.ddl-auto:update # 每次启动应用都创建一个
jpa.hibernate.show-sql
public interface GrilRepository extends JpaRepository<Gril,Integer>{}//使用默认实现
【模型设计】
@Entity
@Id
@GeneratedValue
getter setter / accessor mutator
【实现路由 REST API】
1.查看 设计 逐一实现 比如表单验证 @Valid @Min @NotNull ...
2.使用 JPA 规范 API 比如签名 findOne findById
……………………………………………………………………
【Service 层】业务逻辑,让controller专注于HTTP请求路由。
@Service
@Trancsational 事务原子操作 要么成功 要么就不成功。
…………………………………………………………………………………………………………………………………………
日常【错误异常处理】Spring对RuntimeException有事务回滚功能,而不是Exception。
@Vaild + BindingResult(一个传错误消息(调试用)的类)
【定义错误消息和REST API调用统一】Result{code,msg,data}
【定义异常消息和REST API调用统一】@ControllerAdvice + @ExceptionHandler@ResponseBody
【维护自定义的错误码放在一处】ResultEnum 用枚举类型关联(code,msg)
【综述错误处理还是要放在实践上】总结只是提出集中的办法。
……………………………………………………………………………………………………………………
日常【日志】log4j log4j2 logback(boot官方推荐) 作者都是同一个。
private static final Logger logger = LogFactory.getLogger(.class)
日常【拦截请求 | 日志 | 安全 系统通用部分 AOP】直接联系代码 更容易理解
@Aspect
【切点】@Pointcut("execution (public com.example.class_name.method_name(..))")
public void log(){}
@Before("log()")
【扩展点 可以取到 类方法、参数】public void doBefore(Joinpoint jp)
@After("log()")
@AfterReturning(returning,pointcut)
………………………………………………………………………………………………………………
TDD 加速 Spring Boot 开发,我们都知道前端的优势在于 REPL 环境非常快得到明确的结果,在 java 这种 jit 甚至 aot 环境想要获得这种明确快速的体验可以通过 测试 手段帮助。
日常【单元测试】idea可以右键方法 Go To 生成 Test。
@RunWith(SpringRunner.class) //基于 JUnit
@SpringBootTest //表示需要启动应用
@AutoConfigureMockMvc //省去了启动浏览器 相当于 headerless(不知道我理解错了没有) 的浏览器。
mvn clean package 会自动启动单元测试
mvn clean package -Dmaven.test.skip=true 跳过单元测试
………………………………………………………………………………………………
以下为深入 Spring Boot 本质 部分。
…………………………………………………………………………………………
IoC = DI + DL
Bean 一个个注入 <bean id="identifier" class="pkg">
Bean 整批 自动扫描 <context:component-scan base-package="pkg"> + 高内聚的注解,@ComponentScan(basePackage)
xml描述依赖 或者 @Autowired 和 @Inject
或者 JavaConfig 是 Guice 推动,@Conifiguration,核心就是依赖注入 Singleton 。
……………………………………………………………………………………………………
@SpringBootApplication 最主要分解 @ComponentScan
+ @EnableAutoConfiguration 通过@Import将所有符合自动配置条件的Bean加载到IoC容器 ,核心类是SpringFactoriesLoader。
+ @Configuration =》@EnableAutoConfigurationImportSelector + SpringFactoriesLoader => ApplicationContext 。
…………………………………………………………………………………………………………………………
SpringApplication模板化了启动流程,提供了一系列扩展点。
………………………………………………………………………………………………………………………………
基于Spring的约定优先于配置(COC),提供针对日常企业应用研发场景【Spring-boot-starter】实现【自动配置依赖模块(开箱即用)】。
我们可以干预SpringBoot配置的方式:
1.命令行参数
2.系统环境变量
3.classpath
4.filesystem
5.代码硬编码
Spring Boot 起步的更多相关文章
- Spring Boot起步依赖:定制starter
在定制我们自己的起步依赖--xxx.spring.boot.starter之前,我们先了解下什么是Spring Boot起步依赖. 起步依赖,是Spring Boot带给我们的一项重要的便利.要理解S ...
- 1.spring boot起步之Hello World【从零开始学Spring Boot】
[视频&交流平台] àSpringBoot视频 http://study.163.com/course/introduction.htm?courseId=1004329008&utm ...
- (1)spring boot起步之Hello World【从零开始学Spring Boot】
Spring Boot交流平台 1.1 介绍 自从structs2出现上次的漏洞以后,对spring的关注度开始越来越浓. 以前spring开发需要配置一大堆的xml,后台spring加入了annot ...
- 创建Spring Boot项目的几种方式总结
一.我们可以使用Spring Initializr来创建SpringBoot项目. Spring Initializr从本质上来说就是一个Web应用程序,它能为你生成Spring Boot项目结构.虽 ...
- 49. spring boot日志升级篇—理论【从零开始学Spring Boot】
我们之前在其中的一篇文章介绍过如何在spring boot中使用日志记录SLF4J. Spring Boot在所有内部日志中使用Commons Logging,但是默认配置也提供了对常用日志的支持,如 ...
- 48. spring boot单元测试restfull API【从零开始学Spring Boot】
回顾并详细说明一下在在之前章节中的中使用的@Controller.@RestController.@RequestMapping注解.如果您对Spring MVC不熟悉并且还没有尝试过快速入门案例,建 ...
- (44). Spring Boot日志记录SLF4J【从零开始学Spring Boot】
在开发中打印内容,使用 System.out.println() 和 Log4j 应当是人人皆知的方法了. 其实在开发中我们不建议使用 System.out 因为大量的使用 System.out 会增 ...
- (43). Spring Boot动态数据源(多数据源自动切换)【从零开始学Spring Boot】
在上一篇我们介绍了多数据源,但是我们会发现在实际中我们很少直接获取数据源对象进行操作,我们常用的是jdbcTemplate或者是jpa进行操作数据库.那么这一节我们将要介绍怎么进行多数据源动态切换.添 ...
- (42)Spring Boot多数据源【从零开始学Spring Boot】
我们在开发过程中可能需要用到多个数据源,我们有一个项目(MySQL)就是和别的项目(SQL Server)混合使用了.其中SQL Server是别的公司开发的,有些基本数据需要从他们平台进行调取,那么 ...
随机推荐
- 【linux】硬盘原理简介和分区
硬盘是计算机重要的一个部件,计算机中的数据都是保存在硬盘中,比如mysql的数据,linux系统日志及其他的应用日志,还有很多视频,音频,图片等文件都是保存在硬盘中,所以硬盘是计算机不可或缺的一个部件 ...
- 一张图看懂JVM
https://mp.weixin.qq.com/s?__biz=MzAxNjk4ODE4OQ==&mid=2247484432&idx=1&sn=381c98c49ffb81 ...
- JavaScript深入系列(一)--原型和原型链详解
构造函数创建对象 首先我们先使用构造函数创建一个对象: function Person(){} var person = new Person(); person.name = 'tom'; cons ...
- [luogu3369][普通平衡树]
题目链接 思路 模板 只是有几个容易出错的地方 第45行容易忘记 第54行里面的cnt--和siz--容易忘记 第56行是根据id判断不是val 第60行siz--容易忘记 第64行是siz+1不是s ...
- 第十八节,TensorFlow中使用批量归一化(BN)
在深度学习章节里,已经介绍了批量归一化的概念,详情请点击这里:第九节,改善深层神经网络:超参数调试.正则化以优化(下) 神经网络在进行训练时,主要是用来学习数据的分布规律,如果数据的训练部分和测试部分 ...
- 利用/dev/urandom文件创建随机数
1:/dev/urandom和/dev/random是什么 这两个文件记录Linux下的熵池,所谓熵池就是当前系统下的环境噪音,描述了一个系统的混乱程度,环境噪音由这几个方面组成,如内存的使用,文件的 ...
- 爬虫之requests请求库高级应用
1.SSL Cert Verification #证书验证(大部分网站都是https) import requests respone=requests.get('https://www.12306. ...
- javaWeb中使用ajax上传文件
javaWeb上传图片 上传文件所必要的两个jar包:commons-fileupload.jar.commons-io.jar. jar包下载:github路径 核心代码: String withP ...
- python改文件名
import os file_names = os.listdir('D:\\mobilefile\\_hd') for file_name in file_names : print(file_na ...
- Spring Cloud构建微服务架构(六)高可用服务注册中心
http://blog.didispace.com/springcloud6/ https://www.jianshu.com/p/df9393755a05 http://www.ityouknow. ...