繁体   English   中英

Spring 启动时吞咽异常

[英]Spring swallow exception during startup

我有 bean(不要介意try catch它是出于调试目的):

    @Bean
    public IgniteEntityConfiguration articleIgniteEntityConfig() {
        try {
            return IgniteEntityConfiguration.builder()
                    .cacheName("ArticleCache")
                    .dbTableName("ARTICLE")
                    .valueClass(Article.class)
                    .build();
        } catch (Exception e) {
            log.error("bean errr", e);
            throw e;
        }

    }

IgniteEntityConfiguration ,我验证通过了 class 并在需要时抛出异常。

流动

在日志中我有:

  1. 记录器记录的错误log.error("bean errr", e); ;
  2. 其他信息行。
  3. 来自@Controller 的错误,它使用的是城际使用的 bean articleIgniteEntityConfig 在这里应用程序停止

如果我删除try catch块,甚至不会记录错误(抛出异常 - 我用调试器检查了它)。

问题

这是为什么? bean 中的第一个异常不应该停止应用程序吗?

我找到了答案。 我没有得到有意义的错误,因为在IgniteRepositoryFactory (ignite-spring-data_2.2) 中,所有原因错误都被吞没了,只有这个错误被抛出:

                    throw new IgniteException("Failed to initialize Ignite repository factory. Ignite instance or"
                        + " IgniteConfiguration or a path to Ignite's spring XML "
                        + "configuration must be defined in the"
                        + " application configuration");

完整方法

 private Ignite igniteForRepoConfig(RepositoryConfig config) {
        try {
            String igniteInstanceName = evaluateExpression(config.igniteInstance());
            return (Ignite)ctx.getBean(igniteInstanceName);
        }
        catch (BeansException ex) {
            try {
                String igniteConfigName = evaluateExpression(config.igniteCfg());
                IgniteConfiguration cfg = (IgniteConfiguration)ctx.getBean(igniteConfigName);
                try {
                    // first try to attach to existing ignite instance
                    return Ignition.ignite(cfg.getIgniteInstanceName());
                }
                catch (Exception ignored) {
                    // nop
                }
                return Ignition.start(cfg);
            }
            catch (BeansException ex2) {
                try {
                    String igniteSpringCfgPath = evaluateExpression(config.igniteSpringCfgPath());
                    String path = (String)ctx.getBean(igniteSpringCfgPath);
                    return Ignition.start(path);
                }
                catch (BeansException ex3) {
                    throw new IgniteException("Failed to initialize Ignite repository factory. Ignite instance or"
                        + " IgniteConfiguration or a path to Ignite's spring XML "
                        + "configuration must be defined in the"
                        + " application configuration");
                }
            }
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM