一、准备工作

二、创建基础web项目

1. maven配置

编写M2_HOME/conf/setting.xml

  1. 1. 指定本地maven仓库
  2. <localRepository>D:\APP\repository</localRepository>
  3. 2. 配置远程仓库镜像(以阿里云为例)
  4. <mirror>
  5. <id>alimaven</id>
  6. <name>aliyun maven</name>
  7. <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
  8. <mirrorOf>central</mirrorOf>
  9. </mirror>
  10. 3. 配置全局jdk版本
  11. <profile>
  12. <id>jdk-1.8</id>
  13. <activation>
  14. <activeByDefault>true</activeByDefault>
  15. <jdk>1.8</jdk>
  16. </activation>
  17. <properties>
  18. <maven.compiler.source>1.8</maven.compiler.source>
  19. <maven.compiler.target>1.8</maven.compiler.target>
  20. <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
  21. </properties>
  22. </profile>

2.创建maven项目、配置pom.xml为web基础项目

  1. 1. web项目基础依赖
  2. <parent>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-parent</artifactId>
  5. <version>2.1.7.RELEASE</version>
  6. <relativePath/> <!-- lookup parent from repository -->
  7. </parent>
  8. <dependencies>
  9. <dependency>
  10. <groupId>org.springframework.boot</groupId>
  11. <artifactId>spring-boot-starter-web</artifactId>
  12. </dependency>
  13. </dependencies>

3.编写启动类

启动类需要与service、controller、dao等包同级,便于后面自动扫描

1.启动类

  • @SpringBootApplication

    • @SpringBootConfiguration------表示是一个springboot配置类

      • @Configuration------表示是一个spring配置类,等价于spring中的配置文件xml

        • @Component------容器中的一个组件
    • @EnableAutoConfiguration------开启自动配置
      • @AutoConfigurationPackage------自动配置包,将主配置类所在包及旗下所有子包里面所有的组件扫描到springboot容器中,所以启动类需要和service等包同级
      • @Import({AutoConfigurationImportSelector.class})------给容器导入一个组件,导入的组件由AutoConfigurationImportSelector.class决定,该类会给容器导入大量的自动配置类(格式类似:xxxAutoConfiguraion),这些自动配置类来源于:spring-boot-configure/META-INF/spring.factories文件中
    • @ComponentScan------自动扫包配置
  1. @SpringBootApplication
  2. public class MySpringBootApplication {
  3. public static void main(String[] args) {
  4. SpringApplication.run(MySpringBootApplication.class,args);
  5. }
  6. }

2.接口类

当@ResponseBody加在方法上表示该方法返回的对象之间返回给浏览器,如果加载在类上,表示当前类下的所有方法都把返回对象之间返回给浏览器

@RestController == @Controller + @ResponseBody

  1. @Controller
  2. public class Helloword {
  3. @RequestMapping("/hello")
  4. @ResponseBody
  5. public String hello() {
  6. return "Hello World";
  7. }
  8. }

4.使用maven打包

  1. 1.配置pom.xml文件,默认打成jar
  2. <build>
  3. <plugins>
  4. <plugin>
  5. <groupId>org.springframework.boot</groupId>
  6. <artifactId>spring-boot-maven-plugin</artifactId>
  7. </plugin>
  8. </plugins>
  9. </build>

点击idea左下角的图标,点击maven projects => spring-boot-helloword =>

lifecycle => package

5.使用命令java -jar xxx.jar运行

取target文件夹下的spring-boot-helloword-1.0-SNAPSHOT.jar,

运行java -jar spring-boot-helloword-1.0-SNAPSHOT.jar

5.快捷生成

1.使用IDE生成

2.使用spring官网地址:https://start.spring.io

三、springboot配置文件

1.application.properties

  • 语法

    • lv1.lv2=value
    • lv1.lv2.lv3=false
    • lists=1,2,3

