springBoot_1--启动流程、部署、WebMvcConfigurer

本文详细介绍了Spring Boot的核心原理,包括其简化配置的特性,基于starter的依赖管理和预配置,以及项目的目录结构。文章还探讨了启动类的作用,自动配置的工作方式,以及如何自定义配置和加载资源。此外,还涵盖了Spring Boot项目的部署选项,并展示了如何通过WebMvcConfigurer接口扩展Spring MVC的功能。最后,提供了关于配置文件位置和跨域支持的实践示例。
摘要由CSDN通过智能技术生成

认识springboot框架

  • 解决ssm框架的繁琐配置文件,其实是spring框架的深入的应用,把ssm框架中的习惯性的配置信息作为了默认的预配置。
  • 是一个spring技术的全家桶。整个web开发的技术栈基本都做了支持。

springboot简单原理

  • 创建的springboot项目,是从spring-boot-starter-parent父工程继承来的。(父工程统一了各种依赖的版本)
  • springboot官方提供了各种组件的启动器starter。web启动器,即把web开发需要用到的各种依赖做集成.(jar,配置文件),
    • 比如web启动器:
    • web开发需要依赖springMVC,spring-web,spring的核心包,jackson等各种jar包;
    • web开发的默认配置类:WebMvcAutoConfiguration类中做了springMVC相关的预配置bean,比如RequestMappingHandlerMapping,静态资源,视图映射,json消息转换器等各种web层的bean对象。
  • 在第三方框架,要往springboot框架中集成使用,需要提供自定义启动器。比如:Druid-spring-boot-starter,mybatis-spring-boot-starter。

springboot的预配置类(官方启动器的预配置都在spring-boot-autoconfiguration/META-INF/spring.factories中key为org.springframework.boot.autoconfigure.EnableAutoConfiguration),当加入对应的starter后,对应的配置类生效。第三方的启动器类的jar包一般都带有自定义的配置类。
springboot的启动器:(starter):配置了某个技术栈需要用到各种依赖jar包,以及配置类信息。

认识springboot的目录结构

  • src/main/java:放java类
  • src/main/resources/static:放静态资源,js,css,图片
  • src/main/resources/templates:放视图模板(html中使用模板引擎的语法,比如jsp,比如freemarker,比如thymeleaf)
  • application.properties:默认配置文件(配置服务器端口,部署路径,tomcat优化信息,数据库url,username,password等信息)

启动类认识

  • @SpringBootApplication

    • @SpringBootConfiguration:表明该类是一个spring风格的配置类
    • @ComponentScan:开启包扫描,具体的扫描路径由EnableAutoConfiguration来做配置。
    • @EnableAutoConfiguration
      • @AutoConfigurationPackage:配置包扫描路径,获取当前启动类的包名作为扫描范围。
      • @Import({AutoConfigurationImportSelector.class}):通过配置类选择器,去所有jar包的META-INFO/spring.factories文件中查找key为org.springframework.boot.autoconfigure.EnableAutoConfiguration的值,这些值统统都是候选的配置类。
  • SpringApplication.run(Application.class, args)

    • 初始化spring容器,加载配置类(当前类)
    • 确定当前项目类型:(servlet项目)
    • 错误分析器:初始化21个内置的错误分析器对象,把框架运行中产生的异常信息输出为可阅读的信息。
    • Banner: Banner printedBanner = this.printBanner(environment);
    • 容器初始化: context = this.createApplicationContext()

自定义的配置类放在启动类的同级或下级包下能生效;放在上级包不生效。是因为自动配置的包扫描路径是启动类的包名。

相关的加载配置

@PropertySource("classpath:jdbc.properties") // 加载自定义properties配置文件
@ImportResource("classpath:spring.xml") // 加载自定义的spring风格的xml配置文件
@Import(MyAnnotationConfig.class) // 加载自定义的spring风格的配置类
这些注解是写在配置类中的,任何一个配置类中都可以。

