此文设计内容:

一个project包含多个module
可以访问的url
mybatis
数据库连接池druid的使用
配置生产和测试环境的配置

背景

最近接触了一个新项目,已经接触了好几个月,但是一直忙于写代码,没有仔细分析过项目结构,今天开始分析下,包括搭建类似的项目,介绍应用到的一些新的技术点。

创建项目主要参考的博客是:

-- 创建可以包含多个module的maven项目
-- 一个maven项目包含多个springboot项目
-- springboot + 多个maven项目

主要记录下创建过程中遇到的一些问题

1 编译错误,提示:Error:java: 错误: 不支持发行版本 5

1)在Intellij中点击“File” -->“Project Structure”,看一下“Project”和“Module”栏目中Java版本是否与本地一致;注意这里点击不同的module分别查看和确认。

2)点击“Settings”-->“Bulid, Execution,Deployment”-->“Java Compiler”,Target bytecode version设为本地Java版本。
参考: 既可解决,主要是编译 和 执行的jdk版本存在一些问题,

2 执行mvn clean package ,报错如下:
 (repackage) on project beta-dao: Unable to find main clas

但是beta-dao模块原本就是作为工具模块,不需要启动,后来发现:
 parent 项目添加 spring-boot-maven-plugin 构建插件,而应该给终端项目使用,因为这个插件的 repackage 目标会处理 jar 包,导致依赖它的模块无法使用它
解决:移除父project中的spring-boot-maven-plugin依赖即可
参考:

3 maven项目添加springboot依赖后仍然找不到对像
Error:(3, 32) java: 程序包org.springframework.boot不存在
 -- maven reimport

4 父子项目依赖理解
现在有父项目beta,里面有module:beta-web beta-biz beta-common beta-dao 
依赖关系是beta-web依赖于beta-biz beta-common和beta-dao,biz依赖beta-common、beta-dao

这里的依赖怎么理解?beta-web依赖于beta-biz,那么web的pom中就有如下配置:
   

<dependency>
             <groupId>com.mz</groupId>
             <artifactId>beta-biz</artifactId>
             <version>0.0.1-SNAPSHOT</version>
             <scope>compile</scope>
         </dependency>


那么此时 
现在有父项目beta,里面有module:beta-web就会依赖beta-biz和其包含的所有依赖,如beta-common    

5 springboot项目启动后自动停止了,并不能访问服务接口

最后提示为:Process finished with exit code 0 springboot

可能是引入的jar包不对,错误引入:

<dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-web</artifactId>
             <version>5.2.9.RELEASE</version>
         </dependency>

正确引入:

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

6 配置mybatis
需要引入 pom,

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>
application.properties中增加如下内容:
 spring.datasource.driverClassName = com.mysql.jdbc.Driver
 spring.datasource.url = jdbc:mysql://rm-ds.mysql.zhangbei.rds.aliyuncs.com/xescoding_test
 spring.datasource.username = ads
 spring.datasource.password = aaa
 mybatis.mapper-locations = classpath:mybatis/*.xml
 mybatis.type-aliases-package = com.mz.beta.dao.entity

7 配置druid数据库连接池

<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>druid</artifactId>
             <version>1.1.9</version>
         </dependency>


此时如果 <version>1.1.9</version>红色 找不到包,执行项目 reimport即可
在配置applicaiton.yml

8 配置多个环境 dev test等

resource中写入多个文件 

application.yml 内容如下:
 spring:
   profiles:
     active: dev # maven profile configuration
 #      active: @spring.profiles.active.value@ # maven profile configuration  application:
     name: web
   http:
     encoding:
       charset: UTF-8
       enabled: true
       force: true
     session:
       redis:
         namespace: codingcloud:session
   datasource:
     druid:
       url: jdbc:mysql://rm-8vb75855c40jn36lx6o.mysql.zhangbei.rds.aliyuncs.com/xescoding_test?${datasource.mysql.parameters}
       username: codingcloud
       password: 9y9egrgwt3R8V8Yx
       async-init: true
       initial-size: 200
       min-idle: 100
       max-active: 1000
       max-wait: 60000
 #      stat-view-servlet:
 #        login-username: codemonkey
 #        login-password: hTSZT8n9XKLg
       time-between-eviction-runs-millis: 60000
       min-evictable-idle-time-millis: 30000
       test-while-idle: true
       pool-prepared-statements: true
       filters: stat,wall,log4j2
       connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=3000
       use-global-data-source-stat: true
       aop-patterns: com.tal.coding.platform.controller.*,com.tal.coding.platform.service.*,com.tal.coding.platform.mapper.*
       web-stat-filter:
         enabled: true
         url-pattern: /*
         exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
       stat-view-servlet:
         enabled: true
         reset-enable: false
         url-pattern: /druid/*  servlet:
     multipart:
       enabled: true
       max-file-size: 1000MB
       max-request-size: 1000MBserver:
   servlet:
     context-path: /api/core
   undertow:


    # 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理

# 每块buffer的空间大小,越小的空间被利用越充分
     buffer-size: 1024
     # 是否分配的直接内存
     direct-buffers: trueapplication-dev.yml
 和
 application-test.yml 实例如下:
 spring:
   datasource:
     druid:
       url: jdbc:mysql://rm-8vb75855c40jn36lx6o.mysql.zhangbei.rds.aliyuncs.com/xescoding_test?${datasource.mysql.parameters}
       username: codingcloud
       password: 9y9egrgwt3R8V8Yx
       async-init: true
       initial-size: 200
       min-idle: 100
       max-active: 1000
       max-wait: 60000
       stat-view-servlet:
         login-username: codemonkey
         login-password: hTSZT8n9XKLgpom增加修改
     <profiles>
         <profile>
             <id>dev</id>
             <properties>
                 <!-- 环境标识,需要与配置文件的名称相对应 -->
                 <activatedProperties>dev</activatedProperties>
             </properties>
         </profile>
         <profile>
             <id>test</id>
             <properties>
                 <activatedProperties>test</activatedProperties>
             </properties>
             <activation>
                 <!-- 默认环境 -->
                 <activeByDefault>true</activeByDefault>
             </activation>
         </profile>
         <profile>
             <id>prod</id>
             <properties>
                 <activatedProperties>prod</activatedProperties>
             </properties>
         </profile>
     </profiles>