2.application.yml

  • 语法

    • key: value (注意冒号和value直接需要空格)
    • 用空格缩进来表示处于同一层级
  • 值范围
    • 字面值(普通值)直接用 k: v 来写

      • 字符串不用加上单引号或双引号
      • "":双引号里的特殊字符会表达,例如name: "zhang \n wang" 输出:zhang 换行 wang
      • '':单引号里的特殊字符不会表达,例如name: 'zhang \n wang' 输出:zhang \n wang
    • 对象、map
      1. #1.普通写法
      2. student:
      3. name: song
      4. age: 1
      5. #2.行内写法
      6. student: {name: song,age: 1}
    • 数组list、set
      1. #1.普通写法
      2. pets:
      3. - cat
      4. - dog
      5. - pig
      6. #2.行内写法
      7. pets: {cat,dog,pig}

3.获取配置文件内容到javabean

  • 需要借助@Component注解
  • 使用 @ConfigurationProperties(prefix="beanName") 注解来关联获取配置文件内容,其中beanName表示配置文件中属性的前缀,适用于application.properties、application.yml配置文件的内容获取

4.@ConfigurationProperties与@Value赋值的异同

  • @ConfigurationProperties:支持批量赋值、支持松散绑定(last-name等价于lastName)、不支持表达式计算、支持jsr303数据校验、支持复杂类型封装(object、map类型)
  • @Value:支持单个赋值、支持表达式计算

5.@PropertySource

  • 含义:@ConfigurationProperties加载的是系统默认的全局配置文件(application.properties、application.yml),而@PropertySource可以读取自定义的配置文件
  • 语法:@PropertySource(value = {"classpath:person.properties"}),value可以是数组

6.@ImportResource

我们自己编写的xxx.xml配置文件,不会被spring和springboot识别,可以使用以下方法把xxx.xml中的bean引入到spring容器中

  • 方法一:可以在启动类(也是配置类)上,比如SpringbootApplication.java启动类上加@ImportResource(locations = {"calsspath:xxx.xml"})
  • 自定义一个配置类,标注上@Configuration,使用@Bean的方法引入组件到spring中

7.配置文件占位符

  • 随机数

    \({random.value}、\){random.int}
  • 占位符获取之前配置的值,如果没有可以用的:指定默认值

    name=aaa

    address=${name}_bbb

8.profile环境配置

  • 方式一:多profile文件(application-{profile}.properties)

    • application-dev.properties
    • application-sit.properties
    • application-prd.properties
  1. #application.properties
  2. #激活dev环境的配置
  3. spring.profiles.active=dev
  4. #application-dev.properties
  5. server.port=8081
  6. #application-prd.properties
  7. server.port=8082
  • 方式二:yml文档快指定配置环境方式
  1. #application.yml
  2. #激活dev环境的配置
  3. server
  4. port: 8080
  5. spring
  6. profiles
  7. active: dev
  8. ---
  9. server
  10. port: 8081
  11. spring
  12. profiles: dev
  13. ---
  14. server
  15. port: 8082
  16. spring
  17. profiles: prd
  • 方式三:命令行方式
  1. 1.虚拟机指定
  2. VM options -Dspring.profiles.active=dev
  3. 2.java命令指定
  4. java -jar xxx.jar --spring.profiles.active=dev

9.配置文件加载位置

  • sprigboot启动会扫描以下位置的application.properties和application.yml来作为springboot的默认配置文件
  • 优先级(./config/ > ./),所以配置文件都会被加载
  • 对应重复的配置属性:高优先级会覆盖低优先级的文件配置属性
  • 对于不重复的配置属性:多文件的多属性会互补加载(都加载到springboot中)
  • 我们也可以通过配置spring.config.location来改变默认配置,仅是指定的文件优先级为最高,但是所有的配置文件还是会被一起加载到springboot,参考上面
  1. file类型
  2. ./config/
  3. ./
  4. classpath类型
  5. ./config/
  6. ./

10.配置文件加载顺序

优先级由高到低:

  • 命令行

    • 例如:java -jar xxx.jar --server.port=8085 --server.context-path=/abc
  • jar包外,带profile的
    • application-dev.properties
    • application-dev.yml
  • jar包内,带profile的
    • application-dev.properties
    • application-dev.yml
  • jar包外,不带profile的
    • application.properties
    • application.yml
  • jar包内,不带profile的
    • application-dev.properties
    • application-dev.yml

