1、参考https://www.cnblogs.com/yrjns/p/11254870.html 搭建好父子模块。
2、在父pom中添加对springboot的依赖,
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
</parent>
这时并不能把springboot的依赖包添加进来,必须在<dependencies> 添加需要依赖的springboot依赖包才能在Maven Dependencies 看到依赖的jar。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
可以根据需要添加spring-boot-starter-parent依赖的其他jar包。
通过继承spring-boot-starter-parent,默认具备了如下功能:
.Java版本(Java8)
.源码的文件编码方式(UTF-8)
.依赖管理
.打包支持
.动态识别资源
.识别插件配置
.识别不同的配置,如:application-dev.properties 和 application-dev.yml
3、完成上面这些就可以建立启动类,启动了。
@SpringBootApplication
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}
这时父子工程的pom文件 可以执行 maven clean 和maven install maven update等。
4、添加对mybaties 的支持,
在<dependencies> 添加
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
<version>1.3.1</version>
</dependency>
MyBatis-Spring-Boot-Starter依赖将会提供如下功能:
自动检测现有的DataSource
将创建并注册SqlSessionFactory的实例,该实例使用SqlSessionFactoryBean将该DataSource作为输入进行传递
将创建并注册从SqlSessionFactory中获取的SqlSessionTemplate的实例。
自动扫描您的mappers,将它们链接到SqlSessionTemplate并将其注册到Spring上下文,以便将它们注入到您的bean中。
使用了该Starter之后,只需要定义一个DataSource即可(application.properties或application.yml中可配置),它会自动创建使用该DataSource的SqlSessionFactoryBean以及SqlSessionTemplate。会自动扫描你的Mappers,连接到SqlSessionTemplate,并注册到Spring上下文中。
mybatis的配置项:mybatis.mapperLocations=
结论是:如果Mapper.xml与Mapper.class在同一个包下且同名,spring扫描Mapper.class的同时会自动扫描同名的Mapper.xml并装配到Mapper.class。
如果Mapper.xml与Mapper.class不在同一个包下或者不同名,就必须使用配置mapperLocations指定mapper.xml的位置。
此时spring是通过识别mapper.xml中的 <mapper namespace="com.fan.mapper.UserDao"> namespace的值来确定对应的Mapper.class的。
5、添加数据库连接池和数据库驱动
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- jdbc6 驱动的依赖(需指定版本) -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
Druid是什么?
Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。
Druid 具体配置操作
阿里 Druid为SpringBoot 提供专门的start依赖,Mybatis 使用 Druid 相对比较简单,我们只需要引入 Druid 的starter 依赖并添加相关的一些配置即可。
详情可参考:
https://blog.csdn.net/ljk126wy/article/details/87895658
然后在application.properties中进行JDBA配置:
spring.datasource.type: com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/learn?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#初始化时建立物理连接的个数
spring.datasource.druid.initial-size=3
#最小连接池数量
spring.datasource.druid.min-idle=3
#最大连接池数量
spring.datasource.druid.max-active=10
#获取连接时最大等待时间
spring.datasource.druid.max-wait=60000
#配置监控页面访问登录名称
spring.datasource.druid.stat-view-servlet.login-username=admin
#配置监控页面访问密码
spring.datasource.druid.stat-view-servlet.login-password=admin
#是否开启慢sql查询监控
spring.datasource.druid.filter.stat.log-slow-sql=true
#慢SQL执行时间
spring.datasource.druid.filter.stat.slow-sql-millis=1s
6、添加打包依赖的插件和插件配置
在父pom中添加插件声明<pluginManagement>,它和<dependencyManagement>的作用一样,只是对插件或依赖包做声明和指定版本号,并不真正的引入,真正的引入需要在子pom中配置<plugins> 和</dependencies>,只是省去了版本号的指定。这是为了防止版本一致和防止不同子工程引入版本不一致导致冲突。
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven
defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
</plugin>
<!-- <plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
</plugin> -->
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- 编译打包 -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<!--这部分可有可无,加上的话则直接生成可运行jar包 -->
<archive>
<manifest>
<mainClass>${exec.mainClass}</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
在子pom中添加插件依赖和打包配置
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.nana.SpringbootApplication</mainClass>
</manifest>
<manifestEntries>
<!--MANIFEST.MF 中 Class-Path 加入资源文件目录 -->
<Class-Path>./config/</Class-Path>
</manifestEntries>
</archive>
<excludes>
<exclude>config/**</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<!-- 该插件的作用是用于复制指定的文件 -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution> <!-- 复制配置文件 -->
<id>copy-resources</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>src/main/resources/config</directory>
<includes>
<!-- <include>*.properties</include> -->
</includes>
</resource>
</resources>
<outputDirectory>${project.build.directory}/config</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
7、配置子工程A对B的依赖
只需要在A工程的pom文件里把对B的 依赖加上,就已工程依赖的方式依赖了B工程,可以在A的Maven Dependencies 看到B工程,注意不要以静态jar包的方式引人,maven默认是工程方式引入,这样修改了B工程不用打包,A工程立即即可感知到。
<dependency>
<groupId>com.wangna.mvntest</groupId>
<artifactId>my-jdbc</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
8、启动类配置
@SpringBootApplication
//@MapperScan(basePackages = {" com.my.main.project.jdbc"," com.my.main.project.entity"})//将项目中对应的mapper类的路径加进来就可以了
@ComponentScan(basePackages = {"com.my.main.project"})
@MapperScan("com.my.main.project.jdbc.mapper")
public class App
{
public static void main( String[] args )
{
ConfigurableApplicationContext context = SpringApplication.run(App.class, args);
System.out.println( "Hello World!" );
}
}
执行 SpringApplication.run(App.class,args);的时候其实执行的是App类上的三个注解,和main函数里的其代码没有任何关系,是扫描主类目录和配置的目录下的含有spring注解 @Compent等的类。并注册到spring上下文环境中,并扫描starter 自动配置类,拉起spring上下文环境。
所以如果在同一目录下写了两个启动类,只要上面的注解一样,启动那一个都是一样的,唯一不同的是main函数里的执行代码不一样。