零:目标
打算建立一个简单的springboot工程,放到自己电脑上的虚拟机中跑起来,然后自己调用测试能否访问。
因为后续很多的例子(比如日志采集、springcloud或消息队列等)都需要这样的一个工程来使用的。
开发工具是Eclipse,Linux系统为CentOS7
一:建SpringBoo工程
1.1:建工程方式
建springboot的样例工程有多重方式。我选用的是使用官方帮助生成样例工程的方式。
访问 https://start.spring.io/ 如下图所示。需要自己确定项目类型(maven或gradle)开发语言。需要引入的dependencies等。全都确定了之后,点击屏幕下方的 generate生成工程包并下载。
下载后,放到自己的工作目录,导入maven工程即可。
然后我建了两个类,并修改了pom文件和一个配置文件。全部代码样例如下。
启动类:TestSpringBootApplication
package com.dark.base;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@ComponentScan(basePackages = {"com.dark.base"})
@SpringBootApplication
public class TestSpringBootApplication {
public static void main(String[] args) {
SpringApplication.run(TestSpringBootApplication.class, args);
}
}
controller:TestController
package com.dark.base.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
/**
* @author :dark
* @title :TestController
* @date :2020年6月24日
*/
@RestController
@RequestMapping("/test")
public class TestController {
/**
* @description :纯属演示
* @param HttpServletRequest
* @param HttpServletResponse
*/
@ResponseBody
@RequestMapping(value = "")
public String cobjectManageSave(HttpServletRequest request, HttpServletResponse response) {
System.out.println("========");
return "abcdefg";
}
}
POM.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.dark.base</groupId>
<artifactId>TestSpringBoot</artifactId>
<!-- 打包后的jar文件的版本后缀 -->
<version>0.0.1-SNAPSHOT</version>
<name>TestSpringBoot</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.10.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.10.0</version>
</dependency>
</dependencies>
<!-- 打包的配置 -->
<build>
<plugins>
<!-- 解决在linux上启动报错“no main manifest attribute”的错误。添加下面这各插件即可 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- maven打包必选项 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<!-- 一定要配置否则打jar的时候会说找不到主类,一定要写启动类的全路径外加启动类的类名-->
<mainClass>com.dark.base.TestSpringBootApplication</mainClass>
<!-- 将依赖的jar包都打入到jar包中,造成jar包会比较大 -->
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<!-- jvm参数 -->
<jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
<!-- java编译版本 -->
<source> 1.8 </source>
<target> 1.8 </target>
<!-- 编码方式 -->
<encoding> UTF-8 </encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
配置文件:application.properties
server.port=8012
理论上来说,现在启动工程,可以用postman或在页面的地址栏访问到了。
如果访问时发生异常。请参照下面的 四:踩坑 的4.1小节
二:maven打包
2.1:pom文件的配置
我们首先需要在pom文件中对打包做对应的设置。具体的写法与说明如下所示
<!-- 打包的配置 -->
<build>
<plugins>
<!-- 解决在linux上启动报错“no main manifest attribute”的错误。添加下面这各插件即可 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- maven打包必选项 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<!-- 一定要配置否则打jar的时候会说找不到主类,一定要写启动类的全路径外加启动类的类名-->
<mainClass>com.dark.base.TestSpringBootApplication</mainClass>
<!-- 将依赖的jar包都打入到jar包中,造成jar包会比较大 -->
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<!-- jvm参数 -->
<jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
<!-- java编译版本 -->
<source> 1.8 </source>
<target> 1.8 </target>
<!-- 编码方式 -->
<encoding> UTF-8 </encoding>
</configuration>
</plugin>
</plugins>
</build>
如下配置maven命令的启动方式
如上所示,配置完毕之后, 选中要部署的项目 右击 —> Run As —> maven clean,再执行 maven build即可打成一个jar包。
打包运行的坑,请参照下面的 四:踩坑 的 4.2小节
三:部署到本地虚拟机
3.1:启动
启动命令如下:
nohup java -jar TestSpringBoot-0.0.1-SNAPSHOT.jar > 1.log 2>&1 &
其中“TestSpringBoot-0.0.1-SNAPSHOT.jar”是我的jar包的名字。1.log是我的测试日志名。大家根据自己情况修改。其他内容都是固定的格式。照抄即可。
一般来说,直接启动肯定会报错。报错信息和解决方式可以参照4.2小节。大家只要保证自己的代码和打包那两步都是正确的即可。
3.2:网络
如果启动后没有报错,却不能访问,大概率是网络的原因。下面是我参照的一个帖子。
设置成功后,应该一切就都能ok了
四:踩坑
4.1:启动工程后不能访问controller
对于本例这样的简单例子而言。如果不能访问,最大可能是因为controller和启动app放在不同的路径下。可以通过修改app类的扫描路径解决。也就是在启动类上面加上如下的注解(上文的代码中也有举例,可以参考)
@ComponentScan(basePackages = {"com.dark.base"})
4.2:打包执行报错
明明已经测试可用的工程,但是打包并将jar放到Linux系统下执行时,总会报“no main manifest attribute”错误。
最初我在pom中是这样配置的,如下所示
<configuration>
<archive>
<manifest>
<mainClass>com.dark.base.TestSpringBootApplication</mainClass>
</manifest>
</archive>
</configuration>
但是依然在启动后报上面的错误。然后我参考别人的写法,修改为如下写法
<configuration>
<!-- 一定要配置否则打jar的时候会说找不到主类,根据具体项目来-->
<mainClass>com.dark.base.TestSpringBootApplication</mainClass>
</configuration>
其实只是改了这里还不够,还需要在<build></build>中添加一个插件
<!-- 解决在linux上启动报错“no main manifest attribute”的错误。添加下面这各插件即可 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
完整版的pom配置,请参照上面第一部分的pom.xml文件,里面已经是最完全版的内容了。