欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

前后端分离之Springboot

程序员文章站 2024-01-25 21:54:16
...

springboot后台搭建

本次搭建使用多模块的方式,建立一个父项目netseal,父项目下建立webserver、common、appserver等项目。

  • 父项目——netseal,maven项目即可
    • 子项目——webserver,springboot项目
    • 子项目——common,springboot项目

idea进行项目的创建可参考使用idea搭建springboot项目

1. 创建父项目

1.1 创建netseal

前后端分离之Springboot
填写group和artifact。
前后端分离之Springboot

2. 创建子项目

2.1 创建webserver

填写group和artifact。
前后端分离之Springboot
初始化选择spring web即可。模块分离后,web端只需要spring web,数据库相关的由其他模块引入。
前后端分离之Springboot

2.2 创建common

前后端分离之Springboot
初始化选择spring web、jdbc、mysql等。此次项目是模块化的测试,故继续沿用jdbc,暂未整合mybatis。
前后端分离之Springboot

3.正式编码

3.1 修改pom文件

3.1.1 netseal的pom.xml

  • 重点1:打包方式为pom
  • 重点2:引入子模块
<?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 http://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.2.6.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>cn.com.infosec</groupId>
	<artifactId>netseal</artifactId>
	<version>1.0-SNAPSHOT</version>
	<!--重点1:打包方式为pom-->
	<packaging>pom</packaging>

	<!--重点2:引入子模块-->
	<modules>
		<module>webserver</module>
		<module>common</module>
	</modules>
	<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-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
	</dependencies>

</project>

3.1.2 webserver的pom.xml

  • 重点1:填写父项目的基本信息
  • 重点2:打包方式为jar
  • 重点3:依赖common
  • 重点4:打包配置
  • 重点5:关掉单元测试
<?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>
	<!--重点1:填写父项目的基本信息-->
	<parent>
		<groupId>cn.com.infosec</groupId>
		<artifactId>netseal</artifactId>
		<version>1.0-SNAPSHOT</version>
		<relativePath>../pom.xml</relativePath>
	</parent>
	<groupId>cn.com.infosec.netseal</groupId>
	<artifactId>webserver</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>webserver</name>
	<!--重点2:打包方式为jar-->
	<packaging>jar</packaging>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<!--内部引用-->
		<!--重点3:依赖common-->
		<dependency>
			<groupId>cn.com.infosec.netseal</groupId>
			<artifactId>common</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</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>
	</dependencies>

	<build>
		<plugins>
			<!--重点4:打包,使用maven的插件进行打包时:可指定主类的类路径、并把依赖的包打进jar-->
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<!--指定主类-->
					<mainClass>cn.com.infosec.netseal.webserver.WebserverApplication</mainClass>
				</configuration>
				<executions>
					<execution>
						<goals>
							<!--可以把依赖的包都打包到生成的Jar包中-->
							<goal>repackage</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
			<!--重点5:关掉单元测试,否则项目无法正常启动-->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<version>2.18.1</version>
				<configuration>
					<skipTests>true</skipTests>    <!--默认关掉单元测试 -->
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>

3.1.3 common的pom.xml

  • 重点1:填写父项目的基本信息
  • 重点2:打包方式为jar
<?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>
	<!--重点1:填写父项目的基本信息-->
	<parent>
		<groupId>cn.com.infosec</groupId>
		<artifactId>netseal</artifactId>
		<version>1.0-SNAPSHOT</version>
		<relativePath>../pom.xml</relativePath>
	</parent>
	<groupId>cn.com.infosec.netseal</groupId>
	<artifactId>common</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>common</name>
	<!--重点2:打包方式为jar-->
	<packaging>jar</packaging>
	<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-jdbc</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</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>
	</dependencies>

</project>

3.2 填充子项目

webserver和common进行建包、添加文件等操作。
webserver:包含controller、service等;
common:包含entity、dao等;

3.2.1 数据源配置

common的application.yml
指定serverTimezone=UTC,不指定可能会报错

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/netseal_4_data?&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&serverTimezone=UTC
    username: root
    password: root

3.2.2 引入本地jar

不可避免的,在公司开发项目,会使用到公司自己的jar,所以此时就不能从仓库中获取。
方法:在项目下建立lib资源目录,存放自己的jar。
pom.xml
添加完依赖,可以在项目上选择Maven——Reimport。

<!--本地jar-->
<dependency>
	<groupId>org.apache.commons</groupId>
	<artifactId>configuration2</artifactId>
	<version>2.1</version>
	<scope>system</scope>
	<systemPath>${project.basedir}/lib/commons-configuration2-2.1.jar</systemPath>
</dependency>

4. Q&A

4.1 Test failures

  • Q:
    Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test (default-test) on project webserver: There are test failures.
  • A:
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-surefire-plugin</artifactId>
	<version>2.18.1</version>
	<configuration>
		<skipTests>true</skipTests>    <!--默认关掉单元测试 -->
	</configuration>
</plugin>

4.2 启动项目无法注入common的dao

  • Q:
    启动webserver的WebserverApplication方法,会发现common的dao无法被自动注入,报错如下:
Field sysUserDao in cn.com.infosec.netseal.webserver.service.sysUser.SysUserServiceImpl required a bean of type 'cn.com.infosec.netseal.common.dao.sysUser.SysUserDaoImpl' that could not be found.
  • A:
    解决办法:
    在WebserverApplication上使用@ComponentScan(“cn.com.infosec.netseal”)
package cn.com.infosec.netseal.webserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan("cn.com.infosec.netseal")
public class WebserverApplication {

	public static void main(String[] args) {
		SpringApplication.run(WebserverApplication.class, args);
	}

}

5. 打包及运行

因为主类在webserver,所以打包写在了webserver下的pom.xml,但是操作是点击父项目的package!!!成功会看到控制台输出build success,jar包生成在了webserver下的target目录。
webserver启动:
前后端分离之Springboot

父项目打包:
前后端分离之Springboot
前后端分离之Springboot
前后端分离之Springboot
将webserver-0.0.1-SNAPSHOT.jar复制到其他磁盘下,打开命令窗口,进入该路径,执行
java -jar xxx.jar即可运行。

java -jar xxx.jar

示例:
前后端分离之Springboot