Хорошо, я дал лучший ответ, посмотрите

я есть приложение, которое необходимо подключить к нескольким 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

Ответы на вопрос(1)

Ваш ответ на вопрос