spring boot入门

看的是这个教程:
http://c.biancheng.net/spring_boot/

spring boot starter是干嘛的?

我的理解是,类似一些预定义的library、模块或sdk,里面提供了开发中常用的功能或配置。

Spring Boot 将日常企业应用研发中的各种场景都抽取出来,做成一个个的 starter(启动器),starter 中整合了该场景下各种可能用到的依赖,用户只需要在 Maven 中引入 starter 依赖,SpringBoot 就能自动扫描到要加载的信息并启动相应的默认配置。starter 提供了大量的自动配置,让用户摆脱了处理各种依赖和配置的困扰。所有这些 starter 都遵循着约定成俗的默认配置,并允许用户调整这些配置,即遵循“约定大于配置”的原则。
并不是所有的 starter 都是由 Spring Boot 官方提供的,也有部分 starter 是第三方技术厂商提供的,例如 druid-spring-boot-starter 和 mybatis-spring-boot-starter 等等。当然也存在个别第三方技术,Spring Boot 官方没提供 starter,第三方技术厂商也没有提供 starter。
以 spring-boot-starter-web 为例,它能够为提供 Web 开发场景所需要的几乎所有依赖,因此在使用 Spring Boot 开发 Web 项目时,只需要引入该 Starter 即可,而不需要额外导入 Web 服务器和其他的 Web 依赖。

如何引入starter?

在pom.xml中引入

pom中并没有指明starter的版本,这些starter是如何控制版本的?

下面这个东西是所有所有spring boot项目的父级依赖,称为版本仲裁中心,可以对项目内的部分常用依赖进行统一管理。

<!--SpringBoot父项目依赖管理-->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.4.5</version>
    <relativePath/>
</parent>

spring-boot-starter-web(Web场景启动器)

提供了嵌入的 Servlet 容器以及 SpringMVC 的依赖,并为 Spring MVC 提供了大量自动配置,可以适用于大多数 Web 开发场景。

springboot静态资源映射是什么意思?

这里牵涉到另一个问题:

很多项目中有个webapp目录,里面是干嘛的?

为了让页面更加美观,让用户有更多更好的体验,Web 应用中通常会使用大量的 JS 和 CSS,例如 jQuery,Backbone.js 和 Bootstrap 等等。通常我们会将这些 Web 前端资源拷贝到 Java
Web 项目的 webapp 相应目录下进行管理。

但是 Spring Boot 项目是以 JAR 包的形式进行部署的,不存在 webapp 目录,那么 Web 前端资源该如何引入到 Spring Boot 项目中呢?

WebJars 可以完美的解决上面的问题,它可以 Jar 形式为 Web 项目提供资源文件。

WebJars 可以将 Web 前端资源(JS,CSS 等)打成一个个的 Jar 包,然后将这些 Jar 包部署到 Maven中央仓库中进行统一管理,当 Spring Boot 项目中需要引入 Web 前端资源时,只需要访问 WebJars 官网,找到所需资源的pom 依赖,将其导入到项目中即可。

我懂了,比如以前用jquery,记得是要下载几个jQuery.js,然后放在某个目录下面,现在不需要这么做了,只需要在pom.xml里引入jquery的dependency:

<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>jquery</artifactId>
    <version>3.6.0</version>
</dependency>

所有通过 WebJars 引入的前端资源都存放在当前项目类路径(classpath)下的“/META-INF/resources/webjars/” 目录中。

“配置绑定”什么意思

把配置文件中的值与 JavaBean 中对应的属性进行绑定。

具体做法是什么?

通常会把一些配置信息写在配置文件里(如db配置),然后通过java代码去读取。
SpringBoot 提供了以下 2 种方式进行配置绑定:

  • 使用 @ConfigurationProperties 注解
  • 使用 @Value 注解

@ConfigurationProperties用法举例

如:@ConfigurationProperties(prefix = “person”) ,它表示将这个 JavaBean 中的所有属性与配置文件中以“person”为前缀的配置进行绑定。

