1、在启动类添加注解,注册动态多数据源:
@SpringBootApplication
@Import({DynamicDataSourceRegister.class}) // 注册动态多数据源
public class OrangeplusApplication extends WebMvcConfigurerAdapter {
protected final static Logger logger = LoggerFactory.getLogger(OrangeplusApplication.class);
public static void main(String[] args) {
SpringApplication.run(OrangeplusApplication.class, args);
logger.info("Application is success!");
}
}
2、yml配置文件中数据源配置内容为:
spring:
profiles: dev
datasource:
url: jdbc:mysql://127.0.0.1:3306/orangeplus?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
# 更多数据源
custom:
profiles: dev
datasource:
names: ds1,ds2
ds1:
driver-class-name: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@localhost:1521:oracle
username: root
password: orcl#ncu
ds2:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/orangeplus2?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
username: root
password: 123456
3、在需要的方法上使用注解指定数据源,简单代码示例:
@Service
public class StudentService {
@Autowired
private JdbcTemplate jdbcTemplate;
// MyBatis的Mapper方法定义接口
@Autowired
private StudentMapper studentMapper;
@TargetDataSource(name="ds2")
public List likeName(String name){
return studentMapper.likeName(name);
}
public List likeNameByDefaultDataSource(String name){
return studentMapper.likeName(name);
}
/**
* 不指定数据源使用默认数据源
*/
public List getList(){
String sql = "SELECT ID,NAME,SCORE_SUM,SCORE_AVG, AGE FROM STUDENT";
return (List) jdbcTemplate.query(sql, new RowMapper(){
@Override
public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
Student stu = new Student();
stu.setId(rs.getInt("ID"));
stu.setAge(rs.getInt("AGE"));
stu.setName(rs.getString("NAME"));
stu.setSumScore(rs.getString("SCORE_SUM"));
stu.setAvgScore(rs.getString("SCORE_AVG"));
return stu;
}
});