При запуске проекта «Неудовлетворенная зависимость выражается через параметр конструктора 0» - PullRequest
0 голосов

При запуске проекта возникает ошибка:

UnsatisfiedDependencyException: Ошибка создания бина с именем 'sqlServerQueryDaoImpl', определенный в файле SqlServerQueryDaoImpl.class: Неудовлетворенная зависимость выражается через параметр конструктора 0; вложенное исключение org.springframework.beans.factory.NoSuchBeanDefinitionException: нет квалифицирующий бин типа 'javax.persistence.EntityManagerFactory' доступно: ожидается по крайней мере 1 бин, который квалифицируется как autowire кандидат. Аннотации зависимостей: {}

Код

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
    entityManagerFactoryRef = "sqlserverEntityManager",
    transactionManagerRef = "sqlserverTransactionManager",
    basePackages = "com.server.dao.sqlserverDao"
)
public class SqlserverConfiguration {

/**
 * Sqlserver datasource definition.
 *
 * @return datasource.
 */
@Primary
@Bean
@ConfigurationProperties(prefix = "spring.sqlserver.datasource")
public DataSource sqlserverDataSource() {
    return DataSourceBuilder
            .create()
            .build();
}

/**
 * Entity manager definition.
 *
 * @param builder an EntityManagerFactoryBuilder.
 * @return LocalContainerEntityManagerFactoryBean.
 */
@Primary
@Bean(name = "sqlserverEntityManager")
public LocalContainerEntityManagerFactoryBean 
sqlserverEntityManagerFactory(EntityManagerFactoryBuilder builder) {
    return builder
            .dataSource(sqlserverDataSource())
            .properties(hibernateProperties())
            .packages("com.server.entity.sqlserver")
            .persistenceUnit("sqlserverPU")
            .build();
}

/**
 * @param entityManagerFactory
 * @return
 */
@Primary
@Bean(name = "sqlserverTransactionManager")
public PlatformTransactionManager 
sqlserverTransactionManager(@Qualifier("sqlserverEntityManager") 
EntityManagerFactory entityManagerFactory) {
    return new JpaTransactionManager(entityManagerFactory);
}

private Map<String, Object> hibernateProperties() {

    Resource resource = new ClassPathResource("sqlserver-hibernate.cfg.xml");
    try {
        Properties properties = 
PropertiesLoaderUtils.loadProperties(resource);
        return properties.entrySet().stream()
                .collect(Collectors.toMap(
                        e -> e.getKey().toString(),
                        e -> e.getValue())
                );
    } catch (IOException e) {
        return new HashMap<String, Object>();
     }
 }
}

ДАО

package com.server.dao.sqlserverDao;

import com.server.entity.postgresql.DayVisits;
import java.util.List;

public interface SqlServerDao {

List<DayVisits> getDayVisits(int startDate, int finishDate, long branchKey, 
long serviceKey);

}

DaoImpl

package com.server.dao.sqlserverDao;
import com.server.entity.postgresql.DayVisits;
import org.hibernate.Session;
import org.hibernate.query.NativeQuery;
import org.springframework.stereotype.Repository;

import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import java.util.List;

@Repository
public class SqlServerQueryDaoImpl implements  SqlServerDao {

@PersistenceContext(unitName="sqlserverPU")
private EntityManagerFactory sqlserverEntityManager;

public SqlServerQueryDaoImpl(EntityManagerFactory sqlserverEntityManager) {
    this.sqlserverEntityManager = sqlserverEntityManager;
}

Session session = sqlserverEntityManager.unwrap(Session.class);

@Override
public List<DayVisits> getDayVisits(int startDate, int finishDate, long 
branchKey, long serviceKey){
String sql ="select dd.year, dd.month, dd.day_of_month, dd.day_of_week,\n" +
           "count(fvt.id) as visit_count\n" +
           "from stat.fact_visit_transaction fvt \n" +
           "join stat.dim_date dd on date_key=dd.id\n" +
           "where branch_key =:serviceKey \n" +
           "and service_key =:branchKey\n" +
           "and date_key between :startDate and :finishDate \n" +
           "group by dd.year, dd.month, dd.day_of_month, dd.day_of_week\n" +
           "order by dd.year, dd.month, dd.day_of_month, dd.day_of_week\n";
   Query q = session.createNativeQuery(sql).addEntity(DayVisits.class);
   q.setParameter("startDate",startDate);
   q.setParameter("finishDate",finishDate);
   q.setParameter("branchKey",branchKey);
   q.setParameter("serviceKey",serviceKey);
   List<DayVisits> dayVisitsList =((NativeQuery) q).list();

   return dayVisitsList;
   }
  }