person:
  lastName: 张三
  age: 18
  boss: false
  birth: 1990/12/12
  maps: { k1: v1,k2: 12 }
  lists:
    ‐ lisi
    ‐ zhaoliu
  dog:
    name: 迪迪
    age: 5```

@Value 与 @ConfigurationProperties 对比

  1. 使用位置不同
    @ConfigurationProperties:标注在 JavaBean 的类名上;
    @Value:标注在 JavaBean 的属性上。
  2. 功能不同
    @ConfigurationProperties:用于批量绑定配置文件中的配置;
    @Value:只能一个一个的指定需要绑定的配置。
  3. 松散绑定支持不同
  • @ConfigurationProperties:支持松散绑定(松散语法),例如实体类 Person 中有一个属性为 firstName,那么配置文件中的属性名支持以下写法:
    person.firstName
    person.first-name
    person.first_name
    PERSON_FIRST_NAME
  • @Vaule:不支持松散绑定。
  1. SpEL 支持不同(啥。。。)
    @ConfigurationProperties:不支持 SpEL 表达式;
    @Value:支持 SpEL 表达式。
  2. 复杂类型封装
    @ConfigurationProperties:支持所有类型数据的封装,例如 Map、List、Set、以及对象等;
    @Value:只支持基本数据类型的封装,例如字符串、布尔值、整数等类型。
  3. 应用场景不同
    @Value 和 @ConfigurationProperties 两个注解之间,并没有明显的优劣之分,它们只是适合的应用场景不同而已。

若只是获取配置文件中的某项值,则推荐使用 @Value 注解;
若专门编写了一个 JavaBean 来和配置文件进行映射,则建议使用 @ConfigurationProperties 注解。

配置绑定时的“原数据”一般怎么存放?

  • application.yaml或application.properties:放springboot相关的、或者说是项目相关的
  • xxx.yaml(如src/main/resources/person.properties):放具体实体类需要的配置,也就是与springboot无关的;并使用如下注解:
@PropertySource(value = "classpath:person.properties")//指向对应的配置文件
@ConfigurationProperties(prefix = "person")
public class Person {
	//...
}

多环境配置怎么弄(开发环境、测试环境、生产环境……

application-{profile}.properties/yml

如:src/main/resources 下添加 4 个配置文件:

application.properties:主配置文件
application-dev.properties:开发环境配置文件
application-test.properties:测试环境配置文件
application-prod.properties:生产环境配置文件

其中,{profile} 一般为各个环境的名称或简称,例如 dev、test 和 prod 等等。
*或者在同一个profile(yaml)中,通过“—"将文件分成不同部分

环境激活的方式

  1. 在application.properties(yml)中写:
spring.profiles.active=prod
  1. 命令行激活
    先打包成jar文件,然后在命令行运行时带上参数:
mvn clean package
...
java -jar helloworld-0.0.1-SNAPSHOT.jar  --spring.profiles.active=dev
  1. 虚拟机参数激活(?不懂)
java -Dspring.profiles.active=prod -jar helloworld-0.0.1-SNAPSHOT.jar

默认配置文件

一般是application.properties,但它可以存在多个

springboot会自动读取哪些地方配置文件?

file:./config/*/
file:./config/
file:./
classpath:/config/
classpath:/
注:file: 指当前项目根目录;classpath: 指当前项目的类路径,即 resources 目录。
以上所有位置的配置文件都会被加载,且它们优先级依次降低,序号越小优先级越高。其次,位于相同位置的 application.properties 的优先级高于 application.yml。

Spring Boot 配置优先级

以下是常用的 Spring Boot 配置形式及其加载顺序(优先级由高到低):
命令行参数
来自 java:comp/env 的 JNDI 属性
Java 系统属性(System.getProperties())
操作系统环境变量
RandomValuePropertySource 配置的 random.* 属性值
配置文件(YAML 文件、Properties 文件)
@Configuration 注解类上的 @PropertySource 指定的配置文件
通过 SpringApplication.setDefaultProperties 指定的默认属性

springboot用的日志框架是啥

Spring Boot 选用 SLF4J + Logback

市面上常见的日志框架有很多,它们可以被分为两类:日志门面(日志抽象层)和日志实现,如下表。
在这里插入图片描述
通常情况下,日志由一个日志门面与一个日志实现组合搭建而成
SLF4J 是目前市面上最流行的日志门面,使用 Slf4j 可以很灵活的使用占位符进行参数占位,简化代码,拥有更好的可读性。
Logback 是 Slf4j 的原生实现框架,它与 Log4j 出自一个人之手,但拥有比 log4j 更多的优点、特性和更做强的性能,现在基本都用来代替 log4j 成为主流。

怎么改logger的配置?

在application.yml里

#日志级别
logging.level.net.biancheng.www=trace
#使用相对路径的方式设置日志输出的位置(项目根目录目录\my-log\mylog\spring.log)
#logging.file.path=my-log/myLog
#绝对路径方式将日志文件输出到 【项目所在磁盘根目录\springboot\logging\my\spring.log】
logging.file.path=/spring-boot/logging
#控制台日志输出格式
logging.pattern.console=%d{yyyy-MM-dd hh:mm:ss} [%thread] %-5level %logger{50} - %msg%n
#日志文件输出格式
logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} === - %msg%n

其他问题:

servlet?
classpath是哪里?怎么查看?可以改么?为什么我这里和教程里不一样是/Users/xxx/.m2/repository/
javabean实体类
<T>这是啥来着
pom.xml中的groupId和artifactId指的是什么意思?
如何导入spring配置(这是啥)我感觉不重要
springboot自动配置的原理(?不关心)
什么叫注入?
@autowired干嘛的?

几个重要的注解

  • @Service:用于标注业务层组件(主要逻辑
  • @Controller:用于标注控制层组件(如struts中的action)
  • @Repository:用于标注数据访问组件,即DAO组件
  • @Component:泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注

代码里创建3个目录:(我这里有个问题,为什么要把implement和接口分开来。。。)

  • service
  • dao
  • controller

SpringBoot 逻辑层分为哪几层?

分为四层:controller层、service层、dao层、model层

找了好几个文章都说的不一样,官方有说明么??

和mvc中的model、view、controller的区别是?这几种分层分别属于哪种领域(?

dao层:mapper层,数据持久层,对数据库进行持久化操作,用于存放sql语句,存放返回数据json的格式样式,在SpringBoot中用注解来为每一个方法注入sql语句。

什么叫“对数据库进行持久化操作”???

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值