Хорошо, я дал лучший ответ, посмотрите
я есть приложение, которое необходимо подключить к нескольким d, если различные схемы, но все того же типа (ORACLE). Решение о том, какая схема исходит из пользовательского интерфейса.
если пользователь выбирает schema1, то сущность должна сохраняться в Schema1, если выбирается другая, то она должна быть в выбранной другой схеме.
Использую Spring boot + Hibernate с зависимостью "spring-boot-starter-data-jpa"
Я создал класс источника данных, как показано ниже, чтобы я мог изменять «schemaName» в объекте источника данных каждый раз перед вызовом уровня данных.
@Component
public class SchemaDatasource extends AbstractDataSource {
private String schemaName;
@Autowired
private DSManager dsm;
public void setSchemaName(String schemaName) {
this.schemaName = schemaName;
}
@Override
public Connection getConnection() throws SQLException {
if (schemaName!= null)
return dsm.getConnection(schemaName);
else
return null;
}
@Override
public Connection getConnection(String username, String password) throws SQLException {
if (schemaName!= null)
return dsm.getConnection(schemaName);
else
return null;
}
}
Моя проблема во время запуска, "HibernateJpaAutoConfiguration" пытается создать sessionfactory. Во время создания он пытается проверить соединение с источником данных. Но так как имя_программы равно нулю при запуске, мой SchemaDatasource возвращает нулевое соединение, с которым произошла ошибка при загрузке приложения.
Есть ли способ справиться с этим. Ожидаю аналогичного SessionFactory с опциями в спящем режиме.
В случае RoutingDatasource также я должен установить defaultDatasource.
Spring boot version: 1.5.9.RELEASE