[英]How to fix UnsatisfiedDependencyException in spring boot with mongodb application?
I'm trying to change my spring boot application DB from H2 to MongoDB. 我正在尝试将我的Spring启动应用程序DB从H2更改为MongoDB。 I have updated the application.properties file and removed any "@Entity" and "@Column" and added "@Document" instead.
我更新了application.properties文件并删除了所有“@Entity”和“@Column”并添加了“@Document”。 The error I'm getting is:
我得到的错误是:
Description:
描述:
Parameter 0 of constructor in smartspace.dao.rdb.RdbActionDao required a bean named 'mongoTemplate' that could not be found.
smartspace.dao.rdb.RdbActionDao中构造函数的参数0需要一个名为“mongoTemplate”的bean,该bean无法找到。
Action:
行动:
Consider defining a bean named 'mongoTemplate' in your configuration.
考虑在配置中定义名为“mongoTemplate”的bean。
The full Console log: 完整的控制台日志:
2019-05-13 12:48:55.477 INFO 15596 --- [ main] smartspace.Application : Starting Application on LAPTOP-E00E1JFN with PID 15596 (D:\git\2019b.giron.aptik.smartspace\bin started by Lael in D:\git\2019b.giron.aptik.smartspace)
2019-05-13 12:48:55.480 INFO 15596 --- [ main] smartspace.Application : The following profiles are active: production,default
2019-05-13 12:48:56.313 INFO 15596 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2019-05-13 12:48:56.316 INFO 15596 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.
2019-05-13 12:48:56.354 INFO 15596 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data JPA - Could not safely identify store assignment for repository candidate interface smartspace.dao.rdb.ActionCrud.
2019-05-13 12:48:56.356 INFO 15596 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data JPA - Could not safely identify store assignment for repository candidate interface smartspace.dao.rdb.ElementCrud.
2019-05-13 12:48:56.475 INFO 15596 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data JPA - Could not safely identify store assignment for repository candidate interface smartspace.dao.rdb.UserCrud.
2019-05-13 12:48:56.503 INFO 15596 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 180ms. Found 1 repository interfaces.
2019-05-13 12:48:56.517 INFO 15596 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2019-05-13 12:48:56.518 INFO 15596 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.
2019-05-13 12:48:56.533 INFO 15596 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface smartspace.dao.rdb.GenericIdGeneratorCrud.
2019-05-13 12:48:56.542 INFO 15596 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 23ms. Found 3 repository interfaces.
2019-05-13 12:48:56.947 INFO 15596 --- [ main] faultConfiguringBeanFactoryPostProcessor : No bean named 'errorChannel' has been explicitly defined. Therefore, a default PublishSubscribeChannel will be created.
2019-05-13 12:48:56.952 INFO 15596 --- [ main] faultConfiguringBeanFactoryPostProcessor : No bean named 'taskScheduler' has been explicitly defined. Therefore, a default ThreadPoolTaskScheduler will be created.
2019-05-13 12:48:56.956 INFO 15596 --- [ main] faultConfiguringBeanFactoryPostProcessor : No bean named 'integrationHeaderChannelRegistry' has been explicitly defined. Therefore, a default DefaultHeaderChannelRegistry will be created.
2019-05-13 12:48:57.078 INFO 15596 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$14f03da7] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2019-05-13 12:48:57.093 INFO 15596 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.hateoas.config.HateoasConfiguration' of type [org.springframework.hateoas.config.HateoasConfiguration$$EnhancerBySpringCGLIB$$94708ad9] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2019-05-13 12:48:57.104 INFO 15596 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.integration.config.IntegrationManagementConfiguration' of type [org.springframework.integration.config.IntegrationManagementConfiguration$$EnhancerBySpringCGLIB$$7fe1f8d6] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2019-05-13 12:48:57.117 INFO 15596 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'integrationDisposableAutoCreatedBeans' of type [org.springframework.integration.config.annotation.Disposables] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2019-05-13 12:48:57.721 INFO 15596 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8089 (http)
2019-05-13 12:48:57.746 INFO 15596 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2019-05-13 12:48:57.746 INFO 15596 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.16]
2019-05-13 12:48:57.757 INFO 15596 --- [ main] o.a.catalina.core.AprLifecycleListener : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [D:\integrationcourse\jdk8\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\WINDOWS\System32\OpenSSH\;C:\Users\Lael\.dnx\bin;C:\Program Files\Microsoft DNX\Dnvm\;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\nodejs\;C:\Program Files\Git\cmd;C:\Python27\python.exe;;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;%SYSTEMROOT%\System32\OpenSSH\;C:\Users\Lael\AppData\Local\Microsoft\WindowsApps;C:\Users\Lael\AppData\Roaming\npm;C:\Program Files\MongoDB\Server\4.0\bin;;C:\Program Files\JetBrains\WebStorm 2018.3.1\bin;;C:\Program Files\heroku\bin;.]
2019-05-13 12:48:57.855 INFO 15596 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2019-05-13 12:48:57.856 INFO 15596 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 2335 ms
2019-05-13 12:48:58.157 INFO 15596 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2019-05-13 12:48:58.265 INFO 15596 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2019-05-13 12:48:58.332 INFO 15596 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [
name: default
...]
2019-05-13 12:48:58.388 INFO 15596 --- [ main] org.hibernate.Version : HHH000412: Hibernate Core {5.3.7.Final}
2019-05-13 12:48:58.389 INFO 15596 --- [ main] org.hibernate.cfg.Environment : HHH000206: hibernate.properties not found
2019-05-13 12:48:58.506 INFO 15596 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.0.4.Final}
2019-05-13 12:48:58.645 INFO 15596 --- [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
Hibernate:
drop table generic_id_generator if exists
Hibernate:
drop sequence if exists hibernate_sequence
Hibernate: create sequence hibernate_sequence start with 1 increment by 1
Hibernate:
create table generic_id_generator (
id bigint not null,
primary key (id)
)
2019-05-13 12:48:59.321 INFO 15596 --- [ main] o.h.t.schema.internal.SchemaCreatorImpl : HHH000476: Executing import script 'org.hibernate.tool.schema.internal.exec.ScriptSourceInputNonExistentImpl@1d6713dd'
2019-05-13 12:48:59.323 INFO 15596 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2019-05-13 12:48:59.356 WARN 15596 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'rdbActionDao' defined in file [D:\git\2019b.giron.aptik.smartspace\bin\smartspace\dao\rdb\RdbActionDao.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'actionCrud': Cannot resolve reference to bean 'mongoTemplate' while setting bean property 'mongoOperations'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'mongoTemplate' available
2019-05-13 12:48:59.356 INFO 15596 --- [ main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2019-05-13 12:48:59.356 INFO 15596 --- [ main] .SchemaDropperImpl$DelayedDropActionImpl : HHH000477: Starting delayed evictData of schema as part of SessionFactory shut-down'
Hibernate:
drop table generic_id_generator if exists
Hibernate:
drop sequence if exists hibernate_sequence
2019-05-13 12:48:59.363 INFO 15596 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2019-05-13 12:48:59.365 INFO 15596 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
2019-05-13 12:48:59.368 INFO 15596 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat]
2019-05-13 12:48:59.378 INFO 15596 --- [ main] ConditionEvaluationReportLoggingListener :
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2019-05-13 12:48:59.422 ERROR 15596 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 0 of constructor in smartspace.dao.rdb.RdbActionDao required a bean named 'mongoTemplate' that could not be found.
Action:
Consider defining a bean named 'mongoTemplate' in your configuration.
This is my smartspace.dao.rdb.RdbActionDao: 这是我的smartspace.dao.rdb.RdbActionDao:
package smartspace.dao.rdb;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import smartspace.dao.EnhancedActionDao;
import smartspace.data.ActionEntity;
@Repository
public class RdbActionDao implements EnhancedActionDao{
private ActionCrud actionCrud;
private GenericIdGeneratorCrud genericIdGeneratorCrud;
@Value("${smartspace.name}")
private String ourSmartspaceName;
@Autowired
public RdbActionDao(
ActionCrud actionCrud,
GenericIdGeneratorCrud genericIdGeneratorCrud) {
super();
this.actionCrud = actionCrud;
this.genericIdGeneratorCrud = genericIdGeneratorCrud;
}
@Override
@Transactional
public ActionEntity create(ActionEntity actionEntity) {
// SQL: INSERT INTO ACTION (ID, NAME) VALUES (?,?);
GenericIdGenerator nextId =
this.genericIdGeneratorCrud.save(new GenericIdGenerator());
if(actionEntity.getActionSmartspace() == null) {
actionEntity.setKey(Long.toString(nextId.getId()) +"#"+ ourSmartspaceName);
this.genericIdGeneratorCrud.delete(nextId);
}
if (!this.actionCrud.existsById(actionEntity.getKey())) {
ActionEntity rv = this.actionCrud.save(actionEntity);
return rv;
}else {
throw new RuntimeException("Action already exists with key: " + actionEntity.getKey());
}
}
@Override
@Transactional(readOnly=true)
public List<ActionEntity> readAll() {
List<ActionEntity> rv = new ArrayList<>();
// SQL: SELECT
this.actionCrud.findAll()
.forEach(rv::add);
return rv;
}
@Override
@Transactional
public void deleteAll() {
// SQL: DELETE
this.actionCrud.deleteAll();
}
@Override
@Transactional(readOnly=true)
public List<ActionEntity> readAll(int size, int page) {
return this.actionCrud
.findAll(PageRequest.of(page, size))
.getContent();
}
@Override
@Transactional(readOnly=true)
public List<ActionEntity> readActionWithElementIdContaining(
String elementId,
int size,
int page) {
return this.actionCrud
.findAllByElementId(
elementId,
PageRequest.of(page, size));
}
@Override
@Transactional(readOnly=true)
public List<ActionEntity> readActionAvaiable(
Date fromDate,
Date toDate,
int size, int page) {
return this.actionCrud
.findAllByCreationTimestampBetween(
fromDate, toDate,
PageRequest.of(page, size));
}
@Override
public List<ActionEntity> readAll(String sortBy, int size, int page) {
return this.actionCrud
.findAll(PageRequest.of(
page, size,
Direction.ASC, sortBy))
.getContent();
}
@Override
@Transactional(readOnly=true)
public Optional<ActionEntity> readById(String actionKey) {
return this.actionCrud.findById(actionKey);
}
}
This is my EnhancedActionDao: 这是我的EnhancedActionDao:
package smartspace.dao;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import smartspace.data.ActionEntity;
public interface EnhancedActionDao extends ActionDao{
public List<ActionEntity> readAll(int size, int page);
public List<ActionEntity> readAll(String sortBy, int size, int page);
public List<ActionEntity> readActionWithElementIdContaining (String text, int size, int page);
public List<ActionEntity> readActionAvaiable (
Date fromDate, Date toDate,
int size, int page);
Optional<ActionEntity> readById(String actionKey);
}
This is my ActionDao: 这是我的ActionDao:
package smartspace.dao;
import smartspace.data.ActionEntity;
public interface ActionDao {
public ActionEntity create(ActionEntity actionEntity);
public java.util.List<ActionEntity> readAll();
public void deleteAll();
}
This is my Application.java: 这是我的Application.java:
package smartspace;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
And this is my application.properties: 这是我的application.properties:
smartspace.name =2019B.giron.aptik.smartspace
name.for.user.generator=World
spring.profiles.active=production,default
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
server.port = 8089
spring.data.mongodb.uri=mongodb://laelav:laelav1@integrationcourse-shard-00-00-7bsmm.mongodb.net:27017,integrationcourse-shard-00-01-7bsmm.mongodb.net:27017,integrationcourse-shard-00-02-7bsmm.mongodb.net:27017/test?ssl=true&replicaSet=integrationcourse-shard-0&authSource=admin&retryWrites=true
spring.data.mongodb.host=integrationcourse-shard-00-01-7bsmm.mongodb.net
spring.data.mongodb.repositories.enabled=true
spring.data.mongodb.port=27017
spring.data.mongodb.database=course
spring.data.mongodb.username=laelav
spring.data.mongodb.password=laelav1
Thanks for the help in advance! 我在这里先向您的帮助表示感谢!
EDIT:
After adding the MongoTemplate Bean I have a new error:
>Description:
>The dependencies of some of the beans in the application context form a cycle:
>???????
>| rdbActionDao defined in file [D:\git\2019b.giron.aptik.smartspace\bin\smartspace\dao\rdb\RdbActionDao.class]
>? ?
>| actionCrud
>???????
I think there's dependencies issue with mongoTemplate. 我认为mongoTemplate存在依赖性问题。 Please add this code in your dao.
请在您的dao中添加此代码。
@Bean public MongoTemplate mongoTemplate() throws Exception
{
return new MongoTemplate(mongo(), "database_name");
}
Think so this may help here mongo() is your mongo client. 想想这可能有助于mongo()是你的mongo客户端。
The problem was fixed by importing the right libraries and using ID annotation by spring.data.... and not from javax. 通过spring.data ....导入正确的库并使用ID注释而不是从javax中修复问题。 one.
一。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.