如何解决如何延迟Spring JPA自动配置直到bean运行?
我有一个Spring应用程序正在尝试连接到数据库。为了进行连接,必须首先建立SSH隧道(使用Jsch)。我如何延迟HibernateJpaAutoConfiguration
直到建立Jsch SSH会话的bean返回之后?当前,由于尚未打开隧道,因此应用程序无法启动。当我尝试排除此自动配置类,然后在已创建的会话Bean上显式声明其实例时,出现以下错误:
Caused by: java.lang.IllegalArgumentException: At least one JPA metamodel must be present!
我不明白为什么当我依靠自动配置而不必提供时,为什么突然自己必须提供它。如果有人可以向我展示实现此目标的方法,那就太好了。
POM:
...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- Spring data JPA,default tomcat pool,exclude it -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
</exclusion>
</exclusions>
</dependency>
...
主要应用程序:
@SpringBootApplication(exclude = HibernateJpaAutoConfiguration.class)
public class Application {
public static void main(String... args) {
SpringApplication.run(Application.class,args);
}
@Configuration
static class SshTunnelConfiguration {
@Bean
public com.jcraft.jsch.Session sshTunnel() {
...
}
}
@Configuration
@ConditionalOnBean(com.jcraft.jsch.Session.class)
static class DelayedJpaConfiguration extends HibernateJpaAutoConfiguration {
public JpaConfiguration(DataSource dataSource,JpaProperties jpaProperties,ObjectProvider<JtaTransactionManager> jtaTransactionManager,ObjectProvider<TransactionManagerCustomizers> transactionManagerCustomizers) {
super(dataSource,jpaProperties,jtaTransactionManager,transactionManagerCustomizers);
}
}
}
解决方法
您将必须实现自己的数据源(通过扩展使用的数据源)并实现InitializingBean接口,并在“ afterPropertiesSet”方法中初始化jsch隧道。
请参考:Spring Data JPA with ssh tunnel to a remote MySQL server
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。