Spring Boot
SpringBoot
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突(如Maven整合了所有的jar包),以及引用的不稳定性等问题得到了很好的解决。
SpringBoot主要特性
1、简化Maven配置。springboot提供了一系列的starter用来简化maven依赖。如:常用的spring-boot-starter-web、spring-boot-starter-tomcat等;
2、提供了POM文件,能够非常方便的进行包管理
3、自动配置:springboot会根据我们项目中类路径的jar包,为jar包的类进行自动装配bean;
4、内嵌servlet容器,降低了对环境的要求,可用命令直接执行项目;
5、应用监控。springboot提供了基于HTTP、ssh、telnet对运行时的项目进行监控。springboot提供了actuator组件,只需要在配置中加入spring-boot-starter-actuator依赖,为了保障安全性,一般需要加入security依赖输入验证信息即可。
6、遵循习惯优于配置的原则。使用springboot我们只需要很少的配置,大多数使用默认配置即可
项目建立注意
1、Spring boot DevTools:它最重要的功能就是自动应用代码更改到最新的应用程序上,只要类路径上的文件发生更改,使用的应用程序就会自动重新启动。即实现热部署,方便开发过程中调试代码。
2、Lombok:它的功能是减少实体类的重复代码书写,如:get、set、toString等方法。Lombok的一个@Data注解,即可提供getter、setter、equals、canEqual、hashCode、toString方法。
IDE中需要安装Lombok插件才可以使用,否则在调用实体类中的方法时会提示没有此方法。
POM.xml
POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖。
具体如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<!-- pom模型版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 项目组织的唯一标识符 :对应JAVA的包的结构,是main目录里java的目录结构-->
<groupId>com.yc.springcloud812</groupId>
<!-- 项目的标识,通常就是项目的名称,groupId 和 artifactId 一起定义了 项目在仓库中的位置-->
<artifactId>microservice</artifactId>
<!-- 打包方式 (pom,war,jar)-->
<packaging>pom</packaging>
<!-- 项目版本号-->
<version>0.0.1-SNAPSHOT</version>
<!-- 项目名-->
<name>microservice</name>
<!-- 项目的描述, Maven 作用于产生的文档 -->
<description>Demo project for Spring Boot</description>
<!-- POM文件常量定义区,在文件中可以直接引用,如版本、编码等。使用方式${java.version}-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!-- 编译字符编码为utf-8 -->
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><!-- 输出字符编码为UTF-8 -->
<java.version>1.8</java.version>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
<spring-cloud.version>Greenwich.SR6</spring-cloud.version>
<spring-boot.version>2.1.17.RELEASE</spring-boot.version>
</properties>
<!--该项目下子项目的项目名(artifactId)-->
<modules>
<module>microservice-api</module>
<module>microservice-provider</module>
<module>microservice-consumer</module>
<module>microservice-consumer2</module>
<module>microservice-security</module>
<module>microservice-eureka</module>
<module>microservice-eureka2</module>
<module>microservice-eureka3</module>
<module>microservice-provider4</module>
<module>microservice-provider5</module>
<module>microservice-consumer-feign</module>
<module>microservice-interface</module>
</modules>
<!-- 会实际下载jar包,子项目会继承这些依赖 -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional> <!-- 标记依赖是否可传递,标记为true表示可以传递依赖,以避免包冲突 -->
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<!--
optional:可选依赖。标记依赖是否可传递,默认值false。
scope:用来指定当前包的依赖范围
compile(编译范围),是默认的范围,编译范围依赖在所有的classpath中可用,同时它们也会被打包。
provided(已提供范围),只有在当JDK或者一个容器已提供该依赖之后才使用。
runtime(运行时范围),在运行和测试系统的时候需要。
test(测试范围),在一般的 编译和运行时都不需要。
system(系统范围),与provided类似
type: 用于声明依赖的类型
-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope> <!-- type为pom,则scope要为import -->
</dependency>
<!--多增加一个 druid数据库联接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.31</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.0.4</version>
</dependency>
<dependency>
<groupId>com.yc.springcloud812</groupId>
<artifactId>microservice-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.yc.springcloud812</groupId>
<artifactId>microservice-security</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.yc.springcloud812</groupId>
<artifactId>microservice-interface</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</dependencyManagement>
<!--
1、当计算传递依赖时, 从依赖构件列表里,列出被排除的依赖构件集。
即告诉maven你只依赖指定的项目,不依赖项目的依赖。
此元素主要用于解决版本冲突问题
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
2、 dependencyManagement对所依赖jar包进行版本管理,
而dependencies中的jar直接加到项目中.
dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声
明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有
在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且
version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项
目中指定的jar版本.
-->
<!--构建项目的信息 -->
<build>
<!--构建工具插件管理-->
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.2.2.RELEASE</version>
</plugin>
</plugins>
</build>
</project>
======================
scope详解
<scope>import</scope>
使用import scope可以解决maven继承(单)问题
在Maven的POM文件的parent标签一般都是继承spring-boot-starter-parent。
而如果想要多个继承,可以建立一个封装的pom来管理一些依赖packaging=pom打包,相应的pom文件需要使用某些依赖时,在dependencyManagement下引入包含封装pom的项目包,scope=import,type=pom。然后在dependencies下引入相关依赖可以不指定版本(封装的pom文件已经指定)
配置文件
Spring Boot 的配置文件有两种不同的格式,一种是 properties ,另一种是 yml 。其中默认的配置文件名为:application
application配置文件可以写在Spring Boot项目四个不同的位置,位置如下(序号为项目读取优先级,没有config目录可自建):
1、项目根目录下的config目录中
2、项目根目录下
3、classpath(即src.main.resources)下的config目录中
4、classpath(即src.main.resources)目录下
//如果引入其他配置文件
//注意:@PropertySource读取的是properties 文件
//@PropertySource,@ConfigurationProperties可引入配置文件,并将配置文件中的值注入到该类的属性中
@PropertySource("classpath:test.properties")
@ConfigurationProperties(prefix = "test")
public class Test{
}
待续===============