my pom.xml

    <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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.arithmos</groupId>
<artifactId>WebAppForecast</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>Forecast</name>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.2.RELEASE</version>
</parent>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF- 
     8</project.reporting.outputEncoding>
    <spring.version>5.0.5.RELEASE</spring.version>
</properties>
<dependencies>
<!-- Unit Test -->
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.12</version>
</dependency>

 <!-- Spring Core -->
<dependency>
  <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
  <version>${spring.version}</version>
  <exclusions>
    <exclusion>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
    </exclusion>
  </exclusions>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>jcl-over-slf4j</artifactId>
  <version>1.7.6</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
   <artifactId>spring-web</artifactId>
  <version>${spring.version}</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
   <artifactId>spring-webmvc</artifactId>
  <version>${spring.version}</version>
  </dependency>
  <!-- Spring boot -->
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <exclusions>
          <exclusion>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-tomcat</artifactId>
          </exclusion>
      </exclusions>
  </dependency>
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
  </dependency>
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-jdbc</artifactId>
  </dependency>
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
  </dependency>
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-configuration-processor</artifactId>
      <optional>true</optional>
  </dependency>
  <!-- SqlServer -->
  <dependency>
      <groupId>com.microsoft.sqlserver</groupId>
      <artifactId>mssql-jdbc</artifactId>
      <version>6.4.0.jre8</version>
  </dependency>
  <!-- PostgreSQL -->
  <dependency>
      <groupId>postgresql</groupId>
      <artifactId>postgresql</artifactId>
      <version>9.1-901-1.jdbc4</version>
  </dependency>
<!-- JAVA EE 8 API -->
<dependency>
  <groupId>javax</groupId>
   <artifactId>javaee-api</artifactId>
  <version>8.0</version>
  <scope>provided</scope>
</dependency>
<!-- Servlet Library -->
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>3.1.0</version>
  <scope>provided</scope>
</dependency>
<!-- jstl -->
<dependency>
  <groupId>jstl</groupId>
   <artifactId>jstl</artifactId>
  <version>1.2</version>
</dependency>
<!-- hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
  <artifactId>hibernate-core</artifactId>
<version>5.2.16.Final</version>
</dependency>
<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-lang3</artifactId>
  <version>3.5</version>
</dependency>
<dependency>
  <groupId>commons-dbcp</groupId>
  <artifactId>commons-dbcp</artifactId>
  <version>1.4</version>
</dependency>
<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-orm</artifactId>
   <version>${spring.version}</version>
</dependency>
</dependencies>
<build>
<finalName>WebAppForecast</finalName>
<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-idea-plugin</artifactId>
    <version>2.2.1</version>
    <configuration>
      <downloadSources>true</downloadSources>
      <downloadJavadocs>false</downloadJavadocs>
    </configuration>
  </plugin>
  <plugin>
    <groupId>org.wildfly.plugins</groupId>
    <artifactId>wildfly-maven-plugin</artifactId>
    <version>1.2.1.Final</version>
  </plugin>
  <plugin>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>9.4.10.v20180503</version>
  </plugin>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
      <source>8</source>
      <target>8</target>
    </configuration>
  </plugin>
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
  </plugins>
 </build>
</project>

Stacktrace

