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是别的公司开发的,有些基本数据需要从他们平台进行调取,那么 ...
随机推荐
- luogu3811 乘法逆元
逆元定义:若a*x=1(mod p),(a,p互质),则x为a mod p意义下的逆元 做法见https://www.luogu.org/blog/zjp-shadow/cheng-fa-ni-yua ...
- python学习day6 数据类型Ⅳ(集合)
day6 数据类型-集合 内容补充: 列表功能: .reverse()反转 v = [1,2,3,4,5,6]v.reverse()print() #[6, 5, 4, 3, 2, 1] .sort( ...
- 只用200行Go代码写一个自己的区块链!
Coral Health · 大约23小时之前 · 220 次点击 · 预计阅读时间 7 分钟 · 不到1分钟之前 开始浏览 区块链是目前最热门的话题,广大读者都听说过比特币,或许还有智能合约,相信大 ...
- Hadoop安装错误总结
Master的NodeManager/DateNode未启动 日志中未出现任何错误 正常现象,如需在Master中启动可在slave文件中 slaves localhost slave01 slave ...
- P1024 一道naive的二分
好吧,这道题思路还是比较简单的.整个程序大体上很快就打出来了,然后修改了解为整数的情况. 但是交上去一直是50分,最后我很无耻的看了题解,然后抄了一个玄学if回来,瞬间AC,不知道为什么... 这句就 ...
- [bzoj1563][诗人小g]
bzoj1563 思路 首先考虑\(n^2\)的暴力dp,用sum[i]表示前i句话的长度总和.f[i]表示前i句话最小的不协调度之和.转移的时候考虑枚举前面的每个点,找到转移的最优秀的那个点. 然后 ...
- js 判断所选时间(或者当前时间)是否在某一时间段的实现代码
var time_range = function (beginTime, endTime, nowTime) { var strb = beginTime.split (":") ...
- Hibernate 基础解析(Configuration,SessionFactory,Session,Transaction,Query,Criteria)
1 框架体系结构 对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实 现面向对象编程语言里 ...
- MooFest POJ - 1990 (树状数组)
Every year, Farmer John's N (1 <= N <= 20,000) cows attend "MooFest",a social gather ...
- Go数据类型和变量
一:Go数据类型 1.1 Go语言按照分类有以下几种数据类型 布尔型 布尔型的是一个常量true或者false 数字类型 整型int和浮点型 float32, float64 字符串类型 字符串就是一 ...