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是别的公司开发的,有些基本数据需要从他们平台进行调取,那么 ...
随机推荐
- BJWC2018上学路线
题目描述 小B 所在的城市的道路构成了一个方形网格,它的西南角为(0,0),东北角为(N,M). 小B 家住在西南角,学校在东北角.现在有T 个路口进行施工,小B 不能通过这些路口.小B 喜欢走最短的 ...
- mysql慢查询,死锁解决方案
1. 先使用root用户登录到MySQL中 2. 使用show processlist查看其查询速率 +----+------+-----------------+------+---------+- ...
- CodeForces - 95B(DFS)
题目链接:http://codeforces.com/problemset/problem/95/B 题目大意:给你一个正整数n (1 ≤ n ≤ 10100000),求不大小于它的超级幸运数字(超级 ...
- log4j2 自定义配置文件,java载入
http://logging.apache.org/log4j/2.x/faq.html#separate_log_files How do I reconfigure log4j2 in code ...
- Vim保存时权限不足
保存时权限不足,由于打开时忘记在命令前添加sudo.我们并不需要放弃修改,从新以root权限打开 解决方案 命令模式使用:w !sudo tee %提权,保存
- echarts x轴文字显示不全解决办法
标题:echarts x轴文字显示不全(xAxis文字倾斜比较全面的3种做法值得推荐):http://blog.csdn.net/kebi007/article/details/68488694
- 【CF1141F2】Same Sum Blocks
题解:发现可以通过枚举区间将区间和相同的元组记录在一个表中,对于答案来说,在同一个表中的元组的选择才会对答案产生贡献.发现每一个表中都是一个个区间,问题转化成了对于每一个表来说,选择若干个不相交的区间 ...
- 跟着 underscore 学节流
更多内容请参考:我的新博客 在上一篇文章中,我们了解了为什么要限制事件的频繁触发,以及如何做限制: debounce 防抖 throttle 节流 上次已经说过防抖的实现了,今天主要来说一下节流的实现 ...
- (七)修改上一条SQL语句,NULL值的滤空函数nvl
修改上一条SQL语句 1.用c命令来修改(c 即 change ) 默认,光标闪烁位置指向上一条SQL语句的第一行.输入二则定位到第二行. c /错误的关键字/正确的关键字 SQL form emp; ...
- django(八)之数据库表的一对多,多对多表-增删改查
单表操作 表记录的添加 方式一: Book() b=Book(name="python基础",price=99,author="yuan",pub_date=& ...