springboot配置多数据源
1.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 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.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.cykj</groupId>
<artifactId>reports</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>reports</name>
<packaging>war</packaging>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--引入web场景-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--springboot的jdbc场景启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--springboot的mybatis启动器-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.1</version>
</dependency>
<!--引入mysql的jar包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
<scope>runtime</scope>
</dependency>
<!--引入lombok依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
</dependency>
<!--热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>true</scope>
</dependency>
<dependency>
<groupId>com.vaadin.external.google</groupId>
<artifactId>android-json</artifactId>
<version>0.0.20131108.vaadin1</version>
</dependency>
<!--POI-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.16</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.14</version>
</dependency>
<!--文件上传-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<!--引入fastjson依赖-->
<!--<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>-->
<!--json-->
<!--<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.2.3</version>
<classifier>jdk15</classifier><!– jdk版本 –>
</dependency>-->
<!--springboot的test场景-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.application.yml
#10.150.150.192 数据库: reports 用户名密码: report report
#10.150.150.192 数据库: monkey username:monkey password:monkey port:3306
spring:
# 配置数据库连接
datasource:
main:
jdbc-url: jdbc:mysql://10.150.150.192:3306/reports?useUnicode=true&characterEncoding=utf-8
username: report
password: report
driver-class-name: com.mysql.cj.jdbc.Driver #mysql版本为8.0时
second:
jdbc-url: jdbc:mysql://10.150.150.192:3306/monkey?useUnicode=true&characterEncoding=utf-8
username: monkey
password: monkey
driver-class-name: com.mysql.cj.jdbc.Driver #mysql版本为8.0时
# jackson:
# serialization:
# write-dates-as-timestamps: false
# jackson:
# date-format: yyyy-MM-dd HH:mm:ss
# time-zone: GMT+8
# 配置端口
server:
port: 8001
3.DataSourceMainConfig.java
package com.cykj.reports.config;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
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.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.cykj.reports.mapper.main", sqlSessionFactoryRef = "mainSqlSessionFactory")
public class DataSourceMainConfig {
@Bean(name = "mainDataSource")
@ConfigurationProperties(prefix = "spring.datasource.main")
@Primary
public DataSource db1DataSource() {
return DataSourceBuilder.create ().build ();
}
@Bean(name = "mainSqlSessionFactory")
@Primary
public SqlSessionFactory db1SqlSessionFactory(@Qualifier("mainDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean ();
bean.setDataSource ( dataSource );
bean.setTypeAliasesPackage("com.cykj.reports.domain.main");
bean.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath*:mybatis/main/*.xml"));
return bean.getObject ();
}
@Bean(name = "mainTransactionManager")
@Primary
public DataSourceTransactionManager db1TransactionManager(@Qualifier("mainDataSource") DataSource dataSource) {
return new DataSourceTransactionManager ( dataSource );
}
@Bean(name = "mainSqlSessionTemplate")
@Primary
public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("mainSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate ( sqlSessionFactory );
}
}
4.DataSourceSecondConfig.java
package com.cykj.reports.config;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
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.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.cykj.reports.mapper.second", sqlSessionFactoryRef = "secondSqlSessionFactory")
public class DataSourceSecondConfig {
@Bean(name = "secondDataSource")
@ConfigurationProperties(prefix = "spring.datasource.second")
public DataSource secondDataSource() {
return DataSourceBuilder.create ().build ();
}
@Bean(name = "secondSqlSessionFactory")
public SqlSessionFactory secondSqlSessionFactory(@Qualifier("secondDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean ();
bean.setDataSource ( dataSource );
bean.setTypeAliasesPackage("com.cykj.reports.domain.second");
bean.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath*:mybatis/second/*.xml"));
return bean.getObject ();
}
@Bean(name = "secondTransactionManager")
public DataSourceTransactionManager secondTransactionManager(@Qualifier("secondDataSource") DataSource dataSource) {
return new DataSourceTransactionManager ( dataSource );
}
@Bean(name = "secondSqlSessionTemplate")
public SqlSessionTemplate secondSqlSessionTemplate(@Qualifier("secondSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate ( sqlSessionFactory );
}
}
5.application启动类
package com.cykj.reports;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
//不需要下面的注解扫描
//@MapperScan(basePackages = {"com.cykj.reports.mapper"})
public class ReportsApplication {
public static void main(String[] args) {
SpringApplication.run(ReportsApplication.class, args);
}
}
6.文件存放目录