11.配置文件的属性来源

用好springboot配置文件的精髓

0. 寻找配置文件和class之间关联

  1. 启动类注解@SpringBootApplication
  2. 1的依赖注解@EnableAutoConfiguration
  3. 2的依赖导入@Import({AutoConfigurationImportSelector.class}),导入自动配置选择器类
  4. AutoConfigurationImportSelector.selectImports
  5. AutoConfigurationImportSelector.getAutoConfigurationEntry
  6. AutoConfigurationImportSelector.getCandidateConfigurations()
  7. 6方法内的SpringFactoriesLoader.loadFactoryNames()
  8. SpringFactoriesLoader.loadFactoryNames()
  9. SpringFactoriesLoader.loadSpringFactories()
  10. classLoader.getResources("META-INF/spring.factories")
  11. 找到maven依赖中的spring-boot-autoconfigure2.1.7.RELEASE.jar中META-INF/spring.factories

在spring.factories中以 org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,/ 为例:

0. WebMvcAutoConfiguration.class

  1. @Configuration
  2. @ConditionalOnWebApplication(type = Type.SERVLET)
  3. @ConditionalOnClass({Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class})
  4. @ConditionalOnMissingBean({WebMvcConfigurationSupport.class})
  5. @AutoConfigureOrder(-2147483638)
  6. @AutoConfigureAfter({DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class, ValidationAutoConfiguration.class})
  7. public class WebMvcAutoConfiguration {
  8. ...
  9. }
  1. 进入DispatcherServletAutoConfiguration.class
  1. @AutoConfigureOrder(-2147483648)
  2. @Configuration
  3. @ConditionalOnWebApplication(type = Type.SERVLET)
  4. @ConditionalOnClass({DispatcherServlet.class})
  5. @AutoConfigureAfter({ServletWebServerFactoryAutoConfiguration.class})
  6. public class DispatcherServletAutoConfiguration {
  7. ...
  8. }
  1. 进入ServletWebServerFactoryAutoConfiguration.class
  1. @Configuration
  2. @AutoConfigureOrder(-2147483648)
  3. @ConditionalOnClass({ServletRequest.class})
  4. @ConditionalOnWebApplication(type = Type.SERVLET)
  5. @EnableConfigurationProperties({ServerProperties.class})
  6. @Import({ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar.class, EmbeddedTomcat.class, EmbeddedJetty.class, EmbeddedUndertow.class})
  7. public class ServletWebServerFactoryAutoConfiguration {
  8. ...
  9. }
  1. 进入和ServletWebServerFactoryAutoConfiguration绑定的ServerProperties.class中
  1. @ConfigurationProperties(
  2. prefix = "server",
  3. ignoreUnknownFields = true
  4. )
  5. public class ServerProperties {
  6. private Integer port;
  7. private InetAddress address;
  8. public Integer getPort() {
  9. return this.port;
  10. }
  11. public void setPort(Integer port) {
  12. this.port = port;
  13. }
  14. public InetAddress getAddress() {
  15. return this.address;
  16. }
  17. public void setAddress(InetAddress address) {
  18. this.address = address;
  19. }
  20. //...
  21. }
  1. 控制台判断哪些自动配置类生效

    application.properties中配置:debug=true

  2. 总结:通过ServerProperties.class中的属性可以设置application.properties中的一些关于服务器的配置文件属性,例如:server.port,同样根据其他的xxx.properties也可以学习配置springboot的配置文件

