@wangzhuanyun
2020-09-27T03:39:27.000000Z
字数 4484
阅读 809
springboot
(1)不同方面的代码之间相互耦合,这时候一系统出现问题很难定位到问题的出现原因,即使定位到问题也很难修正问题,可能在修正问题的时候引入更多的问题。
(2)多方面的代码集中在一个整体结构中,新入的开发者很难对整体项目有直观的感受,增加了新手介入开发的成本,需要有一个熟悉整个项目的开发者维护整个项目的结构(通常在项目较大且开发时间较长时这是很难做到的)。
(3)开发者对自己或者他人负责的代码边界很模糊,这是复杂项目中最容易遇到的,导致的结果就是开发者很容易修改了他人负责的代码且代码负责人还不知道,责任追踪很麻烦。
将一个复杂项目拆分成多个模块是解决上述问题的一个重要方法,多模块的划分可以降低代码之间的耦合性(从类级别的耦合提升到jar包级别的耦合),每个模块都可以是自解释的(通过模块名或者模块文档),模块还规范了代码边界的划分,开发者很容易通过模块确定自己所负责的内容
dao层依赖model
service层依赖dao、model、utils
web层依赖service、model、utils
controller层依赖service、model
(1)在IDEA工具栏选择File->New->Project
(2)选择Spring Initializr,默认选择Default,然后点击Next:
在输入框填写以下截图内容,点击Next
选择版本,直接点Next,无需选择
这时把没用的.mvn目录,src目录,mvnw还有mvnw.cmd都删除,最终只保留.gitignore和pom.xml,若是web项目,可在该pom.xml里添加以下依赖:
<!--web特征-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
最终项目结构为:
在父模块的根目录上点右键,在弹出的框里选择New->Module
选择Maven,点击Next
填写以下内容,点击Next
填写Module,点击Finish
同理添加boot-controller,boot-dao,boot-service,boot-view子模块
在boot-view中编写启动类与引入application.yml配置文件
@SpringBootApplication(scanBasePackages = {
"com.hz.controller",
"com.hz.service"
})
@MapperScan("com.hz.dao") //扫描DAO 将数据源注入
@EnableTransactionManagement //开启事务
public class bootApplication {
public static void main(String[] args) {
SpringApplication.run(bootApplication.class, args);
}
}
application.yml
server:
port: 80
spring:
datasource:
username: root
password: root
url: jdbc:mysql://127.0.0.1:3308/smbms?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC
driverClassName: com.mysql.jdbc.Driver
resources:
static-locations: classpath:/templates,classpath:/static/
thymeleaf:
suffix: .html
prefix: classpath:/templates/
encoding: utf-8
cache: false #开发状态下不开启
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.hz.pojo
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
在boot-dao中引用boot-common
<dependency>
<groupId>com.hz</groupId>
<artifactId>boot-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
在boot-service中引入boot-dao,boot-common
<dependency>
<groupId>com.hz</groupId>
<artifactId>boot-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.hz</groupId>
<artifactId>boot-dao</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
在boot-controller中引入boot-service,boot-common
<dependency>
<groupId>com.hz</groupId>
<artifactId>boot-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.hz</groupId>
<artifactId>boot-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
在boot-view中引入boot-controller
<dependency>
<groupId>com.hz</groupId>
<artifactId>boot-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
在父级pom.xml中设置编译器与启动类
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--启动类路径-->
<mainClass>com.hz.bootApplication</mainClass>
</configuration>
</plugin>
</plugins>
</build>
注意:
父project的pom文件:不是jar,是pom
子project的pom文件:都是jar
启动项目访问模板下index.html,测试访问成功!!!!
maven执行命令 clean ,compile ,install ,package
spring-boot工程打包编译时,会生成两种jar包,一种是普通的jar,另一种是可执行jar。默认情况下,这两种jar的名称相同,在不做配置的情况下,普通的jar先生成,可执行jar后生成,所以可执行jar会覆盖普通的jar
在pom打包处添加了configuration一项
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--启动类路径-->
<mainClass>com.hz.bootApplication</mainClass>
<classifier>exec</classifier>
</configuration>
</plugin>
</plugins>
</build>