1.idea新建多模塊springBoot項目
父項目使用maven的方式創建
創建完成 刪掉src目錄
新增子模塊使用springBoot initializer插件創建
按以上步驟再建module2 和 main
2.配置項目
因為父項目用的是maven方式 所以自己修改父項目pom文件 增加druid、mybatisPlus等依賴和module標簽 以下是修改后的parent 的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> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.0.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>cn.gch</groupId> <artifactId>druid-parent</artifactId> <version>1.0</version> <packaging>pom</packaging> <name>druid-parent</name> <modules> <module>druid-main</module> <module>druid-module1</module> <module>druid-module2</module> </modules> <properties> <java.version>1.8</java.version> </properties> <dependencies> <!-- mybatis-plus begin --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.1.1</version> </dependency> <!-- mybatis-plus end --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <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>
子模塊繼承父模塊並引入子模塊 這里例出main模塊的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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>cn.gch</groupId> <artifactId>druid-parent</artifactId> <version>1.0</version> </parent> <groupId>com.gch</groupId> <artifactId>druid-main</artifactId> <version>0.0.1-SNAPSHOT</version> <name>druid-main</name> <packaging>jar</packaging> <description>druid-main</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>com.gch</groupId> <artifactId>druid-module1</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>com.gch</groupId> <artifactId>druid-module2</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
3.在main模塊 resource包下創建application.yml
#JDBC基本配置 server: port: 8088 spring: datasource: druid: #數據源1 datasource1: url: jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2b8&allowPublicKeyRetrieval=true username: root password: 123 driverClassName: com.mysql.cj.jdbc.Driver #數據源2 datasource2: #MyISAM和InnoDB是兩種最常用的數據庫引擎,默認的引擎是MyISAM,性能最好,但不支持事務處理,只有InnoDB支持事務 url: jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2b8&allowPublicKeyRetrieval=true username: root password: 123 driverClassName: com.mysql.cj.jdbc.Driver #連接池配置 initial-size: 5 max-active: 100 min-idle: 5 max-wait: 60000 pool-prepared-statements: true max-pool-prepared-statement-per-connection-size: 20 validation-query: SELECT 1 FROM DUAL validation-query-timeout: 60000 test-on-borrow: false test-on-return: false test-while-idle: true time-between-eviction-runs-millis: 60000 min-evictable-idle-time-millis: 100000 ###監控配置 begin### web-stat-filter: # WebStatFilter配置,說明請參考Druid Wiki,配置_配置WebStatFilter enabled: true url-pattern: "/*" exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" stat-view-servlet: # StatViewServlet配置,說明請參考Druid Wiki,配置_StatViewServlet配置 enabled: true url-pattern: "/druid/*" reset-enable: false login-username: admin login-password: 123456 allow: 127.0.0.1 ###監控配置 end### filter: # 配置StatFilter stat: db-type: mysql log-slow-sql: true slow-sql-millis: 5000 # 配置WallFilter wall: enabled: true db-type: mysql config: delete-allow: false drop-table-allow: false globalConfig1: #主鍵類型 0:"數據庫ID自增", 1:"用戶輸入ID",2:"全局唯一ID (數字類型唯一ID)", 3:"全局唯一ID UUID"; idType: 0 #字段策略 0:"忽略判斷",1:"非 NULL 判斷"),2:"非空判斷" fieldStrategy: 2 #駝峰下划線轉換 dbColumnUnderline: true #刷新mapper 調試神器 refreshMapper: true globalConfig2: #主鍵類型 0:"數據庫ID自增", 1:"用戶輸入ID",2:"全局唯一ID (數字類型唯一ID)", 3:"全局唯一ID UUID"; idType: 3 #字段策略 0:"忽略判斷",1:"非 NULL 判斷"),2:"非空判斷" fieldStrategy: 2 #駝峰下划線轉換 dbColumnUnderline: true #刷新mapper 調試神器 refreshMapper: true mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl mapper-locations: classpath*:/com/gch/**/*Mapper.xml
3.實現邏輯
在module1新增config、entity、mapper、web包 目錄結構如下
這里主要貼一下多數據源的配置
package com.gch.druidmodule1.config; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import javax.sql.DataSource; import java.sql.SQLException; /** * Created by Administrator on 2018/1/15. */ @Configuration @MapperScan(basePackages = "com.gch.mainmodule.mapper",sqlSessionTemplateRef = "SqlSessionTemplateOne") public class DataSourceOneConfig { @ConfigurationProperties(prefix = "spring.datasource.druid.datasource1") @Bean(name = "datasource1") @Primary public DataSource dataSource1() throws SQLException { return DruidDataSourceBuilder.create().build(); } @Bean(name = "sessionFactory1") @Primary public SqlSessionFactory sqlSessionFactory1(@Qualifier(value = "datasource1") DataSource dataSource) throws Exception { MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean(); bean.setDataSource(dataSource); return bean.getObject(); } @Bean(name = "transactionManager1") @Primary public DataSourceTransactionManager dataSourceTransactionManager1(@Qualifier("datasource1") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean(name = "SqlSessionTemplateOne") @Primary public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("sessionFactory1") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } }
module2同理,這里注意一下注解@Primary只能在一個配置文件配置
package com.gch.druidmodule2.config; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import javax.sql.DataSource; import java.sql.SQLException; /** * Created by Administrator on 2028/2/25. */ @Configuration @MapperScan(basePackages = "com.gch.testmodule1.mapper",sqlSessionTemplateRef = "SqlSessionTemplateTow") public class DataSourceTowConfig { @ConfigurationProperties(prefix = "spring.datasource.druid.datasource2") @Bean(name = "datasource2") public DataSource dataSource2() throws SQLException { return DruidDataSourceBuilder.create().build(); } @Bean(name = "sessionFactory2") public SqlSessionFactory sqlSessionFactory2(@Qualifier(value = "datasource2") DataSource dataSource) throws Exception { MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean(); bean.setDataSource(dataSource); return bean.getObject(); } @Bean(name = "transactionManager2") public DataSourceTransactionManager dataSourceTransactionManager2(@Qualifier("datasource2") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean(name = "SqlSessionTemplateTow") public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("sessionFactory2") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } }
4.測試效果
打包啟動main模塊 建議使用idea插件Maven Helper編譯
訪問rest接口
每個模塊也可以單獨啟動
在這里注意在main模塊的啟動方法上需要掃描其他模塊的包,不然項目是沒法啟動的
package com.gch.druidmain; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.transaction.annotation.EnableTransactionManagement; @EnableTransactionManagement @SpringBootApplication(scanBasePackages = {"com.gch.druidmain", "com.gch.druidmodule1", "com.gch.druidmodule2"}) public class DruidMainApplication { public static void main(String[] args) { SpringApplication.run(DruidMainApplication.class, args); } }
5.貼上源碼地址
https://github.com/guanxiaohe2017/springBoot-druid-mybatisPlus