前言:本次使用JPA连接默认数据库进行操作,使用JdbcTemplate连接第二个数据源进行操作,使用JPA操作不再进行说明,只对使用JdbcTemplate操作进行说明
1. application.properties配置文件配置双数据源连接信息
#配置基础数据源信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.jdbc-url=jdbc:mysql://ip:port/db?characterEncoding=utf8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
#配置第二个数据源信息
spring.datasource.collect.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.collect.jdbc-url=jdbc:mysql://ip:port/db?characterEncoding=utf8&serverTimezone=UTC
spring.datasource.collect.username=root
spring.datasource.collect.password=root
注意:要是用spring.datasource.jdbc-url而不要使用spring.datasource.url,不然会报错:jdbcUrl is required with driverClassName
2. 配置自定义DataSource接替SpringBoot默认数据源
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.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
/**
* 配置系统数据源: 使用自定义的DataSource后SpringBoot默认数据源不会生效
*/
@Configuration
public class DataSourceConfig {
/**
* 配置基础数据源
* @return
*/
@Bean(name = "dataSource")
@Qualifier("dataSource")
@Primary // 自动注入有多个候选时这个优先注入
@ConfigurationProperties(prefix = "spring.datasource") // 配置文件中数据库信息前缀
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
/**
* 配置第二个数据源
* @return
*/
@Bean(name = "collectDataSource")
@Qualifier("collectDataSource")
@ConfigurationProperties(prefix = "spring.datasource.collect") // 配置文件中数据库信息前缀
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
/**
* 配置第二个数据源操作对象
* @param dataSource
* @return
*/
@Bean(name = "collectJdbcTemplate")
public JdbcTemplate secondaryJdbcTemplate(@Qualifier("collectDataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
3. 注入JdbcTemplate对象
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
@Repository
public class WeiXinDAOImpl implements WeiXinDAO {
@Autowired
@Qualifier("collectJdbcTemplate")
protected JdbcTemplate jdbcTemplate;
@Override
public String getNickName() {
String sql = "select nickname from weixin where wxid = 1";
String nickName = jdbcTemplate.queryForObject(sql, String.class);
System.out.println("昵称: " + nickName);
return nickName;
}
}