1. 程式人生 > >SpringBoot專案實戰之開源部落格(一)多模組結構搭建

SpringBoot專案實戰之開源部落格(一)多模組結構搭建

用springboot開發專案已經有挺長的一段時間了,不得不說boot是一個很好的應用層框架。之前也寫過一些關係Boot的東西,但是講的比較粗略,程式碼也沒有貼出來。最近我自己想做個開源部落格專案,所有就打算記錄點東西下來,把0到1,1到100的過程展現給大家,如有不足之處懇請指教。

我這裡是用idea作為開發工具,首先,要new一個project出來,jdk選用版本為1.8:


然後在父pom裡面把一些共用的依賴都扔進去:

<?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.lubingshen</groupId>
  <artifactId>lblogs</artifactId>
  <!--父專案的POM檔案一定要指定打包為這個-->
  <packaging>pom</packaging>
  <version>1.0-SNAPSHOT</version>
  <modules>
    <module>lblogs-desk-web</module>
    <module>lblogs-backstage-web</module>
    <module>lblogs-core-all</module>
    <module>lblogs-article-service</module>
    <module>lblogs-manager-service</module>
  </modules>

  <name>lblogs::個人開源部落格</name>
  <url>https://blog.depeatkk.com</url>

  <properties>
    <shiro>1.2.5</shiro>
    <!--tomcat從預設的9降級到8,支援請求url包括中文等特殊字串-->
    <tomcat.version>8.0.29</tomcat.version>
    <java.version>1.8</java.version>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
    <maven.compiler.encoding>UTF-8</maven.compiler.encoding>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  </properties>

  <!-- Spring Boot 啟動父依賴 -->
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.1.RELEASE</version>
  </parent>

  <dependencies>

    <!-- 自動生成GET SET等方法 -->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <scope>provided</scope>
    </dependency>

    <!-- Spring Boot 啟動 依賴 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <!-- Spring Boot Web 依賴 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Spring Boot Test 依賴 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>

    <!-- Spring Boot Dubbo 依賴 -->
    <dependency>
      <groupId>io.dubbo.springboot</groupId>
      <artifactId>spring-boot-starter-dubbo</artifactId>
      <!-- dubbo的jar包原始碼為修改後的2.5.3版本,@Inherited新增-->
      <version>1.0.0</version>
    </dependency>

    <!-- Spring Data Jpa 依賴 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <!--json生成-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.1.23</version>
    </dependency>

    <!-- 阿里雲共用sdk -->
    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>aliyun-java-sdk-core</artifactId>
      <version>3.3.1</version>
    </dependency>

  </dependencies>

  <!-- 宣告依賴-->
  <dependencyManagement>
    <dependencies>

      <!-- Spring Boot Redis 依賴 -->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-redis</artifactId>
        <version>1.3.2.RELEASE</version>
      </dependency>

      <!-- shiro -->
      <dependency>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-all</artifactId>
        <version>${shiro}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-core</artifactId>
        <version>${shiro}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-web</artifactId>
        <version>${shiro}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-quartz</artifactId>
        <version>${shiro}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-spring</artifactId>
        <version>${shiro}</version>
      </dependency>

      <!-- 阿里雲OSS -->
      <dependency>
        <groupId>com.aliyun.oss</groupId>
        <artifactId>aliyun-sdk-oss</artifactId>
        <version>2.8.2</version>
      </dependency>
      <!-- 阿里雲簡訊平臺api -->
      <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
        <version>1.0.0</version>
      </dependency>

      <!-- 模擬HTTP請求 -->
      <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.2</version>
      </dependency>

      <!--JWT生成token-->
      <dependency>
        <groupId>com.auth0</groupId>
        <artifactId>java-jwt</artifactId>
        <version>2.2.0</version>
      </dependency>

    </dependencies>
  </dependencyManagement>

  <build>
    <finalName>backstage-web</finalName>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
          <!-- spring-boot:run 中文亂碼解決 -->
          <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
          <fork>true</fork>
        </configuration>
      </plugin>
    </plugins>
  </build>


</project>

像dom4j那些用的不多的依賴包完全可以在子pom裡面扔進去,一些都要用到的依賴包放在dependencies裡面直接繼承了,一些比較核心或者容易出版本BUG的東西,就用dependencyManagement宣告一下依賴,指定一下版本號。

tips:因為core包的domain實體類包涉及到jpa(hibernate)的標籤,而其他包又依賴於core包,所以直接在父pom裡面新增jpa的標籤了。這時候要注意,因為boot自動裝配的機制,在web模組這種不需要配置也沒有資料來源配置類的地方,在主類上一定要打上@SpringBootApplication(exclude = {HibernateJpaAutoConfiguration.class,DataSourceAutoConfiguration.class})括號裡面的東西。至於spring boot web的依賴包,在父pom裡面可加可不加,我這裡service模組是用到了druid的監控功能,所以乾脆把web依賴加到每一個包裡面了。

下面就是新建modules了,拆模組這東西在專案開發中應該是方案設計時就要確定下來的東西。我這裡初步拆五個模組出來:部落格前臺系統web部分、部落格後臺系統web部分、部落格博文系統service部分、部落格登入許可權系統service部分、共用依賴包core模組。

新建模組在idea裡面操作很簡單,比如:


然後完成後應該是這樣子:


然後子pom的配置檔案如下:

web模組示例(打包方式為jar包,可以選擇指令碼啟動):

<?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">
    <parent>
        <artifactId>lblogs</artifactId>
        <groupId>com.lubingshen</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>lblogs-backstage-web</artifactId>
    <packaging>jar</packaging>

    <name>lblogs::後臺客戶端部分</name>

    <dependencies>

        <!-- Spring Boot Redis 依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-redis</artifactId>
        </dependency>

        <!-- shiro -->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-all</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-quartz</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring</artifactId>
        </dependency>

        <!-- core包依賴,記得先install -->
        <dependency>
            <groupId>com.lubingshen</groupId>
            <artifactId>lblogs-core-all</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

    </dependencies>

    <build>
        <finalName>backstage-web</finalName>
    </build>

</project>

service模組示例:

<?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">
    <parent>
        <artifactId>lblogs</artifactId>
        <groupId>com.lubingshen</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>lblogs-article-service</artifactId>

    <name>lblogs::部落格服務端部分</name>

    <dependencies>

        <!-- core包依賴,記得先install -->
        <dependency>
            <groupId>com.lubingshen</groupId>
            <artifactId>lblogs-core-all</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

    </dependencies>

    <build>
        <finalName>article-service</finalName>
    </build>

</project>

core包示例:

<?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">
    <parent>
        <artifactId>lblogs</artifactId>
        <groupId>com.lubingshen</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>lblogs-core-all</artifactId>
    <packaging>jar</packaging>

    <name>lblogs::共用部分</name>

    <build>
        <finalName>core-all</finalName>
    </build>

</project>

然後在idea的右上角就可以看見這樣子的一個管理目錄了:


至此,多模組的搭建告一段落了,接下來有空我會實時更新開源部落格的程式碼和記錄進度,支援的博友們請右上角大拇指走一波~