1、添加maven依赖注入
<!--properties所需依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
2、修改application.yml配置文件
mysql-logic-db:
name: logic
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://192.168.1.113:3306/test1?useUnicode=true&characterEncoding=utf-8
username: root
password: root
mysql-dao-db:
name: dao
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://192.168.1.113:3306/test2?useUnicode=true&characterEncoding=utf-8
username: root
password: root
3、多数据源配置
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
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 javax.sql.DataSource;
/**
* 多数据源配置(mysql,oracle)
* @author 陈梓平
* @date 2017/9/27.
*/
@Configuration
public class MultipleDBConfig {
@Bean(name = "mysqlDB_logic")
@Primary
@ConfigurationProperties(prefix = "mysql-logic-db")
public DataSource mysqlLogicDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "mysqlDB_dao")
@ConfigurationProperties(prefix = "mysql-dao-db")
public DataSource mysqlDAODataSource() {
return DataSourceBuilder.create().build();
}
}
注解 备注
@Primary 优先方案,被注解的实现,优先被注入
@Qualifier 先声明后使用,相当于多个实现起多个不同的名字,注入时候告诉我你要注入哪个
4、单元测试多数据源
/**
* 单元测试多数据源
* @author 陈梓平
* @date 2017/9/27.
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestMultipleDB {
private Logger logger = LoggerFactory.getLogger(TestMultipleDB.class);
@Autowired
@Qualifier("mysqlDB_logic")
private DataSource mysqlDB_logic;
@Autowired
@Qualifier("mysqlDB_dao")
private DataSource mysqlDB_dao;
@Test
public void testMysqlDB_logic() throws SQLException {
if (mysqlDB_logic!=null){
Connection connection = mysqlDB_logic.getConnection();
PreparedStatement ppst = null;
ResultSet rs = null;
ppst = connection.prepareStatement("SELECT id FROM journal");
rs = ppst.executeQuery();
List<String> list = new ArrayList<>();
while (rs.next()) {
list.add( rs.getString(1));
}
logger.info("size="+list.size());
}
}
@Test
public void testMysqlDB_dao() throws SQLException {
if (mysqlDB_dao!=null){
Connection connection = mysqlDB_dao.getConnection();
PreparedStatement ppst = null;
ResultSet rs = null;
ppst = connection.prepareStatement("SELECT nId FROM news");
rs = ppst.executeQuery();
List<String> list = new ArrayList<>();
while (rs.next()) {
list.add( rs.getString(1));
}
logger.info("size="+list.size());
}
}
}
5、测试结果