springboot通过JdbcTemplate实现多数据库


pom.xml



org.springframework.boot
spring-boot-starter-jdbc



org.springframework.boot
spring-boot-starter-web



com.microsoft.sqlserver
mssql-jdbc
runtime


org.springframework.boot
spring-boot-starter-test
test

application.properties:

spring.datasource.primary.jdbc-url=jdbc:sqlserver://localhost:1433;DatabaseName=spiderdb
spring.datasource.primary.username=root
spring.datasource.primary.password=root
spring.datasource.primary.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver

spring.datasource.secondary.jdbc-url=jdbc:sqlserver://localhost:1434;DatabaseName=spiderdb
spring.datasource.secondary.username=root
spring.datasource.secondary.password=root
spring.datasource.secondary.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver

#注意使用url,可能出现"java.lang.IllegalArgumentException: jdbcUrl is required with driverClassName."错误.

TwoDataSourceConfig:

@Configuration
public class TwoDataSourceConfig {
@Bean(name = "primaryDataSource")
@Qualifier("primaryDataSource")
@ConfigurationProperties(prefix="spring.datasource.primary")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}

@Bean(name = "secondaryDataSource")
@Qualifier("secondaryDataSource")
@ConfigurationProperties(prefix="spring.datasource.secondary")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}

@Bean(name = "primaryJdbcTemplate")
public JdbcTemplate primaryJdbcTemplate(@Qualifier("primaryDataSource" ) DataSource dataSource) {
return new JdbcTemplate(dataSource);
}

@Bean(name = "secondaryJdbcTemplate")
public JdbcTemplate secondaryJdbcTemplate(@Qualifier("secondaryDataSource" ) DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}

测试验证:

@RunWith(SpringRunner.class)
@SpringBootTest
public class JdbcTest {

@Autowired
@Qualifier("primaryJdbcTemplate")
protected JdbcTemplate pjdbcTemplate;

@Autowired
@Qualifier("secondaryJdbcTemplate")
protected JdbcTemplate sjdbcTemplate;

@Test
public void test() throws Exception {
String a = pjdbcTemplate.queryForObject("select count(*) from xx where tag = '3' ", String.class);
String b = sjdbcTemplate.queryForObject("select count(*) from xx where tag = '3' ", String.class);
Assert.assertEquals(a, b);
}
}