零:目标

      打算建立一个简单的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:网络

      如果启动后没有报错,却不能访问,大概率是网络的原因。下面是我参照的一个帖子。

      centos安装iptables步骤

      设置成功后,应该一切就都能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文件,里面已经是最完全版的内容了。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