@SpringBootApplication(exclude = {
HibernateJpaAutoConfiguration.class, JndiConnectionFactoryAutoConfiguration.class, XADataSourceAutoConfiguration.class,
JndiDataSourceAutoConfiguration.class, ...)
像上面的代码一样,我禁用Spring Boot提供的相当多的自动配置类,因为我想让我的rpc框架更清晰,但是我不断得到这个奇怪的错误,我看看HibernateJpaAutoConfiguration构造函数,它需要一个Datasource bean,但是我已经安装了HibernateJpaAutoConfiguration,为什么还要创建这个bean呢?
在上下文初始化期间遇到异常 - 取消刷新尝试:org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为' org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration':不满意的bean时出错通过构造函数参数0表示的依赖;嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有类型为' javax.sql.DataSource'的限定bean可用:预计至少有1个豆有资格作为autowire候选者。依赖注释:{}
答案 0 :(得分:0)
禁用HibernateJpaAutoConfiguration
时,必须在配置中手动提供DataSource
bean,否则Spring无法在应用程序上下文中找到它并抛出您遇到的异常
答案 1 :(得分:0)
问题解决了!事实证明我在类路径中有两个测试Main类,当我删除一个时,问题就消失了,所以很奇怪。下面显示了两个主要类别:
@XproPluginApplication
public class ServerMain {
public static void main(String[] args) throws Exception {
ApplicationContext context = SpringApplication.run(ServerMain.class);
}
}
@XproPluginApplication
public class ClientMain {
public static void main(String[] args) throws Exception {
ApplicationContext context = SpringApplication.run(ClientMain.class);
Invoker invoker = context.getBean(Invoker.class);
while (true) {
try {
invoker.invokeVoidAsyncCallback();
TimeUnit.SECONDS.sleep(5);
} catch (Exception e) {
e.printStackTrace();
TimeUnit.SECONDS.sleep(5);
}
}
}
}
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@SpringBootApplication(exclude = { HibernateJpaAutoConfiguration.class...}
@EnableDiscoveryClient
@Import(XproPluginRegistrar.class)
public @interface XproPluginApplication {
RunMode runMode() default RunMode.SERVER;
}
答案 2 :(得分:0)
您似乎不需要数据源。 从自动配置过程中删除它:
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})