美文网首页
Springboot多模块构建

Springboot多模块构建

作者: ythmilk | 来源:发表于2018-07-06 15:24 被阅读215次

一、新建项目

新建项目,删除src目录,然后新建模块。
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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!--标识项目,自动生成,不用管-->
    <groupId>com.yth</groupId>
    <artifactId>springboot-multi</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <name>springboot-multi</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <!--引入module-->
    <modules>
        <module>dao</module>
        <module>web</module>
        <module>entity</module>
        <module>service</module>
    </modules>

    <!--依赖统一管理,子模块引入依赖时不用添加版本号-->
    <dependencyManagement>

        <dependencies>
            <dependency>
                <groupId>com.yth</groupId>
                <artifactId>web</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
            <dependency>
                <groupId>com.yth</groupId>
                <artifactId>dao</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
            <dependency>
                <groupId>com.yth</groupId>
                <artifactId>entity</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
            <dependency>
                <groupId>com.yth</groupId>
                <artifactId>service</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>

            <!--redis-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>

            <!--postgresql-->
            <dependency>
                <groupId>postgresql</groupId>
                <artifactId>postgresql</artifactId>
                <version>9.1-901-1.jdbc4</version>
            </dependency>
            <!--mybatis-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.2</version>
            </dependency>

            <dependency>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-core</artifactId>
                <version>1.3.2</version>
            </dependency>

            <!-- alibaba的druid数据库连接池 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>1.1.0</version>
            </dependency>

        </dependencies>
    </dependencyManagement>

    <!--引入依赖,子模块会继承该依赖-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
    </dependencies>

    <!--不需要build-->
</project>

二、dao层,管理数据库访问

使用mybatis-generator自动生成相关文件
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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.yth</groupId>
    <artifactId>dao</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>dao</name>
    <description>Demo project for Spring Boot</description>

    <!--继承父模块-->
    <parent>
        <groupId>com.yth</groupId>
        <artifactId>springboot-multi</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <dependencies>

        <!--postgresql-->
        <dependency>
            <groupId>postgresql</groupId>
            <artifactId>postgresql</artifactId>
        </dependency>
        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
        </dependency>
        <!-- alibaba的druid数据库连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
        </dependency>
        <!--引入entity模块-->
        <dependency>
            <groupId>com.yth</groupId>
            <artifactId>entity</artifactId>
        </dependency>

    </dependencies>

    <!--添加自动生成的插件-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.2</version>
                <configuration>
                    <verbose>true</verbose>
                    <overwrite>true</overwrite>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

配置文件application-dao.yml必须以application-开头命名

