1、背景
这几天在看面试题,看到了有关SpringBoot的相关知识点,其中有一个问题是:“SpringBoot有哪几种启动方式?”。一下子懵逼了,脑子里面只记得在本地启动的时候是在Main方法中直接启动的(因为我们的测试环境是自动安装部署的,生产环境是运维负责安装部署的)。
2.启动方式
有三种启动方式:
1)Main方法启动:这种方式一般在本地测试的时候用的比较多点
2)java -jar的方式:在Linux环境下,一般是使用这种方式启动的
3)通过spring-boot-plugin方式
3.详细的启动步骤
1)Main方式启动
一般SpringBoot项目都会定义一个项目的启动入口,比如我们的项目入口都是这样定义的(如下代码),直接右键启动就可以了。
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
@MapperScan(value = "com.xxx", annotationClass = Mapper.class)
@EnableRedisHttpSession
@EnableCaching
@EnableScheduling
@EnableAsync
public class MainApplication {
private static final Logger logger = LoggerFactory.getLogger(FreeMarkerConfig.class);
public static void main(String[] args) {
logger.info("##########启动start##########");
SpringApplication.run(MainApplication.class, args);
logger.info("##########启动end############");
}
}
2)java -jar 方式启动
java -jar jar_path --param
jar_path: 指代将项目打包为jar打包之后的存储路径
--param: 为需要在命令行指定的参数。例如:
java -jar manager-demo.jar --server.port=8888
该命令通过在启动行指定了项目启动后绑定的端口号,因为该命令行参数,将会覆盖application.properties或者yml文件中的端口配置。
实际Linux环境中的启动脚本:
a:先找到与jar名称相关的进程,然后杀死之前的进程
b:启动jar包,后面可设置参数,如:端口,启动文件等(这个jar文件是通过jenkins产生的)
ps -ef | grep jar包名称 | grep -v grep | cut -c 9-15 | xargs kill -9
nohup java -jar -Xms700m -Xmx700m -Xmn256m /var/lib/jenkins/workspace/pay_portal/target/jar包名称.jar --server.port=7009 --spring.profiles.active=96 &
3)通过spring-boot-plugin方式启动
这种方式需要在pom文件中添加如下的配置:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.MainApplication</mainClass> #启动类入口
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
配置文件添加完成后,进入到项目的根目录,然后使用如下命令(在本地以这种方式启动感觉比较少):
mvn spring-boot:run -Drun.arguments="--server.port:8888"