【发布时间】:2026-02-03 05:20:11
【问题描述】:
我正在开发一个带有 Spring-starter-data-jpa 和多数据源的应用程序,需要延迟初始化数据源连接,但我无法使用它。
例如,如果我在数据源配置上输入了错误的密码,应用程序启动将失败。
我尝试在 Datasource @Configuration 类上添加 @Lazy 注释,但应用程序在启动时仍然崩溃。
我尝试实现一个 LazyConnectionDataSourceProxy 而不是数据源,但没有成功。
我无法想象这是不可能的。
有人知道如何在第一个 jpa 存储库调用中延迟加载数据源配置吗?
我尝试使用这样的适配器/单例混合模式来做到这一点:
@Component
public class TestErrorDatasource implements DataSource {
private DataSource datasource;
@Autowired Environment env;
@Override
public PrintWriter getLogWriter() throws SQLException {
return getDatasource().getLogWriter();
}
@Override
public int getLoginTimeout() throws SQLException {
return getDatasource().getLoginTimeout();
}
@Override
public Logger getParentLogger() throws SQLFeatureNotSupportedException {
return getDatasource().getParentLogger();
}
@Override
public void setLogWriter(PrintWriter arg0) throws SQLException {
getDatasource().setLogWriter(arg0);
}
@Override
public void setLoginTimeout(int arg0) throws SQLException {
getDatasource().setLoginTimeout(arg0);
}
@Override
public boolean isWrapperFor(Class<?> arg0) throws SQLException {
return getDatasource().isWrapperFor(arg0);
}
@Override
public <T> T unwrap(Class<T> arg0) throws SQLException {
return getDatasource().unwrap(arg0);
}
@Override
public Connection getConnection() throws SQLException {
return getDatasource().getConnection();
}
@Override
public Connection getConnection(String arg0, String arg1) throws SQLException {
return getDatasource().getConnection(arg0, arg1);
}
private DataSource getDatasource() {
if(datasource == null) {
this.datasource = DataSourceBuilder
.create()
.driverClassName(env.getProperty("testError.datasource.driverClassName"))
.url(env.getProperty("testError.datasource.url"))
.username(env.getProperty("testError.datasource.username"))
.password(env.getProperty("testError.datasource.password"))
.build();
}
return datasource;
}
}
但它不起作用。
我在 getConnection() 方法上设置了一个断点,并提出它在启动时被调用
org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl
类
是否有任何配置可以避免休眠检查启动时的 getConnection() 方法?
提前致谢
【问题讨论】:
标签: spring hibernate spring-boot spring-data-jpa lazy-initialization