禁用Spring Boot HibernateJpaAutoConfiguration但仍然收到相关错误

时间:2018-01-12 04:53:16

标签: java hibernate spring-boot spring-data-jpa

@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候选者。依赖注释:{}

3 个答案:

答案 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})