как исправить "UnsatisfiedDependencyException: Ошибка при создании bean-компонента с именем .EurekaServerAutoConfiguration '" - PullRequest
0 голосов
/ 16 апреля 2019

мы используем инструмент eclipse + spring suit для тестирования проекта службы конфигурации весенней загрузки, компиляция / пакет / тестирование в IDE работает хорошо.

когда мы отправляем на сервер и запускаем jar-приложение, мы получаем следующие ошибки:

    org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is 
org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
at  org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:155)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:544)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:780)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:412)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:333)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1277)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1265)
at com.ctrip.framework.apollo.configservice.ConfigServiceApplication.main(ConfigServiceApplication.java:35)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:54)
at java.lang.Thread.run(Thread.java:748)
    Caused by: org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:126)
at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.<init>(TomcatWebServer.java:86)
at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:413)
at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:174)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:179)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:152)
... 14 common frames omitted
    Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.cloud.netflix.eureka.server.EurekaServerAutoConfiguration': Unsatisfied dependency expressed through field 'eurekaServerConfig'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'eurekaServerConfig' defined in class path resource [org/springframework/cloud/netflix/eureka/server/EurekaServerAutoConfiguration$EurekaServerConfigBeanConfiguration.class]: Unsatisfied dependency expressed through method 'eurekaServerConfig' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'apolloEurekaClientConfig' defined in URL [jar:file:/home/apollo/configservice-1.3.0/apollo-configservice.jar!/lib/apollo-biz-1.3.0.jar!/com/ctrip/framework/apollo/biz/eureka/ApolloEurekaClientConfig.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'bizConfig': Invocation of init method failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:586)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:372)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1341)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:572)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:495)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:372)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1247)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1096)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:535)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:495)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:204)
at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:226)
at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:214)
at org.springframework.boot.web.servlet.ServletContextInitializerBeans.addServletContextInitializerBeans(ServletContextInitializerBeans.java:91)
at org.springframework.boot.web.servlet.ServletContextInitializerBeans.<init>(ServletContextInitializerBeans.java:80)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getServletContextInitializerBeans(ServletWebServerApplicationContext.java:250)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.selfInitialize(ServletWebServerApplicationContext.java:237)
at org.springframework.boot.web.embedded.tomcat.TomcatStarter.onStartup(TomcatStarter.java:54)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5245)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1420)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1410)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
... 1 common frames omitted

вот наш файл POM:

    <?xml version="1.0"  encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
    <groupId>com.ctrip.framework.apollo</groupId>
    <artifactId>apollo</artifactId>
    <version>1.3.0</version>
    <relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>apollo-configservice</artifactId>
<name>Apollo ConfigService</name>
<properties>
    <github.path>${project.artifactId}</github.path>
</properties>
<dependencies>
    <!-- apollo -->
    <dependency>
        <groupId>com.ctrip.framework.apollo</groupId>
        <artifactId>apollo-biz</artifactId>
    </dependency>
    <!-- end of apollo -->
    <!-- eureka -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        <exclusions>
            <exclusion>
                <artifactId>spring-cloud-starter-netflix-archaius</artifactId>
                <groupId>org.springframework.cloud</groupId>
            </exclusion>
            <exclusion>
                <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
                <groupId>org.springframework.cloud</groupId>
            </exclusion>
            <exclusion>
                <artifactId>ribbon-eureka</artifactId>
                <groupId>com.netflix.ribbon</groupId>
            </exclusion>
            <exclusion>
                <artifactId>aws-java-sdk-core</artifactId>
                <groupId>com.amazonaws</groupId>
            </exclusion>
            <exclusion>
                <artifactId>aws-java-sdk-ec2</artifactId>
                <groupId>com.amazonaws</groupId>
            </exclusion>
            <exclusion>
                <artifactId>aws-java-sdk-autoscaling</artifactId>
                <groupId>com.amazonaws</groupId>
            </exclusion>
            <exclusion>
                <artifactId>aws-java-sdk-sts</artifactId>
                <groupId>com.amazonaws</groupId>
            </exclusion>
            <exclusion>
                <artifactId>aws-java-sdk-route53</artifactId>
                <groupId>com.amazonaws</groupId>
            </exclusion>
            <!-- duplicated with spring-security-core -->
            <exclusion>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-crypto</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- end of eureka -->
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <executable>true</executable>
            </configuration>
        </plugin>
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>0.4.13</version>
            <configuration>
                <imageName>${project.artifactId}</imageName>
                <dockerDirectory>src/main/docker</dockerDirectory>
                <resources>
                    <resource>
                        <targetPath>/</targetPath>
                        <directory>${project.build.directory}</directory>
                        <include>*.zip</include>
                    </resource>
                </resources>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <finalName>${project.artifactId}-${project.version}-${package.environment}</finalName>
                        <appendAssemblyId>false</appendAssemblyId>
                        <descriptors>
                            <descriptor>src/assembly/assembly-descriptor.xml</descriptor>
                        </descriptors>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
    </project>

