1:根据配置文件刷新spingboot项目内存数据库配置实例:
@Slf4j
@Configuration
@RefreshScope
@Data
public class DruidConfiguration {
@Value("${spring.datasource.url}")
private String dbUrl;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Value("${spring.datasource.driver-class-name}")
private String driverClassName;
@Bean
@RefreshScope
public DruidDataSource dataSource() {
DruidDataSource datasource = new DruidDataSource();
datasource.setUrl(this.dbUrl);
datasource.setDriverClassName(this.driverClassName);
datasource.setUsername(this.username);
datasource.setPassword(this.password);
return datasource;
}
@Bean
@RefreshScope
public DruidDataSource dataSource(String username, String password) {
DruidDataSource datasource = new DruidDataSource();
datasource.setUrl(this.dbUrl);
datasource.setDriverClassName(this.driverClassName);
datasource.setUsername(username);
datasource.setPassword(password);
return datasource;
}
}
2:带参数的dataSource函数,可支持手动调用接口方式动态刷新内存数据库配置,保证项目无缝切换数据库配置:
@RestController
@RequestMapping("/switch")
@Slf4j
@RequiredArgsConstructor
public class SwitchController {
private final DruidConfiguration druidConfiguration;
/**
* 切换账号
* @param dto
* @return
*/
@PostMapping(value = "/switchAccount", produces = {"application/json;charset=UTF-8"})
@ApiOperation(value="切换数据库账户",notes="切换数据库账户")
public Result switchAccount(@RequestBody SwitchAccountDto dto) {
druidConfiguration.dataSource(dto.getUsername(), dto.getPassword());
return Result.ok();
}
}