SpringBoot之基础常识

129 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看活动详情

1、多环境配置文件

平时开发分开发环境、测试环境、生产环境,不同的环境使用不同的配置文件,如何来做呢?

创建如下四个配置文件:

application.properties

application-dev.properties ------ 开发环境配置文件

application-test.properties ------ 测试环境配置文件

application-prod.properties ------ 生产环境配置文件

在启动Spring Boot的时候会默认读取application.properties配置文件,这样我们在该文件中配置启用哪个配置文件即可

spring.profiles.active=dev

同样我们也可以在启动的时候指定使用哪个配置文件

java xxx.jar -Xms256m -Xmx512m -Dspring.profiles.active=prod 

2、静态资源

Spring Boot中静态资源等应该放在什么位置?

Spring Boot能大大简化WEB应用开发的原因,最重要的就是遵循“约定优于配置”这一原则。Spring Boot关于静态资源的默认配置已经完全满足绝大部分WEB应用的需求。没有必要去自定义了,使用Spring Boot约定的就好了。

在Maven工程上目录下,所有静态资源都放在src/main/resource目录下,结构如下:

src/main/resource
----static
----|----js
----|----images
----|----css

3、自定义静态资源

当然我们也可以自定义静态资源的位置,有两种方式来配置,一种是通过配置文件来配置,一种是通过代码来配置。

1、通过配置文件来配置,application.properties

# 静态文件请求匹配方式
spring.mvc.static-path-pattern=/**
# 修改默认的静态寻址资源目录 多个使用逗号分隔
spring.resources.static-locations = classpath:/templates/,classpath:/resources/,classpath:/static/

2、通过代码来配置

@EnableAutoConfiguration
@ComponentScan(basePackages = { "com.itstyle.modules" })
public class Application extends WebMvcConfigurerAdapter {
    private static final Logger logger = Logger.getLogger(Application.class);
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/cert/**").addResourceLocations("classpath:/cert/");
        super.addResourceHandlers(registry);
        logger.info("自定义静态资源目录");
    }

    public static void main(String[] args) throws InterruptedException, IOException {
        SpringApplication.run(Application.class, args);
        logger.info("支付项目启动 ");
    }
}

4、读取文件

我们通常会将一些导入文件的模板、证书之类的文件放到类目录下,我们可以通过下面的方式来读取

// 获取文件
File file = ResourceUtils.getFile("classpath:cert/readme.txt");
// 获取路径
ClassUtils.getDefaultClassLoader().getResource("cert").getPath();

5、部署到JavaEE容器

Spring Boot默认嵌入了tomcat,有时我们想部署到tomcat启动,修改如下3个地方:

1、修改启动类,继承SpringBootServletInitializer,并重写configure

public class Application extends SpringBootServletInitializer{

    private static final Logger logger = LoggerFactory.getLogger(SpringBootSampleApplication.class);

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(this.getClass());
    }

}

2、修改pom文件将打包方式由jar改为war

<!-- <packaging>jar</packaging> -->
<packaging>war</packaging>

3、修改pom,排除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>

6、指定外部配置文件

有些系统,关于一些数据库或其他第三方账户等信息,由于安全问题,其配置并不会提前配置在项目中暴露给开发人员。对于这种情况,我们在运行程序的时候,可以通过参数指定一个外部配置文件。

java -jar xxx.jar --spring.config.location=/opt/config/application.properties

7、创建启动关闭脚本

我们通常会将springboot部署到linux下,可以创建启动关闭脚本,方便管理项目

1、启动脚本 start.sh

#!/bin/sh

nohup java -jar $1  --server.port=$2  --spring.profiles.active=prod &

echo 'Start Success!'

说明:

  • 执行方式:start.sh xxx.jar 8081
  • 11和2分别传入的参数为xxx.jar和8081

2、关闭脚本 stop.sh

#!/bin/sh

tpid=`ps -ef|grep $1|grep -v grep|grep -v kill|awk '{print $2}'`
if [ "${tpid}" ]; then
    echo 'Stop Process...'
    kill -15 $tpid
fi
sleep 3
tpid=`ps -ef|grep $1|grep -v grep|grep -v kill|awk '{print $2}'`
if [ "${tpid}" ]; then
    echo 'Kill Process!'
    kill -9 $tpid
else
    echo 'Stop Success!'
fi