这是完整的代码。我希望这能对我有所帮助,因为我在此之前也遭受了痛苦。
@RestController
@RequestMapping(value = "/accounts", headers = "Accept=application/json")
public class AppController {
@Autowired
UserService service;
@Autowired
AppService appService;
working on dynamic loading of datasource
@Autowired
Map dataSourcesMtApp;
public void updateDataSource(String url, String username, String password, String tenant) {
try {
DataSourceBuilder factory1 = DataSourceBuilder.create(MultiTenancyJpaConfiguration.class.getClassLoader()).url(url)
.username(username).password(password)
.driverClassName("com.mysql.jdbc.Driver");
dataSourcesMtApp.put(tenant, factory1.build());
System.out.println("Size:......................................................" + dataSourcesMtApp.size());
} catch (Exception ex) {
Logger.getLogger(AppController.class.getName()).log(Level.SEVERE, null, ex);
}
}
@PostMapping("/create-account")
public Response createAccount(@RequestBody ConnectionParams request) {
String tenant = ConnectionUtils.initializeDatabase(request.getDatabase(), request.getDbusername(), request.getDbpassword());
updateDataSource("jdbc:mysql://localhost:3306/" + request.getDatabase() + "?useSSL=false", request.getDbusername(), request.getDbpassword(), tenant);
TenantContextHolder.setTenantId(tenant);
Users user = new Users();
user.setPassword(request.getLoginpassword());
user.setUsername(request.getLoginusername());
user.setTenant(tenant);
user = service.save(user);
String response = "Account Setup Completed TenantId: " + tenant + " Username: " + user.getUsername();
Response rp = new Response();
rp.setResult(response);
return rp;
}
}