springboot搭建web项目与使用配置文件的更多相关文章

  1. springBoot 搭建web项目(前后端分离,附项目源代码地址)

    springBoot 搭建web项目(前后端分离,附项目源代码地址)   概述 该项目包含springBoot-example-ui 和 springBoot-example,分别为前端与后端,前后端 ...

  2. springboot搭建web项目(转)

    转:http://blog.csdn.net/linzhiqiang0316/article/details/52589789 这几天一直在研究IDEA上面怎么搭建一个web-mvc的SpringBo ...

  3. 使用SpringBoot搭建Web项目

    序言 从简入深的使用SpringBoot搭建一个Web项目,同时也包括一些小的问题.第一篇博文是以较为简单的方式完成一个可以连接数据库的Springboot web程序.之前自己学习的时候看网上的教程 ...

  4. Springboot搭建web项目

    最近因为项目需要接触了springboot,然后被其快速零配置的特点惊呆了.关于springboot相关的介绍我就不赘述了,大家自行百度google. 一.pom配置 首先,建立一个maven项目,修 ...

  5. Spring-Boot快速搭建web项目详细总结

    最近在学习Spring Boot 相关的技术,刚接触就有种相见恨晚的感觉,因为用spring boot进行项目的搭建是在太方便了,我们往往只需要很简单的几步,便可完成一个spring MVC项目的搭建 ...

  6. 使用idea+springboot+Mybatis搭建web项目

    使用idea+springboot+Mybatis搭建web项目 springboot的优势之一就是快速搭建项目,省去了自己导入jar包和配置xml的时间,使用非常方便. 1.创建项目project, ...

  7. 基于springboot的web项目最佳实践

    springboot 可以说是现在做javaweb开发最火的技术,我在基于springboot搭建项目的过程中,踩过不少坑,发现整合框架时并非仅仅引入starter 那么简单. 要做到简单,易用,扩展 ...

  8. Spring Boot入门-快速搭建web项目

    Spring Boot 概述: Spring Boot makes it easy to create stand-alone, production-grade Spring based Appli ...

  9. Spring Boot搭建Web项目常用功能

    搭建WEB项目过程中,哪些点需要注意: 1.技术选型: 前端:freemarker.vue 后端:spring boot.spring mvc 2.如何包装返回统一结构结果数据? 首先要弄清楚为什么要 ...

随机推荐

  1. Requests API

    Requests API http://docs.python-requests.org/en/latest/ requests的具体安装过程请看: http://docs.python-reques ...

  2. setMaxActive和setMaxWait方法

    在dbcp2中,setMaxActive和setMaxWait这两个方法已经改为其他名称,具体如下: setMaxActive -> setMaxTotal void org.apache.co ...

  3. phpfpm开启pm.status_path配置,查看fpm状态参数

    php-fpm配置 pm.status_path = /phpfpm_status nginx配置 server {    root /data/www;    listen 80;    serve ...

  4. lamp的动静分离部署

    一.lamp分离部署工作图 二.LAMP的安装与配置 1.环境准备 2.对 PHP 服务器进行部署 #以下为安装PHP及其依赖 [root@php ~ ]# .tar.gz -C /usr/src [ ...

  5. Angular里使用(image-compressor.js)图片压缩

    参考资料: http://www.imooc.com/article/40038 https://github.com/xkeshi/image-compressor 示例代码: <nz-upl ...

  6. react项目开发环境搭建

    1.环境安装,首先要安装node http://nodejs.cn/  进入nodejs下载,你是window就下在window的反之,安装下一步下一步...就好了 安装成功了试试 node -v , ...

  7. 2019牛客暑期多校训练营(第六场)-E Androgynos (构造题)

    题目链接:https://ac.nowcoder.com/acm/contest/886/E 题意:给出n,求能否构造一个含n个顶点的简单无向图,且它的补图与它同构. 思路:首先要满足与其补图同构,同 ...

  8. [转帖]postgresql 在等待服务器启动时超时

    postgresql 在等待服务器启动时超时 2018年12月24日 :: my_name_nb 阅读数 版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接 ...

  9. SQL Server 下载与安装

    1.首先去Microsoft官网下载对应的安装程序,下载地址:https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.运行安 ...

  10. 黑科技——树剖两次dfs转一次dfs!

    黑科技--树剖两次\(dfs\)转一次\(dfs\)! 重所周知,树链剖分通常是要\(dfs​\)两次的,就像这样: int Fa[N],dep[N],Sz[N],son[N]; void dfs1( ...