SpringBoot学习总结(12)之部署方式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jokeMqc/article/details/89330363

一、前言

在前面我们已经介绍了利用SpringBoot极速构建一个Web应用系统,本节主要是介绍SpringBoot的部署方式,SpringBoot可以以Jar方式部署,也可以部署到支持Servlet 3.0或者支持较早的Servlet2.0的web服务器上。

SpringBoot可能会面临多环境部署,如测试环境、线上环境、预验示环境,这里也会介绍SpringBoot多环境部署的方式。

二、以Jar包方式部署

SpringBoot默认是jar包方式部署,可以在Maven配置如下插件,将SpringBoot导出可执行的jar。

<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<executable>true</executable>
				</configuration>
			</plugin>
		</plugins>
	</build>

在工程目录下的运行命令行中运行mvn p ackage :

为了验证打包成功,可以以jar 方式运行打包好的springboot-thymeleaf-0.0.1-SNAPSHOT.jar

可以将此jar 文件部署到服务器上,以jar 方式运行。通常情况下,还需要指定服务器端口、数据库连接地址等信息,我们将在多环境部署中详细讲解。简单的方法是在上面的命令行中传入系统属性,比如,如果应用使用的端口是8000 ,数据库的密码是Testl23 ! C 假设数据库用户名在多环境中保持统一〉:

>java -jar -Dserver.port=9000 -Dspring . datasource.password=Testl23!target/springboot-thymeleaf-0.0.1-SNAPSHOT.jar

三、以war包方式部署

Spring Boot 默认自带了一个嵌入式的Tomcat 服务器,可以以jar 方式运行,更为常见的情况是需要将Spring Boot 应用打成一个war 包, 部署到Tomcat 、Jetty 服务器,或者商业的Weblogic 、Websphere 上。这种情况下,需要将porn 中的packaging 改成war 方式:

    <groupId>com.mqc</groupId>
	<artifactId>springboot-thymeleaf</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	<name>springboot-thymeleaf</name>
	<description>Demo project for Spring Boot</description>

需要将嵌入的Tomcat 依赖方式改成provided , 因此增加如下依赖说明:

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

还需要对Main 类进行修改,使其继承SpringBootServletlnitializer 类,并重载configure 方法,代码如下:

package com.mqc;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;

@SpringBootApplication
public class SpringbootThymeleafApplication extends
		SpringBootServletInitializer {

	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
		return builder.sources(SpringbootThymeleafApplication.class);
	}

	public static void main(String[] args) {
		SpringApplication.run(SpringbootThymeleafApplication.class, args);
	}

}

此时我们再运行打包命令:

四、多环境部署

一般的应用系统都会有两个环境:开发环境和线上环境,大型的企业应用可能还会有更多的环境,比如测试环境,开发环境,预上线环境,生产环境等。应用的版本也可能对应了多个环境,比如1.0 版本的演示环境、2 . 0 版本的演示环境。这些环境对应了不同的配置要求,通常有:

  • 数据库的访问地址不一致,数据库的用户名与密码也不同,连接池的配置也不一样,开发环境可能只配置5个链接,而线上环境则多达上百个。
  • 日志配置不同,开发与测试的日志级别可能是debug级别,日志信息也常常包括代码所在的行,而线上的环境则通常是INFO级别的,而且为了性能考虑一般都不会输出代码所在的行,另外,对于日志文件配置也不一样,生产环境可能要求日志文件定时打包,而开发环境往往都不配置日志文件。
  • 访问的第三方系统不一样, 复杂的应用通常要访问第三方系统, 如系统内的Redis 缓存,通过阻ST 访问其他Spring Boot 应用,这都需要配置不同的IP 地址。
  • 不同的环境有不同的开关属性, 比如开发系统, 需要关闭短信、微信的通知功能, 而演示环境、线上环境则需要打开这些配置。

我们知道SpringBoot简化了配置,所有重要的属性配置都放在了application.properties中,SpringBooot允许存在多个配置文件,可以在系统部署的时候指定使用哪个配置文件覆盖默认的application.properties,从而完成多环境部署。

需要在reso旧ces 下创建application- { profile }. properties 的配置文件, 其中profile 可以是任意名字,比如:

  • test,表示测试环境。
  • prod,表示生产环境。
  • pre-prod,表示预生产环境。
  • dev,表示分支环境。

这些配置文件可以添加或者覆盖application .properties 文件的属性。在环境变量中, spring. profiles . acti ve 指定使用哪个profile , 比如:

spring:
  profiles:
    active: dev

以上配置启动后, Spring Boot 将读取resources /appIication-dev.properties 配置文件,覆盖默认的application. properties 选项。

五、@Profile注解

系统属性spring.profiles.active 可以指定使用哪种配置文件,如果指定test ,则applicationtest.properties 会覆盖默认的application.properties 。

@Profi le 注解可以结合@Configuration 和@Component 使用,以决定配置类是否生效。

package com.mqc.config;

import org.apache.tomcat.jdbc.pool.DataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.core.env.Environment;

/**
 * @author maoqichuan
 * @ClassName: DataSourceConfig
 * @description: 根据不同的环境启用不同的数据源
 * @date 2019-04-1614:18
 **/
@Configuration
public class DataSourceConfig {
    @Bean
    @Profile("dev")
    public DataSource getDatasource(Environment environment){
        // 省略代码
        return devDatasource;
    }

    @Bean
    @Profile("test")
    public DataSource getDatasource(Environment environment){
        // 省略代码
        return testDatasource;
    }
}

@Profile 注解可以支持使用多种profile ,也可以使用“!”来排除特定profile 。

  • @Profile( {“testγprod ”}),测试环境和线上环境生效:
  • @Profile( {“testγ ! prod ”}),测试环境和非线上环境生效。

到这里,SpringBoot环境部署已经介绍完毕了,加油!!!!

猜你喜欢

转载自blog.csdn.net/jokeMqc/article/details/89330363
今日推荐