配置信息以Application开头的文件,会自动加载。
  • 加载自定义的properties文件

    • 通过PropertySource指定自定义文件的位置。
    • 在任何一个bean对象中使用@Value注解获取properties文件中的数据。
    • 自定义的配置信息可以放在默认的application.properties或者自定义的properties都可以,无非取数据可以通过@Value取单个数据或通过@ConfigurationProperties注解指定前缀批量获取数据。
  • 默认的配置文件两种格式:yml和properties

    • properties中:集合:逗号分隔多个数据,数值:直接数字,map:key=value

    • yml:yml文件的优先级低于properties文件,写法是以缩进表示层级关系。大小写敏感。冒号后面的数据必须加空格。

  • 配置文件可以放的位置:

    • 项目下/config

    • 项目下

    • 项目下/resources/config

    • 项目下/resources

部署springboot项目

  • 打jar包,通过java -jar指令运行jar包。
  • 打war包,把war放在服务器下的指定应用服务器tomcat,weblogic目录下。
    • 指定war
    • 指定war包名
    • 把自带的tomcat启动器的scope指定为provided,不参与打包
    • 从SpringBootServletInitializer接口重写configure方法,指定程序的入口。
<groupId>com.javasm</groupId>
<artifactId>0827boot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

<build>
    <finalName>0827boot</finalName>
    <plugins>
        <!--对springboot项目打jar使用,与maven默认的打包有区别-->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(Application.class);
    }

    public static void main(String[] args)
    {
        SpringApplication app = new SpringApplication(Application.class);
        app.setBannerMode(Banner.Mode.OFF);
        app.run(args);
    }
}

WebMvcConfigurer接口进行springMVC扩展使用

  • addCorsMappings方法添加的跨域支持,在拦截器中需要对预检请求放行。
@Component
public class MyWebMvcConfigurer implements WebMvcConfigurer {
    //配置视图映射,把各个处理器中用来转页面的接口统一放在此处做映射
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/gh").setViewName("hello");
        registry.addViewController("/ul").setViewName("user/userlist");
//      registry.addViewController("/user/gh").setViewName("hello");
    }

    //格式转换器,把前端传递的参数,转成我们指定的格式,日期转换,对全局生效
    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new MyDateConverter());
    }

    //拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/user/**","/role/**");
    }

    //配置跨域支持
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**").allowedHeaders("*").allowedMethods("*").allowedOrigins("*").allowCredentials(true);
    }

}
如果出现springboot-quickstart-0.0.1-SNAPSHOT.jar中没有主清单属性信息,你可以按照以下步骤进行处理: 1. 首先,检查你的pom文件中是否有正确配置spring-boot-maven-plugin插件。确保以下代码在pom.xml文件中的<build><plugins>部分中: ```xml <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> ``` 2. 其次,确认你的jar包中是否包含一个名为MANIFEST.MF的文件。该文件应该位于jar包的META-INF目录下。如果没有这个文件,或者文件中没有正确的清单属性信息,就会导致出现没有主清单属性的错误。 如果你遵循了以上步骤,并且仍然出现没有主清单属性的错误,可以尝试以下解决方法: 1. 在命令提示符中进入jar包所在位置,然后执行以下命令: ``` jar -jar springboot_01_quickstart-0.0.1-SNAPSHOT.jar ``` 这个命令会尝试执行jar包,并输出更详细的错误信息。根据错误信息,你可以进一步排查问题。 2. 检查你的Spring Boot引导类(通常是一个带有@SpringBootApplication注解的类)。确保这个类中包含了一个main方法,类似于下面的代码: ```java @SpringBootApplication public class Springboot01QuickstartApplication { public static void main(String[] args) { SpringApplication.run(Springboot01QuickstartApplication.class, args); } } ``` 以上是处理springboot_01_quickstart-0.0.1-SNAPSHOT.jar中没有主清单属性的一些方法和步骤。希望对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值