我正在尝试将Spring Boot应用程序数据库从H2更改为MongoDB。 我已经更新了application.properties文件 并删除了所有“ @Entity”和“ @Column” 并添加了“ @Document”。 我收到的错误是:
说明:
smartspace.dao.rdb.RdbActionDao中的构造函数的参数0需要找不到名为'mongoTemplate'的bean。
操作:
考虑在您的配置中定义一个名为“ mongoTemplate”的bean。
完整的控制台日志:
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.
这是我的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);
}
}
这是我的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);
}
这是我的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();
}
这是我的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);
}
}
这是我的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
谢谢您的帮助!
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
>???????
答案 0 :(得分:0)
我认为mongoTemplate存在依赖项问题。请将此代码添加到您的岛中。
@Bean public MongoTemplate mongoTemplate() throws Exception
{
return new MongoTemplate(mongo(), "database_name");
}
认为,这可能对您有所帮助mongo()是您的mongo客户。
答案 1 :(得分:0)
此问题已通过导入正确的库并通过spring.data ....而不是从javax使用ID注释得以解决。一个。