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

【应用配置】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. BJWC2018上学路线

    题目描述 小B 所在的城市的道路构成了一个方形网格,它的西南角为(0,0),东北角为(N,M). 小B 家住在西南角,学校在东北角.现在有T 个路口进行施工,小B 不能通过这些路口.小B 喜欢走最短的 ...

  2. mysql慢查询,死锁解决方案

    1. 先使用root用户登录到MySQL中 2. 使用show processlist查看其查询速率 +----+------+-----------------+------+---------+- ...

  3. CodeForces - 95B(DFS)

    题目链接:http://codeforces.com/problemset/problem/95/B 题目大意:给你一个正整数n (1 ≤ n ≤ 10100000),求不大小于它的超级幸运数字(超级 ...

  4. log4j2 自定义配置文件,java载入

    http://logging.apache.org/log4j/2.x/faq.html#separate_log_files How do I reconfigure log4j2 in code ...

  5. Vim保存时权限不足

    保存时权限不足,由于打开时忘记在命令前添加sudo.我们并不需要放弃修改,从新以root权限打开 解决方案 命令模式使用:w !sudo tee %提权,保存

  6. echarts x轴文字显示不全解决办法

    标题:echarts x轴文字显示不全(xAxis文字倾斜比较全面的3种做法值得推荐):http://blog.csdn.net/kebi007/article/details/68488694

  7. 【CF1141F2】Same Sum Blocks

    题解:发现可以通过枚举区间将区间和相同的元组记录在一个表中,对于答案来说,在同一个表中的元组的选择才会对答案产生贡献.发现每一个表中都是一个个区间,问题转化成了对于每一个表来说,选择若干个不相交的区间 ...

  8. 跟着 underscore 学节流

    更多内容请参考:我的新博客 在上一篇文章中,我们了解了为什么要限制事件的频繁触发,以及如何做限制: debounce 防抖 throttle 节流 上次已经说过防抖的实现了,今天主要来说一下节流的实现 ...

  9. (七)修改上一条SQL语句,NULL值的滤空函数nvl

    修改上一条SQL语句 1.用c命令来修改(c 即 change ) 默认,光标闪烁位置指向上一条SQL语句的第一行.输入二则定位到第二行. c /错误的关键字/正确的关键字 SQL form emp; ...

  10. django(八)之数据库表的一对多,多对多表-增删改查

    单表操作 表记录的添加 方式一: Book() b=Book(name="python基础",price=99,author="yuan",pub_date=& ...