09: 42: 56.171 [main] ОШИБКА org.springframework.web.context.ContextLoader - Сбой инициализации контекста org.springframework. 0; Вложенное исключение - org.springframework.beans.factory.NoSuchBeanDefinitionException: нет доступного квалифицирующего компонента типа 'javax.persistence.EntityManagerFactory': ожидается, что по крайней мере 1 компонент будет квалифицирован как кандидат для автоматической передачи. Аннотации зависимостей: {} в org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray (ConstructorResolver.java:729) в org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor (ConstructorResolver.java:192) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor (AbstractAutowireCapableBeanFactory.java:1270) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance (AbstractAutowireCapableBeanFactory.java:1127) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:541) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:501) в org.springframework.beans.factory.support.AbstractBeanFactory.lambda $ doGetBean $ 0 (AbstractBeanFactory.java:317) в org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:228) в org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:315) в org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:199) в org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons (DefaultListableBeanFactory.java:760) в org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization (AbstractApplicationContext.java:869) в org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplicationContext.java:550) в org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext (ContextLoader.java:409) в org.springframework.web.context.ContextLoader.initWebApplicationContext (ContextLoader.java:291) в org.springframework.web.context.ContextLoaderListener.contextInitialized (ContextLoaderListener.java:103) в org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized (ContextHandler.java:890) в org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized (ServletContextHandler.java:558) в org.eclipse.jetty.server.handler.ContextHandler.startContext (ContextHandler.java:853) в org.eclipse.jetty.servlet.ServletContextHandler.startContext (ServletContextHandler.java:370) в org.eclipse.jetty.webapp.WebAppContext.startWebapp (WebAppContext.java:1497) в org.eclipse.jetty.maven.plugin.JettyWebAppContext.startWebapp (JettyWebAppContext.java:360)в org.eclipse.jetty.webapp.WebAppContext.startContext (WebAppContext.java:1459) в org.eclipse.jetty.server.handler.ContextHandler.doStart (ContextHandler.java:785) в org.eclipse.jetty.servlet.ServletContextHandler.doStart (ServletContextHandler.java:287) в org.eclipse.jetty.webapp.WebAppContext.doStart (WebAppContext.java:545) в org.eclipse.jetty.maven.plugin.JettyWebAppContext.doStart (JettyWebAppContext.java:428) at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:68) на org.eclipse.jetty.util.component.ContainerLifeCycle.start (ContainerLifeCycle.java:138) at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart (ContainerLifeCycle.java:117) в org.eclipse.jetty.server.handler.AbstractHandler.doStart (AbstractHandler.java:113) в org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart (ContextHandlerCollection.java:167) at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:68) на org.eclipse.jetty.util.component.ContainerLifeCycle.start (ContainerLifeCycle.java:138) at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart (ContainerLifeCycle.java:117) в org.eclipse.jetty.server.handler.AbstractHandler.doStart (AbstractHandler.java:113) at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:68) на org.eclipse.jetty.util.component.ContainerLifeCycle.start (ContainerLifeCycle.java:138) в org.eclipse.jetty.server.Server.start (Server.java:419) at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart (ContainerLifeCycle.java:108) в org.eclipse.jetty.server.handler.AbstractHandler.doStart (AbstractHandler.java:113) в org.eclipse.jetty.server.Server.doStart (Server.java:386) at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:68) в org.eclipse.jetty.maven.plugin.AbstractJettyMojo.startJetty (AbstractJettyMojo.java:477) в org.eclipse.jetty.maven.plugin.AbstractJettyMojo.execute (AbstractJettyMojo.java:343) в org.eclipse.jetty.maven.plugin.JettyRunMojo.execute (JettyRunMojo.java:173) в org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:134) в org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:207) в org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:153) в org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:145) в org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:116) в org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:80) в org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:51) в org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128) в org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:307) в org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:193) в org.apache.maven.DefaultMaven.execute (DefaultMaven.java:106) в org.apache.maven.cli.MavenCli.execute (MavenCli.java:863) в org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288) в org.apache.maven.cli.MavenCli.main (MavenCli.java:199) at sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke (Method.java:498) в org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289) в org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:229) в org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415) в org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)в org.codehaus.classworlds.Launcher.main (Launcher.java:47) Вызвано: org.springframework.beans.factory.NoSuchBeanDefinitionException: нет доступного квалифицирующего компонента типа 'javax.persistence.EntityManagerFactory': ожидается, что по крайней мере 1 компонент будет квалифицирован как кандидат для автоматической передачи. Аннотации зависимостей: {} в org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound (DefaultListableBeanFactory.java:1509) в org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency (DefaultListableBeanFactory.java:1104) в org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency (DefaultListableBeanFactory.java:1065) в org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument (ConstructorResolver.java:815) в org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray (ConstructorResolver.java:721) ... 68 общих кадров опущено [ПРЕДУПРЕЖДЕНИЕ] Не удалось запустить контекст oejmpJettyWebAppContext @ 12a3b37 {/,file:///C:/Users/alena.s/aritmos/src/main/webapp/,UNAVAILABLE} {file: /// C: / Users / alena.s / aritmos / SRC / Основной / WebApp /} org.springframework. Неудовлетворенная зависимость выражается через параметр конструктора 0; Вложенное исключение - org.springframework.beans.factory.NoSuchBeanDefinitionException: нет доступного квалифицирующего компонента типа 'javax.persistence.EntityManagerFactory': ожидается, что по крайней мере 1 компонент будет квалифицирован как кандидат для автоматического подключения. Аннотации зависимостей: {} в org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray (ConstructorResolver.java:729) в org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor (ConstructorResolver.java:192) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor (AbstractAutowireCapableBeanFactory.java:1270) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance (AbstractAutowireCapableBeanFactory.java:1127) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:541) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:501) в org.springframework.beans.factory.support.AbstractBeanFactory.lambda $ doGetBean $ 0 (AbstractBeanFactory.java:317) в org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:228) в org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:315) в org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:199) в org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons (DefaultListableBeanFactory.java:760) в org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization (AbstractApplicationContext.java:869) в org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplicationContext.java:550) в org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext (ContextLoader.java:409) в org.springframework.web.context.ContextLoader.initWebApplicationContext (ContextLoader.java:291) в org.springframework.web.context.ContextLoaderListener.contextInitialized (ContextLoaderListener.java:103) в org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized (ContextHandler.java:890) в org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized (ServletContextHandler.java:558)в org.eclipse.jetty.server.handler.ContextHandler.startContext (ContextHandler.java:853) в org.eclipse.jetty.servlet.ServletContextHandler.startContext (ServletContextHandler.java:370) в org.eclipse.jetty.webapp.WebAppContext.startWebapp (WebAppContext.java:1497) в org.eclipse.jetty.maven.plugin.JettyWebAppContext.startWebapp (JettyWebAppContext.java:360) в org.eclipse.jetty.webapp.WebAppContext.startContext (WebAppContext.java:1459) в org.eclipse.jetty.server.handler.ContextHandler.doStart (ContextHandler.java:785) в org.eclipse.jetty.servlet.ServletContextHandler.doStart (ServletContextHandler.java:287) в org.eclipse.jetty.webapp.WebAppContext.doStart (WebAppContext.java:545) в org.eclipse.jetty.maven.plugin.JettyWebAppContext.doStart (JettyWebAppContext.java:428) at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:68) на org.eclipse.jetty.util.component.ContainerLifeCycle.start (ContainerLifeCycle.java:138) at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart (ContainerLifeCycle.java:117) в org.eclipse.jetty.server.handler.AbstractHandler.doStart (AbstractHandler.java:113) в org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart (ContextHandlerCollection.java:167) at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:68) на org.eclipse.jetty.util.component.ContainerLifeCycle.start (ContainerLifeCycle.java:138) at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart (ContainerLifeCycle.java:117) в org.eclipse.jetty.server.handler.AbstractHandler.doStart (AbstractHandler.java:113) at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:68) на org.eclipse.jetty.util.component.ContainerLifeCycle.start (ContainerLifeCycle.java:138) в org.eclipse.jetty.server.Server.start (Server.java:419) at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart (ContainerLifeCycle.java:108) в org.eclipse.jetty.server.handler.AbstractHandler.doStart (AbstractHandler.java:113) в org.eclipse.jetty.server.Server.doStart (Server.java:386) at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:68) в org.eclipse.jetty.maven.plugin.AbstractJettyMojo.startJetty (AbstractJettyMojo.java:477) в org.eclipse.jetty.maven.plugin.AbstractJettyMojo.execute (AbstractJettyMojo.java:343) в org.eclipse.jetty.maven.plugin.JettyRunMojo.execute (JettyRunMojo.java:173) в org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:134) в org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:207) в org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:153) в org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:145) в org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:116) в org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:80) в org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:51) в org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128) в org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:307) в org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:193) в org.apache.maven.DefaultMaven.execute (DefaultMaven.java:106) в org.apache.maven.cli.MavenCli.execute (MavenCli.java:863) в org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288) в org.apache.maven.cli.MavenCli.main (MavenCli.java:199) at sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)в java.lang.reflect.Method.invoke (Method.java:498) в org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289) в org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:229) в org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415) в org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356) в org.codehaus.classworlds.Launcher.main (Launcher.java:47) Вызывается: org.springframework.beans.factory.NoSuchBeanDefinitionException: нет доступного квалифицирующего компонента типа 'javax.persistence.EntityManagerFactory': ожидается, что по крайней мере 1 компонент будет квалифицирован как кандидат для автоматической передачи. Аннотации зависимостей: {} в org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound (DefaultListableBeanFactory.java:1509) в org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency (DefaultListableBeanFactory.java:1104) в org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency (DefaultListableBeanFactory.java:1065) в org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument (ConstructorResolver.java:815) в org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray (ConstructorResolver.java:721) ... еще 68

1 Ответ

0 голосов
/ 29 июня 2018

Ну, найдено несколько проблем:

Во-первых, прежде всего. Вы смешали простое приложение и конфигурацию Spring и Spring Boot.

Например, эта зависимость:

   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
  </dependency>

Уже содержит эти два артефакта:

<dependency>
  <groupId>org.springframework</groupId>
   <artifactId>spring-web</artifactId>
  <version>${spring.version}</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
   <artifactId>spring-webmvc</artifactId>
  <version>${spring.version}</version>
</dependency>

Нет необходимости дублировать их (если вам не нужна конкретная версия), поскольку вы используете пакеты spring-boot-starter.

Тогда ваш класс @SpringBootApplication должен находиться в корневом каталоге вашего приложения, чтобы рекурсивно сканировать все пакеты, например так (примечание package):

package com;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MainClass {

    public static void main(String[] args) {
        SpringApplication.run(MainClass.class, args);
    }

}

Тогда возникнет проблема с двумя источниками данных.

PostgresqlConfiguration

Изменение

public LocalContainerEntityManagerFactoryBean postgresqlEntityManagerFactory(EntityManagerFactoryBuilder builder) {
        return builder
                .dataSource(postgresqlDataSource())
                .properties(hibernateProperties())
                .packages("com.server.entity.postgresql")
                .persistenceUnit("postgresqlPU")
                .build();

К

@Bean(name = "postgresqlEntityManager")
    public LocalContainerEntityManagerFactoryBean postgresqlEntityManagerFactory() {
        LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();

        factoryBean.setDataSource(postgresqlDataSource());
        factoryBean.setJpaPropertyMap(hibernateProperties());
        factoryBean.setPackagesToScan("com.server.entity.postgresql");
        factoryBean.setPersistenceUnitName("postgresqlPU");

        HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();
        jpaVendorAdapter.setDatabasePlatform("org.hibernate.dialect.PostgreSQL95Dialect");

        factoryBean.setJpaVendorAdapter(jpaVendorAdapter);

        return factoryBean;
    }

Аналогичным образом сделайте то же самое для SqlserverConfiguration.java class.

В SqlServerQueryDaoImpl.java сделать следующие изменения:

@PersistenceContext(unitName="sqlserverPU")
private EntityManager sqlserverEntityManager;

public SqlServerQueryDaoImpl(@Qualifier("sqlserverEntityManager")EntityManagerFactory sqlserverEntityManager) {
    this.sqlserverEntityManager = sqlserverEntityManager.createEntityManager();
    session = sqlserverEntityManager.createEntityManager().unwrap(Session.class);
}

Чтобы отключить автоматическую настройку Spring для источника данных (HikariCP проверит его), добавьте в application.properties следующее:

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration

Никаких других изменений не требуется.

Тогда у вас проблема с @Cache в ваших сущностях. Вы не указали и не добавили поставщика кэша в путь к классу, поэтому он не может найти поставщика и завершается неудачно при запуске. Просто удалите аннотацию @Cache из DayVisits.java и IntervalVisits.java.

Затем добавьте @Transient к этому установщику:

@Transient
public List<IntervalVisits> getIntervalVisits() {
    return intervalVisits;
}

Затем добавьте сеттер в поле week_num. JPA будет сканировать его.

public void setWeek_num(int week_num) {
    this.week_num = week_num;
}

И, наконец, вам нужно добавить реализацию bean-компонента JSONB в classpath:

      <dependency>
          <groupId>javax.json.bind</groupId>
          <artifactId>javax.json.bind-api</artifactId>
          <version>1.0</version>
      </dependency>
      <dependency>
          <groupId>org.eclipse</groupId>
          <artifactId>yasson</artifactId>
          <version>1.0</version>
      </dependency>
      <dependency>
          <groupId>org.glassfish</groupId>
          <artifactId>javax.json</artifactId>
          <version>1.1</version>
      </dependency>

После того, как все эти изменения были сделаны, я смог запустить приложение на встроенном Tomcat.

Я бы также предложил избавиться от всех *. Xml файлов конфигурации. Переместите все в application.properties и прочитайте его оттуда.

В общем, старайтесь свести к минимуму настройку приложения Spring, если вы не полностью понимаете, что делаете. Spring Boot предоставляет множество способов как загрузить ваш проект с минимальными усилиями. Например, в этой статье показан пример приложения Spring Boot с 2 источниками данных: https://medium.com/@joeclever/using-multiple-datasources-with-spring-boot-and-spring-data-6430b00c02e7

В целом, для запуска проекта действительно необходим умеренный рефакторинг.

Удачи с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...