………………………………………………………………………………………………………………

【应用配置】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 起步的更多相关文章

  1. Spring Boot起步依赖:定制starter

    在定制我们自己的起步依赖--xxx.spring.boot.starter之前,我们先了解下什么是Spring Boot起步依赖. 起步依赖,是Spring Boot带给我们的一项重要的便利.要理解S ...

  2. 1.spring boot起步之Hello World【从零开始学Spring Boot】

    [视频&交流平台] àSpringBoot视频 http://study.163.com/course/introduction.htm?courseId=1004329008&utm ...

  3. (1)spring boot起步之Hello World【从零开始学Spring Boot】

    Spring Boot交流平台 1.1 介绍 自从structs2出现上次的漏洞以后,对spring的关注度开始越来越浓. 以前spring开发需要配置一大堆的xml,后台spring加入了annot ...

  4. 创建Spring Boot项目的几种方式总结

    一.我们可以使用Spring Initializr来创建SpringBoot项目. Spring Initializr从本质上来说就是一个Web应用程序,它能为你生成Spring Boot项目结构.虽 ...

  5. 49. spring boot日志升级篇—理论【从零开始学Spring Boot】

    我们之前在其中的一篇文章介绍过如何在spring boot中使用日志记录SLF4J. Spring Boot在所有内部日志中使用Commons Logging,但是默认配置也提供了对常用日志的支持,如 ...

  6. 48. spring boot单元测试restfull API【从零开始学Spring Boot】

    回顾并详细说明一下在在之前章节中的中使用的@Controller.@RestController.@RequestMapping注解.如果您对Spring MVC不熟悉并且还没有尝试过快速入门案例,建 ...

  7. (44). Spring Boot日志记录SLF4J【从零开始学Spring Boot】

    在开发中打印内容,使用 System.out.println() 和 Log4j 应当是人人皆知的方法了. 其实在开发中我们不建议使用 System.out 因为大量的使用 System.out 会增 ...

  8. (43). Spring Boot动态数据源(多数据源自动切换)【从零开始学Spring Boot】

    在上一篇我们介绍了多数据源,但是我们会发现在实际中我们很少直接获取数据源对象进行操作,我们常用的是jdbcTemplate或者是jpa进行操作数据库.那么这一节我们将要介绍怎么进行多数据源动态切换.添 ...

  9. (42)Spring Boot多数据源【从零开始学Spring Boot】

    我们在开发过程中可能需要用到多个数据源,我们有一个项目(MySQL)就是和别的项目(SQL Server)混合使用了.其中SQL Server是别的公司开发的,有些基本数据需要从他们平台进行调取,那么 ...

随机推荐

  1. our happy ending(状压dp)

    题意:给定一个n,k,l. 问有多少长度为n的序列满足选出一些数使得他们相加为k,数列中每个数都在1-l以内. Solution 正解还是很妙的. 状压dp,设dp[i][j]表示长度为i的序列,能表 ...

  2. NOIP2013花匠(波动序列)

    波动序列的定义不用多说,下面给出波动序列的求法. #include<iostream> #include<cstdio> #define N 100002 using name ...

  3. 【php】php分隔字符串为数组

    工作中会经常分隔字符串为数组,我们可以用php内置函数str_split(),可是有时候字符串中包含中文,切割后会乱码,比如 print_r(str_split('dw氛围fesf',3)); 输出 ...

  4. BZOJ2801/洛谷P3544 [POI2012]BEZ-Minimalist Security(题目性质发掘+图的遍历+解不等式组)

    题面戳这 化下题面给的式子: \(z_u+z_v=p_u+p_v-b_{u,v}\) 发现\(p_u+p_v-b_{u,v}\)是确定的,所以只要确定了一个点\(i\)的权值\(x_i\),和它在同一 ...

  5. 8、16、32-BIT系列单片机区别与特点

    一.8位单片机 8031/8051/8751是Intel公司早期的产品 1.8031的特点 8031片内不带程序存储器ROM,使用时用户需外接程序存储器和一片逻辑电路373,外接的程序存储器多为EPR ...

  6. Nginx反向代理后端多节点下故障节点的排除思路

    仔细想来,其实是个非常简单的问题:开发和运维觉得两个后端节点跑起来压力太大了,就扩充了两个新的后端节点上去,这一加就出问题了,访问时页面间歇性丢失,这尼玛什么情况...想了半天没思路,查了Nginx的 ...

  7. A1118. Birds in Forest

    Some scientists took pictures of thousands of birds in a forest. Assume that all the birds appear in ...

  8. poj1637 Sightseeing tour(混合图欧拉回路)

    题目链接 题意 给出一个混合图(有无向边,也有有向边),问能否通过确定无向边的方向,使得该图形成欧拉回路. 思路 这是一道混合图欧拉回路的模板题. 一张图要满足有欧拉回路,必须满足每个点的度数为偶数. ...

  9. js弹出层

    js弹出层 1.div附近显示 <div id="message"></div> $().delay().hide(); 2.遮罩层 表单提交后遮住页面,等 ...

  10. 移动端click事件延时

    在移动端使用click事件会产生300ms的延迟 问题的产生: 移动端存在双击放大的问题,所以在移动端点击事件发生时,为了判断用户的行为(到底是要双击还是要点击),浏览器通常会等待300ms,如果30 ...