Ich bin eine Anwendung von Jersey Migration 1.18, Frühling 3, Hibernate 3.6, Maven zu einer völlig neuen Architektur: Frühling 4.3 (via Frühling Boot), Hibernate 5 und Gradel.Migration von Migrate to Spring MVC 4 + Hibernate5
Während der „Portierung“ des Frühlings application.xml auf eine Codebasiskonfiguration, ich die folgende Ausnahme gegenüber:
Fehler Bean mit dem Namen ‚jpaContext‘ zu erstellen: Unbefriedigend Abhängigkeit. .. Keine Warte Bohne für Abhängigkeits [java.util.Set] gefunden
Hier ist die lange stacktrace
2017-03-13 19:44:42.814 WARN 40010 --- [ main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'jpaContext': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean found for dependency [java.util.Set<javax.persistence.EntityManager>]: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
2017-03-13 19:44:42.816 INFO 40010 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Unregistering JMX-exposed beans on shutdown
2017-03-13 19:44:42.825 INFO 40010 --- [ main] o.apache.catalina.core.StandardService : Stopping service Tomcat
2017-03-13 19:44:42.860 INFO 40010 --- [ main] utoConfigurationReportLoggingInitializer :
Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
2017-03-13 19:44:42.995 ERROR 40010 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 0 of constructor in org.springframework.data.jpa.repository.support.DefaultJpaContext required a bean of type 'java.util.Set' that could not be found.
Action:
Consider defining a bean of type 'java.util.Set' in your configuration.
Tatsache ist, dass ich nicht die DefaultJpaContext in meinem Code definiert haben:
@Configuration
@EnableTransactionManagement
@EnableAspectJAutoProxy(proxyTargetClass = true)
public class DatabaseConfig {
@Autowired private Environment env;
@Autowired private DataSource dataSource;
@Autowired private SessionFactory sessionFactory;
private static final String DB_DRIVER_CLASS_NAME = "com.mysql.jdbc.Driver";
private static final String HIBERNATE_DIALECT = "org.hibernate.dialect.MySQL5Dialect";
private static final String HIBERNATE_VALIDATION = "validate";
private static final String SHOW_SQL = "false";
private static final String ENTITY_PACKAGE = MainEntity.class.getPackage().getName();
final Logger log = LoggerFactory.getLogger(DatabaseConfig.class);
@Bean
public DataSource dataSource() {
final String driverName = env.getProperty("db.driver", DB_DRIVER_CLASS_NAME);
final String url = env.getProperty("db.url");
final String username = env.getProperty("db.username");
final String password = env.getProperty("db.password");
final DriverManagerDataSource dataSource = new DriverManagerDataSource();
if (log.isInfoEnabled()) {
log.info("Database Configuration:");
log.info("Setting driverName to {}", driverName);
log.info("Setting url to {}", url);
log.info("Setting username to {}", username);
if (StringUtils.isEmpty(password)) log.warn("Password not specified");
else log.info("Setting password");
}
dataSource.setDriverClassName(driverName);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
@Bean
public LocalSessionFactoryBean sessionFactory(){
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
sessionFactory.setPackagesToScan(new String[] {ENTITY_PACKAGE});
// Hibernate properties
Properties additionalProperties = new Properties();
additionalProperties.put("hibernate.dialect" , env.getProperty("db.dialect" , HIBERNATE_DIALECT));
additionalProperties.put("hibernate.hbm2ddl.auto", env.getProperty("db.validation", HIBERNATE_VALIDATION));
additionalProperties.put("hibernate.show_sql" , env.getProperty("db.sql.show" , SHOW_SQL));
sessionFactory.setHibernateProperties(additionalProperties);
return sessionFactory;
}
@Bean
public HibernateTransactionManager transactionManager(){
HibernateTransactionManager transactionManager = new HibernateTransactionManager();
transactionManager.setSessionFactory(sessionFactory);
return transactionManager;
}
}
aktualisieren
Hier ist es ein Stück gradle Build ist:
compile('org.springframework.boot:spring-boot-starter-data-jpa')
// ...
compile('org.springframework.boot:spring-boot-starter-security')
compile('org.springframework.boot:spring-boot-starter-web')
compile group: 'org.hibernate' , name: 'hibernate-core' , version: '5.2.8.Final'
// ...
Was ich fehlt?
Danke, Davide.
'DefaultJpaContext' ist in der Autokonfiguration definiert. Führen Sie die Debugfunktion aus, wie im Fehlerbericht empfohlen, um Details anzuzeigen. Aber was Sie tun, ist nicht notwendig. Alle Eigenschaften können in 'application.properties' definiert werden und Spring-Boot wird es aufnehmen. – jny