在日常开发中,经常会遇到多个数据源的问题,而SpringBoot也有相关API:Configure Two DataSources:https://docs.spring.io/spring-boot/docs/1.5.4.RELEASE/reference/htmlsingle/#howto-two-datasources
本文SpringBoot版本为2.0(由于2.0之前的版本和之后的版本配置会有些许不同,2.0之前的版本推荐一位大牛的博文:http://blog.didispace.com/springbootmultidatasource/)下面会介绍这两种多数据源的配置方法,希望大家多多指教!
1、添加applicaton.properties数据库连接信息,有两个数据源,一个为主,一个为从:
app.datasource.foo.url=jdbc:mysql://192.168.1.121:3306/test app.datasource.foo.username=root app.datasource.foo.password=admincss app.datasource.foo.driver-class-name=com.mysql.jdbc.Driver app.datasource.bar.url=jdbc:mysql://192.168.1.121:3306/test2 app.datasource.bar.username=root app.datasource.bar.password=admincss app.datasource.bar.driver-class-name=com.mysql.jdbc.Driver
2、创建数据源类:
package com.cn.datasource; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; 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.core.JdbcTemplate; import javax.sql.DataSource; /** * @program: spring-boot-example * @description: 数据源配置类 * @author: * @create: 2018-05-03 14:35 **/ @Configuration public class JdbcDataSourceConfig { @Primary @Bean(name = "dataSourcePropertiesFoo") @Qualifier("dataSourcePropertiesFoo") @ConfigurationProperties(prefix="app.datasource.foo") public DataSourceProperties dataSourcePropertiesFoo() { return new DataSourceProperties(); } @Primary @Bean(name = "fooDataSource") @Qualifier("fooDataSource") @ConfigurationProperties(prefix="app.datasource.foo") public DataSource fooDataSource(@Qualifier("dataSourcePropertiesFoo") DataSourceProperties dataSourceProperties) { return dataSourceProperties.initializeDataSourceBuilder().build(); } @Bean(name = "dataSourcePropertiesBar") @Qualifier("dataSourcePropertiesBar") @ConfigurationProperties(prefix="app.datasource.bar") public DataSourceProperties dataSourcePropertiesBar() { return new DataSourceProperties(); } @Bean(name = "barDataSource") @Qualifier("barDataSource") @ConfigurationProperties(prefix="app.datasource.bar") public DataSource barDataSource(@Qualifier("dataSourcePropertiesBar") DataSourceProperties dataSourceProperties) { return dataSourceProperties.initializeDataSourceBuilder().build(); } @Bean(name = "fooJdbcTemplate") @Qualifier("fooJdbcTemplate") public JdbcTemplate fooJdbcTemplate(@Qualifier("fooDataSource") DataSource dataSource) { return new JdbcTemplate(dataSource); } @Bean(name = "barJdbcTemplate") @Qualifier("barJdbcTemplate") public JdbcTemplate barJdbcTemplate(@Qualifier("barDataSource") DataSource dataSource) { return new JdbcTemplate(dataSource); } }
3、创建简单的测试bean、controller、service、entityRowMapper:
package com.cn.entity.u; import java.io.Serializable; /** * @program: spring-boot-example * @description: 用户类 * @author: * @create: 2018-05-02 09:59 **/ public class User implements Serializable{ private int id; private String name; private int age; private String address; @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + ", address='" + address + '\'' + '}'; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }