初识springboot(二)

写在前面的话 :

在上一篇文章中,我已经给大家简单介绍了springboot的一些基本的用法,包括整合Mybatis、thymeleaf。相比较ssm框架,springboot在配置方面真的是太省事了。
那么在这边文章中,关于springboot的一些基本用法就不给大家介绍了,这篇文章主要是给大家介绍一些实际开发中可能会用到的知识点或者说是一些小技巧。

可能会遇到的问题:

1. 多套环境的参数配置该何如配置?
2. springboot如何进行热部署?
3. 常用的、固定的参数如何设置、取值?
4. springboot部署时可以采用jar也可以采用war,默认采用是jar包,那么如何采用war包进行部署?

问题一:多套环境配置该何如配置

产生背景:

这个问题其实在实际开发中,大部分人都遇到。因为本地开发是一个环境,测试是一个环境,产线又是另外一个环境。针对不同的环境(最简单的数据库帐号密码)的参数配置是不一样的。那么如何在不同的环境采用不同的配置文件呢?
我这边采用的是脚本的方式去改变参数。具体就不细讲了,基本就是每套环境对应一套脚本和配置文件。

解决方案:

springboot中同样是采用多个配置文件。我们可以在 resources下新建 格式如 application-{profile}.properties格式,其中{properties}对应你的环境标识,如下所示:

  • application-dev.properties 开发环境
  • application-pro.properties 正式环境
  • application-test.properties 测试环境

具体哪个文件被加载,需要在applicaiton.properties文件中通过指定spring.profiles.active属性来设置,其值对应的是配置文件中的{profile}值。如果spring.profiles.active=test就会加载 application-test.properties 配置文件内容。
最终在执行jar 包时,我们可以指定 spring.profiles.active的值

java -jar xxxx.jar  --spring.profiles.active=test

给大家拓展一下:这里执行的命令 可以动态改变application.properties中的键值对,比如我执行这样的命令:
java -jar xxxx.jar --server.port=8081 可以指定服务器端口

问题二:springboot如何进行热部署

产生背景:

每次修改一点代码都需要重启,特别是前端修改了html,每次重启都需要5、6秒钟,虽然时间不长,但是次数多了,很烦。(不仅仅是springboot项目,简单的ssm项目也会出现这样的烦恼)。

解决方案:

pom.xml 导入:

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
      <optional>true</optional>
</dependency>

pom.xml 添加 spring-boot-maven-plugin:

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

到这里,我们已经实现修改后端代码实现热部署。但是html 修改后怎么才能实现热部署呢?
在笔者的项目中,笔者采用的是 thymeleaf模版,其中thymeleaf默认是开启html缓存的,所以我们在配置文件中需要将cache设置为false。applicaiton.yml:

spring:
  thymeleaf:
     cache: false

问题三:常用的、固定的参数如何设置、取值

产生背景:

比如项目中用到第三方接口,第三方接口的地址或者Token值。肯定不能写在源码中,不然地址变了,还需要修改源码,所以我们以配置文件的方式来设置接口或者Token值

解决方案:

这个很简单,对于配置文件我们都是在applicaiton.yml中进行配置:

lbs:
  webApi: http://restapi.amap.com/v3/assistant/coordinate/convert

在类中获取值:

 @Value("${lbs.webApi}")
 private String longLatTransitionUrl;

其实还有一种方式去获取参数值 @PropertySource,感兴趣的同学可以自己去百度下,这里我不做介绍了。

问题四:SpringBoot如何打包成war包

产生背景:

虽然Spring Boot自己有tomcat,也提供了很多配置选项可以去配置tomcat,但是很多时候可能一个tomcat下部署多个项目。还有一种情况:因为每次重新启动都是用新的tomcat服务器,比如上传到项目的文件,如果是保存在项目中的,那么重启过后文件就会丢失(不要较真可以存数据库)。因此,我们才需要将SpringBoot项目打成war包,放到Tomcat中去运行。

解决方案:

首先附上官网地址解决方案地址:
https://docs.spring.io/spring-boot/docs/2.0.2.RELEASE/reference/htmlsingle/#howto-create-a-deployable-war-file
如果你英文足够好,请移步官网地址,肯定比我这个半吊子翻译过来的好很多。

  1. first step 修改启动类,首先继承 SpringBootServletInitializer,重写SpringApplicationBuilder方法。如下图所示:
package com.example.springbootdemo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
public class SpringbootdemoApplication extends SpringBootServletInitializer {

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

    public static void main(String[] args) {
        SpringApplication.run(SpringbootdemoApplication.class, args);
    }
}
  1. 将pom.xml中的打包格式从jar改成war
  <groupId>com.example</groupId>
    <artifactId>springbootdemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>springbootdemo</name>
  <description>Demo project for Spring Boot</description>
  1. 最后一步,需要在maven中加入 容器tomcat:
<dependencies>
    <!-- … -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    <!-- … -->
</dependencies>

至此,该项目就会从一个jar包打包成一个war包。
打包:
打包
最终在target文件下生成war包,然后复制到tomcat/webapp 文件下,启动项目(默认的项目名是name+version),我们可以指定打包的名字: <finalName>cjtest</finalName>

  <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
        <finalName>cjtest</finalName>
    </build>

总结:

几个问题活着小技巧其实不难,只是在实际开发中会遇到,这里总结下,方便大家能够了解。如果大家在实际开发中遇到其他的一些问题,也可以在下面留言,一起分享。

猜你喜欢

转载自blog.csdn.net/bicheng4769/article/details/80624821