idea创建springboot聚合项目

renyonggang 38 0

1. 创建parent(父)项目,File --> New -->Project,如下图:

idea创建springboot聚合项目 -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第2张

点击Project出现如下界面:

idea创建springboot聚合项目 -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第3张

点击Next之后,如下图:

idea创建springboot聚合项目 -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第4张

注:由于springboot是外网,可能打不开,需要通过代理才能打开。代理推荐使用ssr-win 4.7.0-fix (下载地址:https://www.myitmx.com/30.html),下载好之后解压,如下图设置:

idea创建springboot聚合项目 -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第5张idea创建springboot聚合项目 -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第6张

idea创建springboot聚合项目 -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第7张idea创建springboot聚合项目 -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第8张

点击Next之后,如下图:

idea创建springboot聚合项目 -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第9张

点击Next之后,如下图:

idea创建springboot聚合项目 -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第10张

点击Finish之后父项目也就创建成功了,删除多余的目录,如下图:

idea创建springboot聚合项目 -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第11张

2.创建子项目(web层)

点击 Project Structure,如下图:

idea创建springboot聚合项目 -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第12张

点击+号,如下图:

idea创建springboot聚合项目 -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第13张

选择New Module之后出现的界面和成交父项目的页面是一样的,如下图:

idea创建springboot聚合项目 -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第14张

idea创建springboot聚合项目 -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第15张

idea创建springboot聚合项目 -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第16张

idea创建springboot聚合项目 -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第17张

创建好之后,一样删除多余的目录,其中复制过去的部分是外置tomcat启动需要的,如下图:

idea创建springboot聚合项目 -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第18张

创建core(包含 service、mapper、model等)和 common(工具类)方法和 web的一样,这里就不一 一讲,最终项目结构如下图:

idea创建springboot聚合项目 -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第19张idea创建springboot聚合项目 -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第20张

idea创建springboot聚合项目 -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第21张idea创建springboot聚合项目 -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第22张

3.配置pom文件

配置父目录(test)的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 https://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.0.RELEASE</version>
    </parent>

    <groupId>com.example</groupId>
    <artifactId>test</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging> <!--这里必须是pom,否则在子项目引入子项的时候jar无法引入-->
    <name>test</name>

    <!--配置子项目-->
    <modules>
        <module>web</module>
        <module>core</module>
        <module>common</module>
    </modules>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </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 https://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>web</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>web</name>

    <!--配置父项目及版本,引入父级,父级的pom中引入的jar、properties配置等,子级可以继承不需要进行再配置-->
    <parent>
        <groupId>com.example</groupId>
        <artifactId>test</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <dependencies>

        <!--引入公共的部分(service、common)的jar-->
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>core</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>com.example</groupId>
            <artifactId>common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>

    </dependencies>

</project>

配置core的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 https://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>core</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>core</name>

    <!--配置父项目及版本,引入父级,父级的pom中引入的jar、properties配置等,子级可以继承不需要进行再配置-->
    <parent>
        <groupId>com.example</groupId>
        <artifactId>test</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <dependencies>

        <!--引入公共的部分(service、common)的jar-->
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.1</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

    </dependencies>

</project>

配置common的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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>common</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>common</name>

    <!--配置父项目及版本,引入父级,父级的pom中引入的jar、properties配置等,子级可以继承不需要进行再配置-->
    <parent>
        <groupId>com.example</groupId>
        <artifactId>test</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <dependencies>

        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>

    </dependencies>

</project>

4. 配置application.properties文件

web下的application.properties

server.port=8080

#这里使用的是每个子项目使用自己的 application.properties 配置
#也可以使用只使用web下 application.properties 所有的配置都写在这
#引入每个每个子项目的 application.properties 配置
# 子项目命名 application-名称.properties 引入的时候只写杠后面的名称就可以了,多个逗号隔开
# include和active都是引入properties文件
# include的作用是可以叠加激活新的profile , 而active 包含的profile 有可能会被优先级高的定义覆盖
spring.profiles.active=core,common
#spring.profiles.include=

core下的application-core.properties

spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8
spring.datasource.username=mysql
spring.datasource.password=root

mybatis.mapperLocations=classpath:mybatis/**/*.xml
mybatis.typeAliasesPackage=com.example.core.model

#打印sql日志 logging.level 后面为mapper的路径
logging.level.com.example.core.mapper=debug

common下的application-common.properties 根据需求配置,这里就不配置了

5.测试

在common下创建工具类

StringUtil.java

package com.example.common;

import org.apache.commons.lang.StringUtils;

public class StringUtil {

    public static boolean isNotEmpty(Object obj) {

        return (null != obj && StringUtils.isNotBlank(String.valueOf(obj)));
    }

    public static boolean isEmpty(Object obj) {

        return (null == obj || StringUtils.isBlank(String.valueOf(obj)));
    }

}

在core下创建mode、mapper、mapper.xml、service

TestModel.java

package com.example.core.model;

public class TestModel {

    private Integer id;

    private String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

TestMapper.java

package com.example.core.mapper;

import com.example.core.model.TestModel;
import org.springframework.stereotype.Component;

@Component
public interface TestMapper {

    public TestModel get(Integer id);

}

test.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.core.mapper.TestMapper">

    <select id="get" parameterType="Integer" resultType="testModel">
        select
              ID,
              NAME
        from test
        where ID = #{id}
    </select>

</mapper>

TestService.java

package com.example.core.service;

import com.example.core.model.TestModel;

public interface TestService {

    public TestModel get(Integer id);

}

TestServiceImpl.java 

package com.example.core.service.impl;

import com.example.core.mapper.TestMapper;
import com.example.core.model.TestModel;
import com.example.core.service.TestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class TestServiceImpl implements TestService {

    @Autowired
    private TestMapper testMapper;

    @Override
    public TestModel get(Integer id) {
        return testMapper.get(id);
    }
}

在web下创建控制层类

TestController.java

package com.example.web.controller;

import com.example.common.StringUtil;
import com.example.core.model.TestModel;
import com.example.core.service.TestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("test")
public class TestController {

    //在idea中 注解这个service下面会有红线,也就意味没有找到这个bean,
    //那是因为在自动扫描的时候只扫自己同级目录下的
    //而这个引入的是其它子项目的接口,所以需要在WebApplication.java启动类中增加ComponentScan注解
    @Autowired
    private TestService testService;

    @ResponseBody
    @RequestMapping("show")
    public  String ShowAll() {

        TestModel testModel = testService.get(1);

        if(null != testModel && StringUtil.isNotEmpty(testModel.getName())){
            return testModel.getName();
        }

        return "没有查询到结果";
    }

}

配置springboot的启动类 WebApplication.java

package com.example.web;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
//ComponentScan注解配置自动扫描的路径,
//这里偷懒扫描com下所有的,也可以具体到目录,多个用逗号分隔
@ComponentScan({"com"})
//配置mapper类所在的目录
//不配置的话在启动的时候创建mapper的失败无法注入到service
@MapperScan("com.example.core.mapper")
public class WebApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(WebApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(WebApplication.class, args);
    }

}

6. 启动项目

可以使用springboot自带的启动方式

也可以使用外置tomcat启动,但需要一些配置,本文中已经配置好

web下的pom.xml需要引入

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-tomcat</artifactId>
   <scope>provided</scope>
</dependency>

WebApplication.java 启动类,如下图:

idea创建springboot聚合项目 -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第23张

idea创建springboot聚合项目 -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第24张

idea创建springboot聚合项目 -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第25张

注:springboot2.2使用tomcat启动的会报错误,这好像mybaits兼容问题:

idea创建springboot聚合项目 -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第26张

解决这个问题

降低springboot版本到 2.1.5,降低mybaits版本到 2.0.1

idea创建springboot聚合项目 -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第27张idea创建springboot聚合项目 -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第28张

或者 在core下增加 spring.properties 配置,如下图:

idea创建springboot聚合项目 -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第29张

注:在springboot 2.2使用tomcat 8.0启动的会报版本兼容的问题,但不影响启动。但还是建议使用tomcat 8.5以上的版本。错误消息如下图:

idea创建springboot聚合项目 -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第30张

启动成功后打开浏览器,输入地址查看结果

idea创建springboot聚合项目 -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第31张

打赏 支付宝打赏 微信打赏

发表评论 (已有0条评论)

还木有评论哦,快来抢沙发吧~

请先 登录 再评论,若不是会员请先 注册