#公共配置与profiles选择无关 mapperLocations指的路径是src/main/resources
mybatis:
  typeAliasesPackage: com.yth.entity
  mapperLocations: classpath:mapper/*.xml
  configuration:
          map-underscore-to-camel-case: true #启用驼峰映射

#开发配置
spring:
  profiles: dev
  datasource:
    #这是postgresql的,mysql对应改一改
    url: jdbc:postgresql://127.0.0.1:5432/test03
    username: postgres
    password: *****  
    driver-class-name:  org.postgresql.Driver

    # 使用druid数据源
    type: com.alibaba.druid.pool.DruidDataSource
    #默认为stat,即开启sql监控。这里加了个wall,表示同时开启sql防火墙
    druid:
      filters: stat,wall
    #spring监控,hello.controller是我的控制层包名,也可以是服务层,用逗号分隔多个监控内容
      aop-patterns: com.yth.web.*
    #监控页面登录用户名
      StatViewServlet.loginUsername: admin
    #监控页面登录密码
      StatViewServlet.loginPassword: 123

自动生成的配置文件generatorConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<!-- 第二种mybatis逆向生成xml配置 -->
<generatorConfiguration>
    <!-- 需要指明数据库连接器的绝对路径 -->
    <classPathEntry
            location="D:\m2\repository\postgresql\postgresql\9.1-901-1.jdbc4\postgresql-9.1-901-1.jdbc4.jar" />
    <context id="sqlserverTables" targetRuntime="MyBatis3">
        <!-- 生成的pojo,将implements Serializable-->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>
        <commentGenerator>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true" />
        </commentGenerator>

        <!-- 数据库链接URL、用户名、密码 -->
        <jdbcConnection driverClass="org.postgresql.Driver"
                        connectionURL="jdbc:postgresql://127.0.0.1:5432/test03"
                        userId="postgres"
                        password="****">
        </jdbcConnection>

        <!--
        默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer
            true,把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal
        -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!--
        生成model模型,对应的包路径,以及文件存放路径(targetProject),targetProject可以指定具体的路径,如./src/main/java-->
        <javaModelGenerator targetPackage="com.yth.entity"
                            targetProject="D:\workspace\springboot\springboot-multi\entity\src\main\java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <!--对应的mapper.xml文件  -->
        <sqlMapGenerator targetPackage="mapper" targetProject="./src/main/resources">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!-- 生成mapper接口文件位置 -->
        <javaClientGenerator targetPackage="com.yth.dao"
                             targetProject="./src/main/java" type="XMLMAPPER">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>

        <!-- 列出要生成代码的所有表,这里配置的是不生成Example文件 -->
        <table tableName="user_in" domainObjectName="UserIn"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
        </table>

        <table tableName="user_info" domainObjectName="UserInfo"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
        </table>

    </context>
</generatorConfiguration>

接下来点击如下图,即可自动生成相关文件。


mybatis自动生成.PNG

mybatis的自动化配置和自动化创建, 没有支持到多模块中,因次需要使用java的配置方式配置。

@Configuration
public class MybatisConfig {
    @Value("${mybatis.mapperLocations}")
    private String mapperLocationPattern;

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource(){return new com.alibaba.druid.pool.DruidDataSource();
    }

    @Bean(name="sqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory() throws  Exception{
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource());
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        sqlSessionFactoryBean.setMapperLocations(resolver.getResources(mapperLocationPattern));
        return sqlSessionFactoryBean.getObject();
    }
}

@Configuration
@AutoConfigureAfter(MybatisConfig.class)
@MapperScan("com.yth.dao")
public class MybatisMapperScannerConfig {
    public MapperScannerConfigurer mapperScannerConfigurer() {
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
        mapperScannerConfigurer.setBasePackage("com.yth.dao");
        return mapperScannerConfigurer;
    }
}

然后就OK啦。Mapper接口和Mapper.xml和实体类都是自动生成。

service模块

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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.yth</groupId>
    <artifactId>service</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>service</name>
    <description>Demo project for Spring Boot</description>
    <parent>
        <groupId>com.yth</groupId>
        <artifactId>springboot-multi</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>com.yth</groupId>
            <artifactId>entity</artifactId>
        </dependency>
        <dependency>
            <groupId>com.yth</groupId>
            <artifactId>dao</artifactId>
        </dependency>
    </dependencies>
</project>

具体的接口和实现就不贴出来了,没啥可注意的。

entity模块

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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.yth</groupId>
    <artifactId>entity</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>entity</name>
    <description>Demo project for Spring Boot</description>
    <parent>
        <groupId>com.yth</groupId>
        <artifactId>springboot-multi</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <dependencies>

    </dependencies>
</project>

web模块,主模块

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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.yth</groupId>
    <artifactId>web</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>web</name>
    <description>Demo project for Spring Boot</description>
    <parent>
        <groupId>com.yth</groupId>
        <artifactId>springboot-multi</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.yth</groupId>
            <artifactId>dao</artifactId>
        </dependency>
        <dependency>
            <groupId>com.yth</groupId>
            <artifactId>entity</artifactId>
        </dependency>
        <dependency>
            <groupId>com.yth</groupId>
            <artifactId>service</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

如果需要打包成jar的话build标签替换一下。然后执行mvc clean package命令就可以打包成功了。
之后运行的话 java -jar web.jar就可以了

<!--spring boot打包的话需要指定一个唯一的入门-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <!-- 指定该Main Class为全局的唯一入口 -->
                    <mainClass>com.yth.web.WebApplication</mainClass>
                    <layout>ZIP</layout>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中-->
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

配置文件application.yml

server:
  port: 8080
  servlet:
    context-path: /yth
spring:
       profiles:
            include: dao  #必须把其他模块的配置文件添加进来哦
            active: dev

启动类

@SpringBootApplication
@ComponentScan(basePackages = {"com.yth"}) //自动扫描
public class WebApplication {
    public static void main(String[] args) {
        SpringApplication.run(WebApplication.class, args);
    }
}

测试Controller

@RestController
public class HelloController {
    @Autowired
    private UserService userService;
@RequestMapping("/hello") //使用@GetMapping不起作用,不知道为啥>.<。
    public String hello(){
        return "hello";
    }

    @RequestMapping("/user/{id}")
    public UserInfo getUserInfoById(@PathVariable("id")int id){
        return userService.getUserById(id);
    }
}

相关文章

网友评论

      本文标题:Springboot多模块构建

      本文链接:https://www.haomeiwen.com/subject/hmzvuftx.html