作为一名专业白嫖党,一直在看黑马在B站的基于SpringCloud微服务框架项目《畅购商城》,但是看的多,动手少,在实际应用中还是遇到了比较多的问题,所以打算从基础来一步一步搭建,慢慢的练习,同时熟悉部分电商的运营模式,将看过的变成自己的。 附上B站黑马畅购商城的连接:https://www.bilibili.com/video/BV1GE411G7Hg?p=26&spm_id_from=pageDriver
框架与部署平台搭建
既然要一步一步的自己完成,那么框架和部署也会从头去搭建一遍,畅购商城的框架还是使用本身的框架,部署也需要自己搭建一个虚拟机,然后搭建平台,目前还没有使用github去完成自动流水线,后续可以考虑。 畅购框架部分如下: 畅购模块如下: 未使用多机部署,使用单台虚拟机合并部署,最初的搭建使用主机起进程的方式,后续畅购练习完成后,可以尝试docker部署和多机多实例部署,添加部署部分,包含前台nginx、mysql docker和install脚本创建用户等。
FAQ
记录此期间遇到的问题,及解决方案 (1)no main manifest attribute, in ./serviceJar/eureka-1.0-SNAPSHOT.jar 目前框架搭建使用的前面几章的方法,是没有添加build的,在需要启动的工程中添加下面的pom build后解决,可以添加到parent工程。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
(2)org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘requestMappingHandlerMapping’ defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping. Cannot map ‘brandController’ method public entity.Result<com.changgou.goods.pojo.Brand> com.changgou.controller.BrandController.find(java.lang.Integer) to {GET /brand/{id}}: There is already ‘brandController’ bean method 这个是由于controller中的接口重复,排查后,重新打包即可。 (3)Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.1.4.RELEASE:repackage (repackage) on project changgou-common: Execution repackage of goal org.springframework.boot:spring-boot-maven-plugin:2.1.4.RELEASE:repackage failed: Unable to find main class
这里引入了spring-boot-maven-plugin,打包时会去扫描项目main方法入口,也就是说引入该配置,你就必须在项目src/main/java/下创建一个spring-boot启动类:
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
解决方案:
- 添加spring-boot启动类。
- 将pom.xml中的spring-boot-maven-plugin相关配置注释掉
- pom.xml中spring-boot-maven-plugin相关配置修改为普通的maven–plugin配置即可。
本人的框架是因为springboot-maven-plugin放到了parent中,造成comon和common-db没有启动类的会报错,移到子模块中即可 (4)SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/C:/Users/Administrator/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.11.2/log4j-slf4j-impl-2.11.2.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/C:/Users/Administrator/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class] 这个时因为默认的时logback,引入slfj2后,无法启动,找到所有使用logback的地方,即使用springboot-loging的依赖的地方,添加下面的排除
<exclusions> <!-- 去除springboot默认的logback配置-->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
|