Не думаю, что вы можете просто сгенерировать исключение и позволить Spring Boot искать другой компонент.
Вы можете протестировать оба источника данных в компоненте @Primary
DataSource и вернуть работающий источник данных.
Я видел, что вы используете @ConfigurationProperties
, поэтому, я думаю, вы не вызываете dataSource.setPassword
непосредственно в своем коде. В приведенном ниже примере вся необходимая информация будет считана из вашей конфигурации.
@Primary
@Bean
public DataSource getDataSource(
@Qualifier("first") DataSourceProperties first,
@Qualifier("second") DataSourceProperties second) {
final DataSource firstDataSource = first.initializeDataSourceBuilder().build();
// try {
// firstDataSource.getConnection();
// ...
// } catch (SQLException e) {
// ...
// }
// return firstDataSource or secondDataSource;
}
@Primary
@Bean("first")
@ConfigurationProperties(prefix = "spring.datasource")
public DataSourceProperties getPrimaryStringProvider() {
final DataSourceProperties dataSourceProperties = new DataSourceProperties();
return dataSourceProperties;
}
@Bean("second")
@ConfigurationProperties("spring.seconddatasource")
public DataSourceProperties getSecondaryStringProvider() {
return new DataSourceProperties();
}
LE в качестве ответа на комментарий ниже:
Исключение было неверным. Он никогда не входил в блоке улова. Вы должны использовать коммуникационное исключение или исключение само по себе.
Он выдаст исключение SQLEx (точнее, в случае с MySQL это, вероятно, com.mysql.jdbc.public class CommunicationsException extends java.sql.SQLException
).
Кроме того, мне пришлось вводить bean-компоненты в классе Application. В противном случае бобы не были построены.
Вам просто нужно аннотировать ApplicationConfiguration
с помощью @Configuration
.
Я разместил в своем вопросе рабочее решение
Не думаю, что имеет смысл аннотировать метод с помощью @ConfigurationProperties(prefix="spring.datasource")
. Значения, установленные в функции, будут перезаписаны любыми значениями , существующими из файла свойств после после выхода из метода primaryDataSource
.