это первый раз, чтобы прикоснуться к приложениям Spring, поскольку журнал ошибок выглядит как зависимость для eureka, но не знаю, какую зависимость jar нам следует добавить. пожалуйста, дайте несколько советов по этой проблеме. большое спасибо !!

определение класса bizconfig:

    package com.ctrip.framework.apollo.biz.config;



      import com.ctrip.framework.apollo.biz.service.BizDBPropertySource; import
   com.ctrip.framework.apollo.common.config.RefreshableConfig; import
   com.ctrip.framework.apollo.common.config.RefreshablePropertySource;
   import com.google.common.base.Strings; import
   com.google.common.collect.Maps; import com.google.gson.Gson; import
   com.google.gson.reflect.TypeToken; import
   org.springframework.stereotype.Component;

   import java.lang.reflect.Type; import java.util.Collections; import
   java.util.List; import java.util.Map; import
   java.util.concurrent.TimeUnit;

   @Component public class BizConfig extends RefreshableConfig {

     private static final int DEFAULT_ITEM_KEY_LENGTH = 128;   private
   static final int DEFAULT_ITEM_VALUE_LENGTH = 20000;   private static
   final int DEFAULT_APPNAMESPACE_CACHE_REBUILD_INTERVAL = 60; //60s  
   private static final int DEFAULT_GRAY_RELEASE_RULE_SCAN_INTERVAL =
   60; //60s   private static final int
   DEFAULT_APPNAMESPACE_CACHE_SCAN_INTERVAL = 1; //1s   private static
   final int DEFAULT_RELEASE_MESSAGE_CACHE_SCAN_INTERVAL = 1; //1s  
   private static final int DEFAULT_RELEASE_MESSAGE_SCAN_INTERVAL_IN_MS
   = 1000; //1000ms   private static final int DEFAULT_RELEASE_MESSAGE_NOTIFICATION_BATCH = 100;   private static
   final int
   DEFAULT_RELEASE_MESSAGE_NOTIFICATION_BATCH_INTERVAL_IN_MILLI =
   100;//100ms

     private Gson gson = new Gson();   private static final Type
   namespaceValueLengthOverrideTypeReference =
         new TypeToken<Map<Long, Integer>>() {
         }.getType();

     private final BizDBPropertySource propertySource;

     public BizConfig(final BizDBPropertySource propertySource) {
       this.propertySource = propertySource;   }

     @Override   protected List<RefreshablePropertySource>
   getRefreshablePropertySources() {
       return Collections.singletonList(propertySource);   }

     public List<String> eurekaServiceUrls() {
       String configuration = getValue("eureka.service.url", "");
       if (Strings.isNullOrEmpty(configuration)) {
         return Collections.emptyList();
       }

       return splitter.splitToList(configuration);   }

     public int grayReleaseRuleScanInterval() {
       int interval = getIntProperty("apollo.gray-release-rule-scan.interval",
   DEFAULT_GRAY_RELEASE_RULE_SCAN_INTERVAL);
       return checkInt(interval, 1, Integer.MAX_VALUE, DEFAULT_GRAY_RELEASE_RULE_SCAN_INTERVAL);   }

     public int itemKeyLengthLimit() {
       int limit = getIntProperty("item.key.length.limit", DEFAULT_ITEM_KEY_LENGTH);
       return checkInt(limit, 5, Integer.MAX_VALUE, DEFAULT_ITEM_KEY_LENGTH);   }

     public int itemValueLengthLimit() {
       int limit = getIntProperty("item.value.length.limit", DEFAULT_ITEM_VALUE_LENGTH);
       return checkInt(limit, 5, Integer.MAX_VALUE, DEFAULT_ITEM_VALUE_LENGTH);   }

     public Map<Long, Integer> namespaceValueLengthLimitOverride() {
       String namespaceValueLengthOverrideString = getValue("namespace.value.length.limit.override");
       Map<Long, Integer> namespaceValueLengthOverride = Maps.newHashMap();
       if (!Strings.isNullOrEmpty(namespaceValueLengthOverrideString)) {
         namespaceValueLengthOverride =
             gson.fromJson(namespaceValueLengthOverrideString, namespaceValueLengthOverrideTypeReference);
       }

       return namespaceValueLengthOverride;   }

     public boolean isNamespaceLockSwitchOff() {
       return !getBooleanProperty("namespace.lock.switch", false);   }

     /**    * ctrip config    **/   public String cloggingUrl() {
       return getValue("clogging.server.url");   }

     public String cloggingPort() {
       return getValue("clogging.server.port");   }

     public int appNamespaceCacheScanInterval() {
       int interval = getIntProperty("apollo.app-namespace-cache-scan.interval",
   DEFAULT_APPNAMESPACE_CACHE_SCAN_INTERVAL);
       return checkInt(interval, 1, Integer.MAX_VALUE, DEFAULT_APPNAMESPACE_CACHE_SCAN_INTERVAL);   }

     public TimeUnit appNamespaceCacheScanIntervalTimeUnit() {
       return TimeUnit.SECONDS;   }

     public int appNamespaceCacheRebuildInterval() {
       int interval = getIntProperty("apollo.app-namespace-cache-rebuild.interval",
   DEFAULT_APPNAMESPACE_CACHE_REBUILD_INTERVAL);
       return checkInt(interval, 1, Integer.MAX_VALUE, DEFAULT_APPNAMESPACE_CACHE_REBUILD_INTERVAL);   }

     public TimeUnit appNamespaceCacheRebuildIntervalTimeUnit() {
       return TimeUnit.SECONDS;   }

     public int releaseMessageCacheScanInterval() {
       int interval = getIntProperty("apollo.release-message-cache-scan.interval",
   DEFAULT_RELEASE_MESSAGE_CACHE_SCAN_INTERVAL);
       return checkInt(interval, 1, Integer.MAX_VALUE, DEFAULT_RELEASE_MESSAGE_CACHE_SCAN_INTERVAL);   }

     public TimeUnit releaseMessageCacheScanIntervalTimeUnit() {
       return TimeUnit.SECONDS;   }

     public int releaseMessageScanIntervalInMilli() {
       int interval = getIntProperty("apollo.message-scan.interval", DEFAULT_RELEASE_MESSAGE_SCAN_INTERVAL_IN_MS);
       return checkInt(interval, 100, Integer.MAX_VALUE, DEFAULT_RELEASE_MESSAGE_SCAN_INTERVAL_IN_MS);   }

     public int releaseMessageNotificationBatch() {
       int batch = getIntProperty("apollo.release-message.notification.batch",
   DEFAULT_RELEASE_MESSAGE_NOTIFICATION_BATCH);
       return checkInt(batch, 1, Integer.MAX_VALUE, DEFAULT_RELEASE_MESSAGE_NOTIFICATION_BATCH);   }

     public int releaseMessageNotificationBatchIntervalInMilli() {
       int interval = getIntProperty("apollo.release-message.notification.batch.interval",
   DEFAULT_RELEASE_MESSAGE_NOTIFICATION_BATCH_INTERVAL_IN_MILLI);
       return checkInt(interval, 10, Integer.MAX_VALUE, DEFAULT_RELEASE_MESSAGE_NOTIFICATION_BATCH_INTERVAL_IN_MILLI);   }

     public boolean isConfigServiceCacheEnabled() {
       return getBooleanProperty("config-service.cache.enabled", false);   }

     int checkInt(int value, int min, int max, int defaultValue) {
       if (value >= min && value <= max) {
         return value;
       }
       return defaultValue;   } }
...