Spring Boot项目的创建与基础配置分析 绝地灬酷狼 2021-09-23 07:42 159阅读 0赞 **一、SpringBoot项目的创建** Spring Boot项目创建的方式有很多,可以在cmd命令中通过Maven命令创建、在Eclipse中创建、使用STS创建、利用Idea创建或通过[Spring Initializr][]网站地址http://start.spring.io/创建。在这里我使用网站地址创建为例,与Swagger2文档集成。 1.网址输入http://start.spring.io/,大致内容如下: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjUxMDMy_size_16_color_FFFFFF_t_70] 2.下载成功之后会生成一个zip包,解压后用我们的IntelliJ IDEA打开,目录如下: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjUxMDMy_size_16_color_FFFFFF_t_70 1] **二、基础配置分析** ZhApplication为主程序入口,可直接运行该类启动项目。resources为配置目录,用于存放一些配置信息。test文件用于单元测试使用。 1.pom.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"> <modelVersion>4.0.0</modelVersion> <!--Maven版本-> <parent> <!---父项目配置,定义了SpringBoot版本的基础依赖,以及默认的配置内容--> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.8.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.yjkf</groupId> <!--在创建时对应项目包--> <artifactId>zh</artifactId> <!--包名--> <version>0.0.1-SNAPSHOT</version> <!--版本号--> <packaging>jar</packaging> <!--打包的形式为jar,如果不写,默认也是jar,而非war的形式--> <name>zh</name> <!--项目名--> <description>Demo project for Spring Boot</description> <!--描述信息,可以自己修改--> <properties> <java.version>1.8</java.version> <!--Java版本--> </properties> <dependencies> <!---依赖集--> <dependency> <!--SpringBoot的Starter POMs采用spring-boot-starter-*的命名方式--> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <!--指定使用的插件--> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> 2.理解spring-boot-starter spring-boot-starter为SpringBoot提供诸多“开箱即用”的依赖模块,是基于Spring框架的“约定优先于配置(COC)”这么一个理念的实践之路,并且位于org.springfrmework.boot包或者命名的空间下。所有的spring-boot-starter-xx都有约定的默认配置,但允许我们调整这些配置以改变默认的配置行为,即为“约定优先于配置”。在这里对干预SpringBoot行为的配置方式(优先级从高到低)划分为命令、环境变量、文件系统中的配置文件、classpath中的配置文件、代码中的配置项。 3.了解spring-boot-starter-web 上面的pom.xml文件缺少了一个最常见的Web应用依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> 应用中添加改依赖后,在项目下通过mvn spring-boot:run,就可以直接直接启动一个嵌入式tomcat服务Web请求的Web应用,不过这样没做处理的Web应用会在页面上返回一个whitelabel error page的错误。 spring-boot-starter-web自动为我们配置了SpringMVC必要组件,如ViewResolver,Converter,Formatter,一系列的HttpMessageConverter等。 嵌入式Web容器的层面的约定:spring-boot-starter-web默认使用嵌入式tomcat作为web容器对外提供HTTP服务,默认的使用8080端口对外监听和提供服务。如果不想使用默认的嵌入式tomcat,那么可以引入spring-boot-starter-jetty或spring-boot-starter-undertow做为替代。spring-boot-starter-web提供了很多以server.为前缀的配置项,如:server.ssl.\*、server.port等,如果默认的约定满足不了需求,可以通过对IoC容器进行定制。 4.spring-boot-starter-jdbc SpringBoot为我们默认集成了数据库访问设施,默认情况下,在没有配置任何DataSource,SpringBoot会为我们自动配置一个嵌入式的DataSource,默认的DataSource自动配置如下: spring.datasource.url=jdbc:mysql://{host}:3306/{dataName} spring.datasource.username={username} spring.datasource.password={password} *SpringBoot中这些“开箱即用”的依赖很多,上面就列举了两个方便大家理解。下面时是对SpringBoot项目的基本注解进行简要刨析。* 5.@SpringBootApplication 按住Ctrl键,鼠标点进后,会看到 @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan( excludeFilters = {@Filter( type = FilterType.CUSTOM, classes = {TypeExcludeFilter.class} ), @Filter( type = FilterType.CUSTOM, classes = {AutoConfigurationExcludeFilter.class} )} ) public @interface SpringBootApplication { ... } 代码中可以看到,它定义了很多个Annotation,但重要的只有三个,即称为“三体”结构。这三个分别为@Configuration、@EnableAutoCOnfiguration、@CompnentScan。说白了我们的入口程序 @SpringBootApplication public class ZhApplication { public static void main(String[] args) { SpringApplication.run(ZhApplication.class, args); } } 就是 @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan public class ZhApplication { public static void main(String[] args) { SpringApplication.run(ZhApplication.class, args); } } 下面在对这三个注解进行逐一分析 1. @Configuration 这个注解就是JavaConfig形式的Spring IoC容器使用的那个@Configuration,所以这里的@Configuration也是一个IoC容器的配置类。为了便于理解,我把主程序这样拆解: @Configuration @EnableAutoConfiguration @ComponentScan public class ZhConfiguration{ @Bean public Controller controller(){ return new Controller(); } } public class DemoApplication{ public static void main(String[] args){ SpringApplication.run(ZhCnfiguration.class, args); } } ZhConfiguration定义的就是一个JavaConfig形式的IoC容器配置类。 1. @EnableAutoConfiguration @EnableAutoConfiguration与Spring框架的@Enable开头的注解类似,都是借助@Import的支持。@EnaableAutoConfiguration结构也很复杂 @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage @Import({AutoConfigurationImportSelector.class}) public @interface EnableAutoConfiguration { ... } @EnableAutoConfiguratin可以将SpringBoot应用的所有符合条件的@Configuration配置都加载到当前SpringBoot创建并使用IoC容器,但这必须借助一个工具:SpringFactoriesLoader的支持。 SpringFactoriesLoader是Spring框架私有的一种扩展方案,主要功能是从指定的配置文件META-INF/spring.factories(格式为Key=Value)。 1. @ComponentScan 它的作用就是自动扫描并加载符合条件的组件或bean定义,最终将这些bean定义加载到容器中,加载bean定义到Spring的IoC容器中,我们可以手工单个注册,所以@CmponentScan可有可无 6.application.properties文件 SpringBoot应用的配置内容都可以集中在该文件中,当然除了传统的properties文件外,还有一种被广泛推荐的YAML文件。YAML是一个高可读性,用来表达资料序列的格式。在这里,列举一个小例子对properties文件与YAML进行对比。 YAML格式: environments: dev: url: http://dev.bar.com name: Developer Setup prod: url: http://foo.bar.com name: My Cool App 等价于properties文件格式: environments.dev.url=http://dev.bar.com environments.dev.name=Developer Setup environments.prod.url=http://foo.bar.com environments.prod.name=My Cool App YAML的配置是利用阶梯化缩进方式编码,更易于阅读,编写时比较容易出错。当YAML文件与properties文件同时存在时,程序会先识别YAML文件。但YAML配置无法通过@PropertySource注解来加载。 本篇博客就说到这里吧,有不足的地方还会持续更进,这是我的笔记,也希望能为你们提供一点帮助吧! [Spring Initializr]: http://start.spring.io/ [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjUxMDMy_size_16_color_FFFFFF_t_70]: /images/20210923/8eacc59a1fbb4273be14b17a233e4566.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjUxMDMy_size_16_color_FFFFFF_t_70 1]: /images/20210923/e48f083d9b6f4a59b59366be039724d0.png
相关 Spring Boot与Java配置对比分析 Spring Boot和Java配置在现代软件开发中都是重要的工具,它们分别代表了两种不同的设计思路。以下是两者的主要对比: 1. **简化启动过程**:Spring Boo Myth丶恋晨/ 2024年09月11日 20:57/ 0 赞/ 27 阅读
相关 Spring Boot 项目创建 Spring Boot 听起来很陌生的, 但是大家一定听过脚手架, 其实 Spring Boot 就是一个脚手架, 哪什么是脚手架呢 ? 脚手架更多的是一种工具, 比如在建 我会带着你远行/ 2024年03月22日 13:27/ 0 赞/ 10 阅读
相关 创建spring boot 项目 本人使用的IDEA是IntelliJ。创建项目过程直接上图: ![这里写图片描述][SouthEast] ![这里写图片描述][SouthEast 1] ![这里写图片描 矫情吗;*/ 2022年06月09日 00:57/ 0 赞/ 210 阅读
相关 Spring Boot 多模块项目创建与配置 (一) [Spring Boot 多模块项目创建与配置 (一)][Spring Boot _] 最近在负责的是一个比较复杂项目,模块很多,代码中的二级模块就有9个,部分二级模块下 向右看齐/ 2022年05月26日 07:13/ 0 赞/ 136 阅读
相关 IDEA创建Spring Boot的项目 打开IntelliJ IDEA,在菜单栏选择File菜单-->New-->Project...-->Spring Initializr,Project SDK即选择JDK的版本 àì夳堔傛蜴生んèń/ 2022年05月16日 11:28/ 0 赞/ 185 阅读
相关 spring boot 学习之一(创建spring boot项目与热部署) spring boot是现在最流行的框架没有之一。 实行约定优于配置,简化了搭建过程,简化了开发过程。 配套的测试让我们单元测试高效省事。 围绕spring boot产生 r囧r小猫/ 2022年01月06日 10:23/ 0 赞/ 191 阅读
相关 spring boot 与 mybatis集合创建项目 1,建立项目在pom.xml导入jar <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http 布满荆棘的人生/ 2021年09月27日 15:28/ 0 赞/ 167 阅读
相关 spring-boot项目与spring-boot-data-jpa数据连接结合创建项目详情 创建spring-boot项目: 1,在spring.io官网下载spring-boot项目 ![70][] 2,点击spring boot进入 ![70 1][]选择 超、凢脫俗/ 2021年09月27日 15:20/ 0 赞/ 182 阅读
相关 Spring Boot项目的创建与基础配置分析 一、SpringBoot项目的创建 Spring Boot项目创建的方式有很多,可以在cmd命令中通过Maven命令创建、在Eclipse中创建、使用STS创建、利用Ide 绝地灬酷狼/ 2021年09月23日 07:42/ 0 赞/ 160 阅读
还没有评论,来说两句吧...