springboot搭建web项目与使用配置文件
一、准备工作
- jdk1.8
- apache maven 3.3.9
- ide : eclipse | idea
- spring官网:https://spring.io/
二、创建基础web项目
1. maven配置
编写M2_HOME/conf/setting.xml
1. 指定本地maven仓库
<localRepository>D:\APP\repository</localRepository>
2. 配置远程仓库镜像(以阿里云为例)
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
3. 配置全局jdk版本
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
2.创建maven项目、配置pom.xml为web基础项目
1. web项目基础依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
3.编写启动类
启动类需要与service、controller、dao等包同级,便于后面自动扫描
1.启动类
- @SpringBootApplication
- @SpringBootConfiguration------表示是一个springboot配置类
- @Configuration------表示是一个spring配置类,等价于spring中的配置文件xml
- @Component------容器中的一个组件
- @Configuration------表示是一个spring配置类,等价于spring中的配置文件xml
- @EnableAutoConfiguration------开启自动配置
- @AutoConfigurationPackage------自动配置包,将主配置类所在包及旗下所有子包里面所有的组件扫描到springboot容器中,所以启动类需要和service等包同级
- @Import({AutoConfigurationImportSelector.class})------给容器导入一个组件,导入的组件由AutoConfigurationImportSelector.class决定,该类会给容器导入大量的自动配置类(格式类似:xxxAutoConfiguraion),这些自动配置类来源于:spring-boot-configure/META-INF/spring.factories文件中
- @ComponentScan------自动扫包配置
- @SpringBootConfiguration------表示是一个springboot配置类
@SpringBootApplication
public class MySpringBootApplication {
public static void main(String[] args) {
SpringApplication.run(MySpringBootApplication.class,args);
}
}
2.接口类
当@ResponseBody加在方法上表示该方法返回的对象之间返回给浏览器,如果加载在类上,表示当前类下的所有方法都把返回对象之间返回给浏览器
@RestController == @Controller + @ResponseBody
@Controller
public class Helloword {
@RequestMapping("/hello")
@ResponseBody
public String hello() {
return "Hello World";
}
}
4.使用maven打包
1.配置pom.xml文件,默认打成jar包
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</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.普通写法
student:
name: song
age: 1 #2.行内写法
student: {name: song,age: 1}
- 数组list、set
#1.普通写法
pets:
- cat
- dog
- pig
#2.行内写法
pets: {cat,dog,pig}
- 字面值(普通值)直接用 k: v 来写
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
#application.properties
#激活dev环境的配置
spring.profiles.active=dev
#application-dev.properties
server.port=8081
#application-prd.properties
server.port=8082
- 方式二:yml文档快指定配置环境方式
#application.yml
#激活dev环境的配置
server
port: 8080
spring
profiles
active: dev
---
server
port: 8081
spring
profiles: dev
---
server
port: 8082
spring
profiles: prd
- 方式三:命令行方式
1.虚拟机指定
VM options: -Dspring.profiles.active=dev
2.java命令指定
java -jar xxx.jar --spring.profiles.active=dev
9.配置文件加载位置
- sprigboot启动会扫描以下位置的application.properties和application.yml来作为springboot的默认配置文件
- 优先级(./config/ > ./),所以配置文件都会被加载
- 对应重复的配置属性:高优先级会覆盖低优先级的文件配置属性
- 对于不重复的配置属性:多文件的多属性会互补加载(都加载到springboot中)
- 我们也可以通过配置spring.config.location来改变默认配置,仅是指定的文件优先级为最高,但是所有的配置文件还是会被一起加载到springboot,参考上面
file类型
./config/
./
classpath类型
./config/
./
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之间关联
- 启动类注解@SpringBootApplication
- 1的依赖注解@EnableAutoConfiguration
- 2的依赖导入@Import({AutoConfigurationImportSelector.class}),导入自动配置选择器类
- AutoConfigurationImportSelector.selectImports
- AutoConfigurationImportSelector.getAutoConfigurationEntry
- AutoConfigurationImportSelector.getCandidateConfigurations()
- 6方法内的SpringFactoriesLoader.loadFactoryNames()
- SpringFactoriesLoader.loadFactoryNames()
- SpringFactoriesLoader.loadSpringFactories()
- classLoader.getResources("META-INF/spring.factories")
- 找到maven依赖中的spring-boot-autoconfigure2.1.7.RELEASE.jar中META-INF/spring.factories
在spring.factories中以 org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,/ 为例:
0. WebMvcAutoConfiguration.class
@Configuration
@ConditionalOnWebApplication(type = Type.SERVLET)
@ConditionalOnClass({Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class})
@ConditionalOnMissingBean({WebMvcConfigurationSupport.class})
@AutoConfigureOrder(-2147483638)
@AutoConfigureAfter({DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class, ValidationAutoConfiguration.class})
public class WebMvcAutoConfiguration {
...
}
- 进入DispatcherServletAutoConfiguration.class
@AutoConfigureOrder(-2147483648)
@Configuration
@ConditionalOnWebApplication(type = Type.SERVLET)
@ConditionalOnClass({DispatcherServlet.class})
@AutoConfigureAfter({ServletWebServerFactoryAutoConfiguration.class})
public class DispatcherServletAutoConfiguration {
...
}
- 进入ServletWebServerFactoryAutoConfiguration.class
@Configuration
@AutoConfigureOrder(-2147483648)
@ConditionalOnClass({ServletRequest.class})
@ConditionalOnWebApplication(type = Type.SERVLET)
@EnableConfigurationProperties({ServerProperties.class})
@Import({ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar.class, EmbeddedTomcat.class, EmbeddedJetty.class, EmbeddedUndertow.class})
public class ServletWebServerFactoryAutoConfiguration {
...
}
- 进入和ServletWebServerFactoryAutoConfiguration绑定的ServerProperties.class中
@ConfigurationProperties(
prefix = "server",
ignoreUnknownFields = true
)
public class ServerProperties {
private Integer port;
private InetAddress address;
public Integer getPort() {
return this.port;
}
public void setPort(Integer port) {
this.port = port;
}
public InetAddress getAddress() {
return this.address;
}
public void setAddress(InetAddress address) {
this.address = address;
}
//...
}
控制台判断哪些自动配置类生效
application.properties中配置:debug=true总结:通过ServerProperties.class中的属性可以设置application.properties中的一些关于服务器的配置文件属性,例如:server.port,同样根据其他的xxx.properties也可以学习配置springboot的配置文件
springboot搭建web项目与使用配置文件的更多相关文章
- springBoot 搭建web项目(前后端分离,附项目源代码地址)
springBoot 搭建web项目(前后端分离,附项目源代码地址) 概述 该项目包含springBoot-example-ui 和 springBoot-example,分别为前端与后端,前后端 ...
- springboot搭建web项目(转)
转:http://blog.csdn.net/linzhiqiang0316/article/details/52589789 这几天一直在研究IDEA上面怎么搭建一个web-mvc的SpringBo ...
- 使用SpringBoot搭建Web项目
序言 从简入深的使用SpringBoot搭建一个Web项目,同时也包括一些小的问题.第一篇博文是以较为简单的方式完成一个可以连接数据库的Springboot web程序.之前自己学习的时候看网上的教程 ...
- Springboot搭建web项目
最近因为项目需要接触了springboot,然后被其快速零配置的特点惊呆了.关于springboot相关的介绍我就不赘述了,大家自行百度google. 一.pom配置 首先,建立一个maven项目,修 ...
- Spring-Boot快速搭建web项目详细总结
最近在学习Spring Boot 相关的技术,刚接触就有种相见恨晚的感觉,因为用spring boot进行项目的搭建是在太方便了,我们往往只需要很简单的几步,便可完成一个spring MVC项目的搭建 ...
- 使用idea+springboot+Mybatis搭建web项目
使用idea+springboot+Mybatis搭建web项目 springboot的优势之一就是快速搭建项目,省去了自己导入jar包和配置xml的时间,使用非常方便. 1.创建项目project, ...
- 基于springboot的web项目最佳实践
springboot 可以说是现在做javaweb开发最火的技术,我在基于springboot搭建项目的过程中,踩过不少坑,发现整合框架时并非仅仅引入starter 那么简单. 要做到简单,易用,扩展 ...
- Spring Boot入门-快速搭建web项目
Spring Boot 概述: Spring Boot makes it easy to create stand-alone, production-grade Spring based Appli ...
- Spring Boot搭建Web项目常用功能
搭建WEB项目过程中,哪些点需要注意: 1.技术选型: 前端:freemarker.vue 后端:spring boot.spring mvc 2.如何包装返回统一结构结果数据? 首先要弄清楚为什么要 ...
随机推荐
- 浏览器输入url后发生的事情以及每步可以做的优化
首先总结下输入url按下回车后的大致流程: 查询url的ip地址. 建立tcp连接,连接服务器. 浏览器发起http/https请求. 服务器响应浏览器的请求. 网页的解析与渲染. 下面分析每个过程 ...
- php curl如何设置自定义请求头和打印请求头信息
$header = [ 'client:h5', 'token:test', ]; curlRequest($url, $params, true, 10, $header); PHP5.1.3版以上 ...
- JAVA 程序员代码生成利器
http://www.grails.org/ 为什么要用Grails 采用groovy 开发,基于springboot+ hibernate ,groovy 语言层面运行效率稍微差点,但开发效率比j ...
- ASP.NET Core 入门笔记5,ASP.NET Core MVC控制器入门
摘抄自https://www.cnblogs.com/ken-io/p/aspnet-core-tutorial-mvc-controller-action.html 一.前言 1.本教程主要内容 A ...
- 又做了个新的Blog
http://inkhin.com 服务器比较渣,访问不了的请见谅.
- 【ARM-Linux开发】Linux的SOCKET编程详解
Linux的SOCKET编程详解 1. 网络中进程之间如何通信 进 程通信的概念最初来源于单机系统.由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进 程之间既互不干扰又协调一致工作,操作系 ...
- Mac下使用sshpass让iterm2支持多ssh登录信息保存
mac下没有xshell等连接linux服务器的工具,当需要管理的服务器越来越多之后,密码管理就成了一个很头疼的问题,每次都需要去复制粘贴密码,浪费了很多时间,在网上查了不少资料,发现mac下可以使用 ...
- 修改Jupyter Notebook默认目录
Jupyter Notebook每次打开都需要先进到相应的文件夹再打开 很不方便 首先进入到Jupyter的安装目录,我的是 D:\Anaconda3\Scripts 然后,输入命令: jupyter ...
- 2019-07-31 C#基础知识学习
什么是进程:进程是系统中正在运行的一个程序,程序一旦运行就是进程. 什么是线程:线程是进程的一个实体,是进程的一条执行路径. 进程和线程的区别体现在以下几个方面: 1.地址空间和其他资源(如打开文件) ...
- 使用foreach的禁忌
List<String> list = new ArrayList<>(); Iterator<String> iterator = list.iterator() ...