最近接到一個新需求,經過分析後做了相應的設計;其中需要在一個項目中操做不同的數據源;於是進行了相關驗證;在此記錄一下驗證過程。
一、Pom中引入相應的Jar包
<!-- mysql 基礎服務--><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.39</version></dependency><!-- mybatis --><dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version></dependency>
二、主要代碼展示
1、application.properties增加資料庫連接的相關配置
****************************訂單資料庫***************************order.datasource.url=jdbc:mysql://127.0.0.1:3306/zh_order?useUnicode=true&zeroDateTimeBehavior=convertToNull&characterEncoding=UTF-8order.datasource.username=rootorder.datasource.password=rootorder.datasource.connectionTimeout=30000order.datasource.idleTimeout=600000order.datasource.maxLifetime=1800000order.datasource.maximumPoolSize=10order.datasource.minimumIdle=5
2、啟動類中排除DataSourceAutoConfiguration和MybatisAutoConfiguration
package com.zhanghan.zhboot;import org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, MybatisAutoConfiguration.class})public class ZhBootApplication { public static void main(String[] args) { SpringApplication.run(ZhBootApplication.class, args); }}
3、資料庫屬性讀取類(以UserDataSourceProperties為例)
package com.zhanghan.zhboot.properties;import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.stereotype.Component;@Component@Data@ConfigurationProperties(prefix = &34;)public class UserDataSourceProperties { private String url; private String username; private String password; private Integer connectionTimeout; private Integer idleTimeout; private Integer maxLifetime; private Integer maximumPoolSize; private Integer minimumIdle;}
4、數據源配置器(以UserDataSourceConfig為例)---註:資料庫連接池用的是springboot2.0後默認的hikariCP(性能高)
package com.zhanghan.zhboot.config;import com.zaxxer.hikari.HikariConfig;import com.zaxxer.hikari.HikariDataSource;import com.zhanghan.zhboot.properties.UserDataSourceProperties;import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.annotation.MapperScan;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;@Configuration// 掃描 Mapper 接口並容器管理@MapperScan(basePackages = UserDataSourceConfig.PACKAGE, sqlSessionFactoryRef = &34;)public class UserDataSourceConfig { static final String PACKAGE = &34;; @Autowired private UserDataSourceProperties userDataSourceProperties; @Bean(name = &34;) public DataSource userDataSource() { HikariConfig config = new HikariConfig(); config.setJdbcUrl(userDataSourceProperties.getUrl()); config.setUsername(userDataSourceProperties.getUsername()); config.setPassword(userDataSourceProperties.getPassword()); config.setConnectionTestQuery(&34;); config.setConnectionTimeout(userDataSourceProperties.getConnectionTimeout()); config.setIdleTimeout(userDataSourceProperties.getIdleTimeout()); config.setMaxLifetime(userDataSourceProperties.getMaxLifetime()); config.setMaximumPoolSize(userDataSourceProperties.getMaximumPoolSize()); config.setMinimumIdle(userDataSourceProperties.getMinimumIdle()); return new HikariDataSource(config); } @Bean(name = &34;) public DataSourceTransactionManager userTransactionManager() { return new DataSourceTransactionManager(userDataSource()); } @Bean(name = &34;) public SqlSessionFactory userSqlSessionFactory( @Qualifier(&34;) DataSource userDataSource) throws Exception { final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(userDataSource); return sessionFactory.getObject(); }}
5、相應的mapper文件
package com.zhanghan.zhboot.mybatis.mapper.user;import com.zhanghan.zhboot.mybatis.entity.UserInfoEntity;import org.apache.ibatis.annotations.Mapper;import org.apache.ibatis.annotations.Result;import org.apache.ibatis.annotations.Results;import org.apache.ibatis.annotations.Select;import org.apache.ibatis.type.JdbcType;@Mapperpublic interface UserInfoMapper { @Select({ &34;, &34;, &34;, &34;, &{mobile,jdbcType=VARCHAR}&34;limit 1&34;id&34;id&34;no&34;no&34;mobile&34;mobile&34;name&34;name&34;sex&34;sex&34;create_time&34;createTime&34;update_time&34;updateTime&34;param1&34;param1&34;param2&34;param2&34;param3&34;param3&34;param4&34;param4&34;param5&34;param5&34;param6&34;param6&34;/get/order/borrow", method = RequestMethod.POST) public Object getOrderBorrow(@RequestBody OrderRequest orderRequest) { return orderService.findOrder(orderRequest); }}
三、效果圖
五、項目地址及代碼版本
1、地址:https://github.com/dangnianchuntian/springboot
2、代碼版本:1.0.0-Release
1、實踐出真知;
2、技術是為業務服務;