美文网首页Java学习笔记
Spring Boot初学者要知道的干货

Spring Boot初学者要知道的干货

作者: 心扬 | 来源:发表于2018-03-08 16:52 被阅读19次

北京时间 2018 年 3 月 1 日早上,在经历了一番波折之后,Spring Boot 2.0.0发布了,这对于每一个java web开发者来说,都是值得欣喜的事情

Spring Boot的出现,无意对于像我这样热衷于前后端分离开发的人来说,是一件值得欣喜的事情。也结束了我每一次在搭建项目环境时,对于配置文件的重复编写

更觉得自己应该开始记录自己在使用Spring Boot过程中的点点滴滴

环境搭建

创建maven项目,在pom.xml中添加依赖

  1. 首先要继承spring-boot
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.0.RELEASE</version>
</parent>

2.添加依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

由于我们在继承的时候已经指定了版本,所以这里就不需要版本了

3.编写启动类

package com.funshion;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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


执行App类的main方法,我们就启动了web项目,一个java-web项目

搭建配置简单

java-web开发,搭建环境最重要的就是要添加我们需要的第三方依赖库,在传统的项目搭建中,我们要依赖一大堆的spring库,但是spring-boot为我们减少了一些繁琐无用的依赖配置,世界顿时清净了!

内置软件服务

spring-boot内嵌了tomcat服务,我们执行了App类的main,就启动了Tomcat,默认监听8080端口

接下来的开发就跟我们原来使用spring开发一样了,各种daoservicecontroller分层结构开始使用了

项目编译打包

在开发完成后,我们需要将项目代码编译打包,然后部署到服务器上,对于spring-boot项目的打包,我们需要对其做一些配置
1.配置打包插件

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

如果没有这个插件,打包的后jar文件在启动时,会找不到启动类

2.打包war文件,要代码中指定servlet的初始化

package com.funshion.common.config;

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

import com.funshion.App;

public class ServletInitializer extends SpringBootServletInitializer{

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

环境自动切换

在项目或产品从开发、内测、公测、发布的过程中,总是免不了要发生服务器环境的变化,或者一些参数要进行变化,如

  • 数据库相关信息不同
  • 日志级别不同
  • 文件路径不同
  • 与其他系统交互的接口地址不同
  • ……

所以需要我们做一些非常有用,但是却没有多少价值的工作

然而spring-boot为我们带来了环境切换的功能

假如我们需要配置4个环境

  • dev 开发环境
  • test 内测环境
  • beta 公测环境
  • prod 生产环境
  1. src/main/resources目录创建application.ymlapplication-dev.ymlapplication-test.ymlapplication-beta.ymlapplication-prod.yml五个spring-boot配置文件

  2. 将不同环境的配置信息,写入到相应环境的配置文件中

  3. application.yml中进行设定

spring:
  profiles:
    active:
    - dev

我们只需要指定active的值就可以

在运行jar文件时指定

当我们使用mvn package命令后,就能将该项目编译打包成一个jar文件,在命令行中执行

java -jar app.jar --spring.profile.active=prod

在项目启动后就会自动切换到想要的环境下

部署war文件如何指定

上述说的是在打包成jar文件后,使用命令行启动,来达到环境自动切换的效果,可是按照我们已有的习惯,我们更愿意在服务器上部署好tomcat,然后将项目编程打包成war文件,然后部署到tomcat的webapps目录下,然后启动tomcat,访问我们的应用

想要在打包war文件时指定环境的变量,就需要跟maven组合在一起使用了

  1. 在pom.xml中定义不同环境的变量
<profiles>
    <!-- 开发环境 -->
    <profile>
        <id>dev</id>
        
        <properties>
            <spring.profiles.active>dev</spring.profiles.active>
        </properties>
        <!-- 在开发环境中,修改代码能够自动重启 -->
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <optional>true</optional>
            </dependency>
        </dependencies>
    </profile>
    <!-- 生产环境 -->
    <profile>
        <id>prod</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <spring.profiles.active>prod</spring.profiles.active>
        </properties>
    </profile>
    <!-- 测试环境 -->
    <profile>
        <id>test</id>
        <properties>
            <spring.profiles.active>test</spring.profiles.active>
        </properties>
    </profile>
    <!-- beta环境 -->
    <profile>
        <id>beta</id>
        <properties>
            <spring.profiles.active>beta</spring.profiles.active>
        </properties>
    </profile>
</profiles>
  1. 使用maven-resources-plugin插件将变量写入到文件中
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <executions>
        <execution>
            <id>default-resources</id>
            <phase>validate</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>
                <outputDirectory>target/classes</outputDirectory>
                <useDefaultDelimiters>true</useDefaultDelimiters>
                <delimiters>
                    <delimiter>${*}</delimiter>
                </delimiters>
                <resources>
                    <resource>
                        <directory>src/main/resources/</directory>
                        <filtering>true</filtering>
                        <includes>
                            <include>**/*.xml</include>
                            <include>**/*.yml</include>
                        </includes>
                    </resource>
                    <resource>
                        <directory>src/main/resources/</directory>
                        <filtering>false</filtering>
                        <excludes>
                            <exclude>**/*.xml</exclude>
                            <exclude>**/*.yml</exclude>
                        </excludes>
                    </resource>
                </resources>
            </configuration>
        </execution>
    </executions>
</plugin>
  1. 修改application.yml中的配置

spring:
  profiles:
    active:
    - ${spring.profiles.active}

4.在打包命令中指定环境变量

mvn package -P prod

war文件部署需要注意的问题

spring-boot内嵌了tomcat,所以在使用war文件部署时,在编译打包的时候,就不能把tomcat相关的东西打包进去,需要修改一些配置

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

上述内容都是我在使用spring-boot的过程中遇到的,分享出来,大家共同进步!

相关文章

网友评论

    本文标题:Spring Boot初学者要知道的干货

    本文链接:https://www.haomeiwen.com/subject/gzpaxftx.html