SpringBoot 初始化资源、文件上传、打包部署

SpringBoot 初始化资源、文件上传、打包部署

  • 一、Spring Boot 初始化资源(Initialize resources)
    • 1、实现 CommandLineRunner 接口
    • 2、实现 ApplicationRunner 接口。
      • CommandLineRunner 接口 与 ApplicationRunner 接口
    • 3、@order 对上述两种初始化资源方法规定顺序。
    • 4、@PostConstruct 注解在方法上
  • 二、Spring Boot 文件上传。
  • 三、Spring Boot 打包部署。
    • 1、Jar 包。
    • 2、War 包。
      • 2.1、使用外置的 服务器(Tomcat )
      • server 配置文件失效。
    • 3、使用 Maven 进行打包 。
      • Jar 包与War 包启动区别

一、Spring Boot 初始化资源(Initialize resources)

在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等。

  • SpringBoot 测试初始化资源加载的入口。
@SpringBootApplication
public class ResourcesInitApplication {
	public static void main(String[] args) {
		System.out.println("The ResourcesInitApplication to start.");
		SpringApplication.run(ResourcesInitApplication.class, args);
		System.out.println("The ResourcesInitApplication has started.");
	}
}

1、实现 CommandLineRunner 接口

CommandLineRunner 中的方法会在 Spring Boot 容器加载之后执行,执行完成后项目启动完成。

  1. 定义初始化类 CommandLineRunnerTest
  2. 实现 CommandLineRunner 接口,并实现它的 run() 方法,在该方法中编写初始化逻辑
  3. 注册成Bean(添加 @Component 注解)。
## 真正实现初始化资源加载的位置
@Component
public class CommandLineRunnerTest implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        System.out.println("The CommandLineRunnerTest start to initialize ...");
    }
}

2、实现 ApplicationRunner 接口。

ApplicationRunner 中的方法会在 Spring Boot 容器加载之后执行,执行完成后项目启动完成。

  1. 定义初始化类 ApplicationRunnerTest
  2. 实现 ApplicationRunner 接口,并实现它的 run() 方法,在该方法中编写初始化逻辑
  3. 注册成Bean(添加 @Component注解)
@Component
public class ApplicationRunnerTest implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("The CommandRunner start to initialize ...");
    }
}

CommandLineRunner 接口 与 ApplicationRunner 接口

  • 两者初始化资源的效果相同。
  • 两者的区别是 run() 方法中自带的形参不相同,在 CommandLineRunner 中只是简单的String… args 变长形参,而 ApplicationRunner 则是包含了 ApplicationArguments 对象,可以帮助获得更丰富的项目信息。
    SpringBoot 初始化资源、文件上传、打包部署_第1张图片

3、@order 对上述两种初始化资源方法规定顺序。

  • 添加 @Order 注解的实现类最先执行。
  • 并且 @Order() 里面的值越小越先执行。

4、@PostConstruct 注解在方法上

使用 @PostConstruct 注解同样可以帮助我们完成资源的初始化操作,前提是这些初始化操作不需要依赖于其它 Spring Beans 的初始化工作。
由于不必等待 SpringBoot 容器的初始化完成,所以使用 @PostConstruct 注解进行初始化操作的顺序是最快的。

@PostConstruct
public void postConstructTest() {
	System.out.println("... PostConstruct 资源初始化方法注解 …");
}

二、Spring Boot 文件上传。

SpringMVC 的文件上传以及文件下载:https://blog.csdn.net/Roobert_Chao/article/details/89485514

  1. application.properties 配置文件添加:
# 上传文件总的最大值
spring.servlet.multipart.max-request-size=10MB		限制单个文件的最大值
# 单个文件的最大值
spring.servlet.multipart.max-file-size=10MB		限制上传的多个文件的总大小
  1. 配置 上传文件的操作 Bean 。
    SpringBoot 初始化资源、文件上传、打包部署_第2张图片

三、Spring Boot 打包部署。

我们了解的三种打包方式:pom、jar、war。

  1. pom 包:用在父级工程或聚合工程中。用来做jar包的版本控制
  2. war 包:将会打包成war,部署到外部服务器(Tomcat)。如网站或服务。
  3. jar 包:将会打包成 jar 文件,用作jar包使用,支持前后端分离。

非 Spring Boot 项目的打包方式:https://blog.csdn.net/Roobert_Chao/article/details/90755168

1、Jar 包。

