一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第25天,点击查看活动详情。
一、使用Spring Initializer快速创建Spring Boot项目
上篇文章介绍了使用spring官网提供的Spring Initializr创建springboot基本项目,下面来介绍一下使用Idea的Spring Initializr创建spring boot项目。 随着互联网的发展,为了提供服务的高可用性,高扩展性,现在大部分项目都采用微服务的方式进行搭建,如创建一个父级项目,然后在父级项目下创建各个微服务模块,这样不仅可以避免重复引用一些依赖,也方便程序进行开发,下面就来进行搭建这样一个项目案例。
1-1、创建springboot parent项目
点击File->New->Project
选择Spring Initializr->配置项目信息->next
选择当前spring boot的稳定版->finished
可能回报如下错误
解决方案:(如未遇到可跳过)
设置代理,并填写spring initializr地址
显示成功
再次按照上面的步骤进行创建项目即可
需要注意的是需要把父项目的pom中的packaging设置为pom
1-1-1、maven 打包方式
packaging中有三种打包方式:pom/jar/war
1-1-1-1、pom方式
用在父级工程或聚合工程中,用来做jar包的版本控制,必须指明这个聚合工程的打包方式为pom。
聚合工程只是用来帮助其他模块构建的工具,本身并没有实质的内容。具体每个工程代码的编写还是在生成的工程中去写。
对于在父工程中导的依赖工程也可享有。
1-1-2、jar打包方式
****工程的默认打包方式,打包成jar用作jar包使用。存放一些其他工程都会使用的类,工具类。我们可以在其他工程的pom文件中去引用它
1-1-3、war打包方式
将会打包成war,发布在服务器上,如网站或服务。用户可以通过浏览器直接访问,或者是通过发布服务被别的工程调用
1-2、创建Module模块
在项目右键新建Module
填写项目相关信息
选择相关插件,先暂时只选择web
最终目录结构如下(刚刚创建的module在parent项目中)
1-2-1、修改继承关系
虽然刚刚在parent中创建了moudle但是查看moudle的pom.xml可以看到其parent还是springboot如下
1-2-2、修改moudle继承关系
将父项目pom中如下信息拷贝到moudle的parent中,这样就完成了moudle继承parent的关系。
<groupId>com.jony</groupId>
<artifactId>spring_initializr</artifactId>
<version>0.0.1-SNAPSHOT</version>
1-3、项目结构介绍
java 中编写我们相关java代码
resources文件夹中目录结构
-
static:保存所有的静态资源; js css images;
-
templates:保存所有的模板页面;(Spring Boot默认jar包使用嵌入式的Tomcat,默认不支持JSP页面);可以使用模板引擎(freemarker、thymeleaf)
application.properties:Spring Boot应用的配置文件;可以修改一些默认设置;
1-4、创建一个Controller使用springboot
创建一个Controller,然后选择子项目的启动类,进行启动
1-4-1、测试
如下,这样就完成了一个简单的springboot项目使用
二、配置文件的使用
SpringBoot使用一个全局的配置文件 核心配置文件,配置文件名在约定的情况下名字是固定的;
配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好;文件名可以为以下格式
∙application.properties
∙application.yml
∙application.ymal
YAML(YAML Ain't Markup Language)
YAML A Markup Language:是一个标记语言
YAML isn't Markup Language:不是一个标记语言;
2-1、两种配置文件的格式
2-1-1、application.properties的用法:扁平的k/v格式。
#配置端口
server.port=8090
#配置项目虚拟路径
server.servlet.context-path=/jony
2-1-2、application.yml的用法:树型结构
server:
port: 8090
servlet:
context-path: /jony
两种前者是,而后者是yml的,建议使用后者,因为它的可读性更强。 可以看到要转换成YML我们只需把properies里按.去拆分即可。
2-2、yml基本语法
1、k:(空格)v:表示一对键值对(空格必须有);
2、以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的
3、属性和值也是大小写敏感;
4、如果有特殊字符% & 记得用单引号(‘)包起来
2-3、配置文件的加载顺序
<includes>
<include>**/application*.yml</include>
<include>**/application*.yaml</include>
<include>**/application*.properties</include>
</includes>
如果同时存在不同后缀的文件配置信息会互补配置;
不同版本的springboot三个后缀文件的加载顺序也不太一样,我这边使用2.6.7,执行顺序如下:
实际测试中,发现如果yml和properties有相同配置,则按照properties,如下:
2-4、外部约定配置文件加载顺序:
springboot 启动还会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件。
由低到高顺序为:
- classpath根目录下的
2. classpath根config/
3. 项目根目录
如果当前项目是继承/耦合关系maven项目的话,项目根目录=父maven项目的根目录
- 项目根目录/config
- 直接子目录/config(在命令行中指定的文件)
java ‐jar spring‐0.0.1‐SNAPSHOT.jar ‐‐spring.config.location=D:\config/
优先级由底到高,高优先级的配置会覆盖低优先级的配置;互补配置;
需要注意的是,如果我们现在将子项目spring_initialrz进行打包,并且使用java -jar 运行jar包,最终使用的文件为子项目的resource/conf下的配置文件,因为在打包的时候parent项目是不进行打包的,最终打包里面的项目只有子项目中的相关代码配置信息。
2-5、Profile文件的加载
在实际项目开发过程中,我们的配置文件中有部分配置信息是不一致的,如:开发的时候使用测试数据库,发布线上的时候使用正式的数据库,我们可以在文件中进行直接修改,也可以通过Profile的方式进行处理。
SpringBoot框架提供了多profile的管理功能,我们可以使用profile功能来区分不同环境的配置。
2-5-1、多profile
1.Spring官方给出的语法规则是application-{profile}.properties(.yaml/.yml)。
2.如果需要创建自定义的的properties文件时,可以用application-xxx.properties的命名方式, 根据实际情况,我创建了一个开发环境下使用的properties文件和一个生产环境下使用的properties文件,其中只对端口进行了配置,如下图所示:
a)、开发环境
b)、生成环境
c)、若我们需要在两种环境下进行切换,只需要在application.yml中加入如下内容即可。。
先按照位置来读取优先级, 在同一位置下profile优先级最高, 如果没有指定profile, 先yml‐‐yaml‐‐properties
2-5-2、激活指定配置文件
2-5-2-1、在配置文件中指定 spring.profiles.active=dev
通过这种方式进行配置指定配置文件,如果同时有yam/yaml/properties是可以进行互补的。
指定使用dev环境
指定使用prod环境
2-5-2-1、通过命令行指定
2-5-2-1-1、指定jar包中的
java ‐jar spring_initializr‐0.0.1‐SNAPSHOT.jar ‐‐spring.profiles.active=dev;
2-5-2-1-2、spring.config.location
使用spring.config.location 指定的配置文件, 是不会进行互补。
java ‐jar configuration_file‐0.0.1‐SNAPSHOT.jar ‐‐spring.config.location=D:/application.properties
2-5-2-1-3、spring.config.name
使用spring.config.name 指定的配置文件, 是不会进行互补。
java ‐jar configuration_file‐0.0.1‐SNAPSHOT.jar ‐‐spring.config.name=application‐prod
2-5-3、多Profile设置Controller的读取
多Profile不仅可以设置读取配置文件,同样也可以设置使用的Controller.
2-5-3-1、测试
三、所有配置文件加载顺序
优先级从低到高
-
打包在jar中配置文件
-
打包在jar中profile
-
打包的jar之外的配置文件
-
打包的jar之外的profile
3-1、使用内置配置文件
java ‐jar spring_initializr‐0.0.1‐SNAPSHOT.jar
使用如上命令运行jar包则优先使用config中的配置文件,并且使用顺序为yml-->ymal-->properties
optional:classpath:/config/ yml‐‐>yaml‐‐>properties
optional:classpath:/ yml‐‐>yaml‐‐>properties
3-2、使用指定环境的配置文件
java ‐jar spring_initializr‐0.0.1‐SNAPSHOT.jar ‐‐spring.profiles.active=dev
通过以上命令就可以执行jar包中的开发环境配置文件
optional:classpath:/config/ profile‐dev ‐‐> yml‐‐>yaml‐‐>properties
optional:classpath:/ profile‐dev ‐‐> yml‐‐>yaml‐‐>properties
3-3、使用外部配置文件
java ‐jar spring_initializr‐0.0.1‐SNAPSHOT.jar ‐
‐spring.config.location=D:/application.properties
优先级最大, 因为指定了具体的配置文件。 所以不会和默认的约定配置文件进行互补
四、多配制文件的加载
实际项目中,可能会有很多配置文件,如数据库、redis、Netty、MQ等等,其实可以将这些配置文件都放到一个配置文件中,但是如果想将各个配置文件分开也可以的,springboot默认在扫描配置文件的时候,会扫描根目录config/*下的所有配置文件如:
config/redis/application.properties
config/mysql/aplication.prperties