我有一个Spring应用程序试图连接到数据库。为了进行连接,必须首先建立SSH隧道(使用Jsch)。如何将HibernateJPAAutoConfiguration
延迟到建立Jsch SSH会话的bean返回之后?目前应用程序无法启动,因为隧道尚未打开。当我试图排除这个autoconfiguration类,然后在已经创建的会话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接口,并在'after PropertiesSet'方法中初始化jsch隧道。
请参考以下内容:Spring Data JPA与ssh隧道连接到远程MySQL服务器
安装Windows服务时,有两个选项可以在Windows启动时自动启动Windows服务。一个是自动,另一个是自动(延迟启动)。详细来说,这两者有什么区别? 例如,如果您使用wixtoolset创建安装程序,ServiceConfig元素具有DelayedAutoStart属性。当服务在启动时启动时,这会对发生的事情产生什么影响? WiX留档:ServiceConfig元素
我想将来自AWS Kinesis流的消息的处理延迟一个小时。我已将KCL消费者配置为每四分钟读取一批记录,检查每条记录的时间戳,如果任何记录不到一个小时,则停止处理该批次,无需检查点。我希望同一个消费者实例每四分钟重读一次相同的消息,直到整个批次足够旧可以处理,然后检查点消费者。但是,在实践中,消费者只读取一次消息,这意味着它们被忽略,并且在准备好处理时永远不会再次读取。有没有办法将消费者配置为每
问题内容: 我刚开始用Java编写代码,我正努力设置DelayQueue, 我想这样 我只是想学习所有的基础知识,并且从api上学到了内容,似乎无法掌握它。 提前致谢 问题答案: 该直到一定的延时已经过期保持要素内部。元素必须实现接口。 例如,我创建了一个扩展Delayed接口的类。这将实现compareTo和getDelay()方法 结果:
问题内容: 我正在使用angularjs,并且希望能够在需要时加载指令,而不是在页面开始时加载所有指令。我正在尝试为最常用的插件创建指令。 这样,一个direct可以在最终编译html之前用于加载所有需要的指令。 如果该指令与其他指令一起在页面开始加载,则一切正常。但是,如果稍后加载“子”指令(在“父”中),则该指令无效。以下是“ parent”指令的compile字段中pre字段的代码。 使用y
问题内容: 我正在尝试用Java做某事,而我需要一些东西在while循环中等待/延迟几秒钟。 我想构建一个步进音序器,并且对Java还是陌生的。有什么建议么? 问题答案: If you want to pause then use java.util.concurrent.TimeUnit: TimeUnit.SECONDS.sleep(1); TimeUnit.MINUTES.sleep(1);
问题内容: 我想在更改背景之间的命令之间设置延迟。我尝试使用线程计时器,并尝试使用运行和捕获。但这不起作用。我试过了 但这只是变成黑色。 问题答案: 试试这个代码: