美文网首页
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