为了防止出现打包成功,但打出来 jar文件 不包含依赖,且是不能直接运行的情况。
需要查看 maven-compiler-plugin 插件文档:
https://docs.spring.io/spring-boot/docs/2.0.3.RELEASE/maven-plugin/usage.html

  1. pom.xml 中声明主类。
    SpringBoot 初始化资源、文件上传、打包部署_第3张图片
  2. 点击 【Maven】插件中的 【install】或者是【package】。
  3. 或者使用如下方式。
    SpringBoot 初始化资源、文件上传、打包部署_第4张图片SpringBoot 初始化资源、文件上传、打包部署_第5张图片
    module 选择需要打包的项目名。Main Class 选择项目的主程序类。输出目录确保是空的,MANIFEST.MF 文件只有一个。保存设置。

SpringBoot 初始化资源、文件上传、打包部署_第6张图片
SpringBoot 初始化资源、文件上传、打包部署_第7张图片
SpringBoot 初始化资源、文件上传、打包部署_第8张图片
最后的输出 Jar 文件在 out(橙色,编译后的文件夹) 文件夹下边。运行 java -jar xxxx.jar即可运行项目。

2、War 包。

  • 使用外部的服务器,默认的启动类要继承SpringBootServletInitiailzer类,并复写configure()方法。
  1. SpringBootServletInitializer 的执行过程,就是通过SpringApplicationBuilder 构建并封装SpringApplication对象,并最终调用 SpringApplication 的 run 方法的过程。
  2. SpringBootServletInitializer就是原有的web.xml文件的替代。

2.1、使用外置的 服务器(Tomcat )

  1. 确认 pom.xml 中的打包方式,配置 SpringBoot 打包插件。
    SpringBoot 初始化资源、文件上传、打包部署_第9张图片
  2. 移除 tomcat 或者依赖 tomcat 修改为 Scope 修改为 provide 。
  • 移除 tomcat 。
    SpringBoot 初始化资源、文件上传、打包部署_第10张图片
  • 修改 tomcat 的作用范围。
    SpringBoot 初始化资源、文件上传、打包部署_第11张图片
  1. 继承 SpringBootServletInitializer 实现 configure ,并实现主类方法。
    方式一:启动类继承SpringBootServletInitializer实现configure:
    SpringBoot 初始化资源、文件上传、打包部署_第12张图片
    方式二:新增加一个类 继承 SpringBootServletInitializer 实现configure。
    SpringBoot 初始化资源、文件上传、打包部署_第13张图片
  2. build 构建 或者使用 【运行命令 mvn package,在 target 目录下生成war包】。
    SpringBoot 初始化资源、文件上传、打包部署_第14张图片

server 配置文件失效。

使用外部Tomcat部署访问的时候,application.properties(或者application.yml)中配置的

server.port=
server.servlet.context-path=

将失效,将使用 tomcat 的端口,访问 webapps下项目名进行访问。
为了防止应用上下文所导致的项目访问资源加载不到的问题,建议pom.xml文件中标签下添加<\finalName><\/finalName>标签。如下:
SpringBoot 初始化资源、文件上传、打包部署_第15张图片

3、使用 Maven 进行打包 。

  1. 注意 pom.xml 文件中的打包方式,确定后点击 package。
    Maven 命令详情查看文章:https://blog.csdn.net/Roobert_Chao/article/details/91129512#Maven__85
    SpringBoot 初始化资源、文件上传、打包部署_第16张图片

Jar 包与War 包启动区别

  • Jar包:执行 SpringBootApplication 的 run 方法,启动 IOC 容器,然后创建嵌入式Servlet 容器。
  • War包:先是启动Servlet服务器,服务器启动Springboot应用(springBootServletInitizer),然后启动 IOC容器。
    SpringBootServletInitializer 实例执行 onStartup 方法的时候会通过 createRootApplicationContext方法来执行 run 方法,接下来的过程就同以 Jar包 形式启动的应用的 run 过程一样了,在内部会创建IOC容器并返回,只是以war包形式的应用在创建IOC容器过程中,不再创建Servlet容器了。
  • SpringBootServletInitializer 可以使用外部的 Servlet 容器。
1. 必须创建 war 项目,需要创建好web项目的目录。
2. 嵌入式 Tomcat 依赖 scope指定provided。
3. 编写 SpringBootServletInitializer 类的子类,并重写 configure 方法。

public class ServletInitializer extends SpringBootServletInitializer { 
    @Override  
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {  
        return application.sources(FormyselfApplication.class);  
    }  
}

你可能感兴趣的:(java,SpringBoot,软件工具)