![](/img/trans.png)
[英]Error creating bean with name 'entityManagerFactory' in my project with spring boot
[英]My project Spring Boot problem in created Bean
嗨,我的简单 Spring 启动安全项目
我的用户控制器
@RestController
@RequestMapping(path= "/api")
@RequiredArgcContructor
public class UserController {
private final UserService userService;
@PostMapping
public String create(@RequestBody UserDTO userDto){
return userService.save(userDto);
}
}
我的用户服务
@Service
@RequiredArgsConstructor
public class UserService {
private UserManager userManager;
private Mapper<UserDTO, UserEntity> userDTOUserMapper;
public String save(UserDTO userDto) {
return userManager.signUp(userDTOUserMapper.map(userDto));
}
}
我的用户管理器
package com.userlogintask.userlogintask.business;
import com.userlogintask.userlogintask.model.TokenEntity;
import com.userlogintask.userlogintask.model.UserEntity;
import com.userlogintask.userlogintask.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.UUID;
@Component
@RequiredArgsConstructor
public class UserManager implements UserDetailsService {
private final static String USER_NOT_FOUND_msg="user with email %s not found";
private final UserRepository userRepository;
private final BCryptPasswordEncoder bCryptPasswordEncoder;
private final TokenManager tokenManager;
@Override
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
return userRepository.findByEmail(email)
.orElseThrow(()-> new UsernameNotFoundException(String.format(USER_NOT_FOUND_msg,email)));
}
public String signUp(UserEntity userEntity){
boolean isExist = userRepository.findByEmail(userEntity.getEmail()).isPresent();
if(isExist){
throw new IllegalStateException("email is already exists");
}
String encodePassword = bCryptPasswordEncoder.encode(userEntity.getPassword());
userEntity.setPassword(encodePassword);
userRepository.save(userEntity);
//TODO:Send confirmation token;
String token = UUID.randomUUID().toString();
TokenEntity confirmationTokenEntity = new TokenEntity(
token,
LocalDateTime.now(),
LocalDateTime.now().plusMinutes(15),
userEntity
);
tokenManager.saveConfirmationToken(confirmationTokenEntity);
//TODO:Send email
return token;
}
public int enableAppUser(String email) {
return userRepository.enableUser(email);
}
}
我的映射配置
@Configuration
public class ApiMappingConfig {
//userDTO mapping user
@Bean
public Mapper<UserDTO, UserEntity> userDTOUserMapper(){
return Mapping.from(UserDTO.class)
.to(UserEntity.class)
.omitInDestination(UserEntity::getLocked)
.omitInDestination(UserEntity::getUser_id)
.omitInDestination(UserEntity::getEnabled)
.mapper();
}
}
我的用户实体
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class UserEntity implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_id",unique = true)
private Long user_id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
private String email;
private String password;
@Enumerated(EnumType.STRING)
private UserRole userRole;
private Boolean locked = false;
private Boolean enabled = false;
public UserEntity(String firstName,
String lastName, String email,
String password, UserRole userRole) {
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
this.password = password;
this.userRole = userRole;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return Collections.singleton(new SimpleGrantedAuthority(userRole.name()));
}
@Override
public String getPassword() {
return password;
}
@Override
public String getUsername() {
return email;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return !locked;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return enabled;
}
}
我的用户 DTO
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserDTO {
private String firstName;
private String lastName;
private String email;
private String password;
private UserRole userRole;
}
我的主 Class
@SpringBootApplication
public class UserlogintaskApplication {
public static void main(String[] args) {
SpringApplication.run(UserlogintaskApplication.class, args);
}
}
我的错误
在文件 [C:\Users\user\Desktop\Java\userlogintask\target\classes\com\userlogintask\userlogintask\controller\UserController.class] 中创建名称为“userController”的 bean 时出错:通过构造函数参数 0 表示的不满足的依赖关系; 嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException:在文件 [C:\Users\user\Desktop\Java\userlogintask\target\classes\com\userlogintask\userlogintask\service\ UserService.class]:通过构造函数参数1表示的不满足的依赖关系; 嵌套异常是 org.springframework.beans.factory.BeanCreationException:在 class 路径资源 [com/userlogintask/userlogintask/mapping/ApiMappingConfig.class] 中定义名称为“userDTOUserMapper”的 bean 创建错误:通过工厂方法进行 Bean 实例化失败; 嵌套异常是org.springframework.beans.BeanInstantiationException:无法实例化[com.remondis.remap.Mapper]:工厂方法'userDTOUserMapper'抛出异常; nested exception is com.remondis.remap.MappingException: The get-method for property 'enabled' in type com.userlogintask.userlogintask.model.UserEntity is not a valid Java Bean property. 在 org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800) ~[spring-beans-5.3.5.jar:5.3.factory.support. autowireConstructor(ConstructorResolver.java:229) ~[spring-beans-5.3.5.jar:5.3.5] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1354) ~[spring-beans -5.3.5.jar:5.3.5] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1204) ~[spring-beans-5.3.5.jar:5.3.5] at org .springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowi reCapableBeanFactory.java:564) ~[spring-beans-5.3.5.jar:5.3.5] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3 .5.jar:5.3.5] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.5.jar:5.3.5] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.5.jar:5.3.5] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:333)~[spring-beans-5.3.5.jar:5.3.5] 在 org.springframework。 beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.5.jar:5.3.5] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java :944) ~[spring-beans-5.3.5.jar:5.3.5] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.5.jar: 5.3.5] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.5.jar:5.3.5] at org.springframework.boot.web.servlet. context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.Z93F725 A07423FE1C889F448B33D21F46Z:144) ~[spring-boot-2.4.4.jar:2.4.4] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:769) ~[spring-boot-2.4.4.jar:2.4 .4] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:761) ~[spring-boot-2.4.4.jar:2.4.4] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java :426) ~[spring-boot-2.4.4.jar:2.4.4] at org.springframework.boot.SpringApplication.run(SpringApplication.java:326) ~[spring-boot-2.4.4.jar:2.4. 4] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1313) ~[spring-boot-2.4.4.jar:2.4.4] 在 org.springframework.boot.SpringA pplication.run(SpringApplication.java:1302) ~[spring-boot-2.4.4.jar:2.4.4] at com.userlogintask.userlogintask.UserlogintaskApplication.main(UserlogintaskApplication.java:14) ~[classes/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64) ~[na:na ] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~ [na:na] 在 org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.Z93F725A07 423FE1C889F448B33D21F46Z:49) ~[spring-boot-devtools-2.4.4.jar:2.4.4] 原因:org.springframework.beans.factory.UnsatisfiedDependencyException: 在文件 [C:\ Users\user\Desktop\Java\userlogintask\target\classes\com\userlogintask\userlogintask\service\UserService.class]:通过构造函数参数1表示的不满足的依赖关系; 嵌套异常是 org.springframework.beans.factory.BeanCreationException:在 class 路径资源 [com/userlogintask/userlogintask/mapping/ApiMappingConfig.class] 中定义名称为“userDTOUserMapper”的 bean 创建错误:通过工厂方法进行 Bean 实例化失败; 嵌套异常是org.springframework.beans.BeanInstantiationException:无法实例化[com.remondis.remap.Mapper]:工厂方法'userDTOUserMapper'抛出异常; nested exception is com.remondis.remap.MappingException: The get-method for property 'enabled' in type com.userlogintask.userlogintask.model.UserEntity is not a valid Java Bean property. 在 org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800) ~[spring-beans-5.3.5.jar:5.3.factory.support. autowireConstructor(ConstructorResolver.java:229) ~[spring-beans-5.3.5.jar:5.3.5] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1354) ~[spring-beans -5.3.5.jar:5.3.5] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1204) ~[spring-beans-5.3.5.jar:5.3.5] at org .springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowi reCapableBeanFactory.java:564) ~[spring-beans-5.3.5.jar:5.3.5] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3 .5.jar:5.3.5] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.5.jar:5.3.5] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.5.jar:5.3.5] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:333)~[spring-beans-5.3.5.jar:5.3.5] 在 org.springframework。 beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.5.jar:5.3.5] at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java :276) ~[spring-beans-5.3.5.jar:5.3.5] 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.Z93F725A07423FE1C889F448B3.383D21F46Z5:1.) jar:5.3.5] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.5.jar:5.3.5] at org.springframework.beans. factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887)~[spring-beans-5.3.5.Z68995 FCBF432492D15484D04A9D2AC40Z:5.3.5] at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ~[spring-beans-5.3.5.jar:5.3.5]... 25 common frames omitted原因:org.springframework.beans.factory.BeanCreationException:在 class 路径资源 [com/userlogintask/userlogintask/mapping/ApiMappingConfig.class] 中定义名称为“userDTOUserMapper”的 bean 创建错误:通过工厂方法进行 Bean 实例化失败; 嵌套异常是org.springframework.beans.BeanInstantiationException:无法实例化[com.remondis.remap.Mapper]:工厂方法'userDTOUserMapper'抛出异常; nested exception is com.remondis.remap.MappingException: The get-method for property 'enabled' in type com.userlogintask.userlogintask.model.UserEntity is not a valid Java Bean property. 在org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:658)~[spring-beans-5.3.5.jar:5.3.5]在org.spring. instantiateUsingFactoryMethod(ConstructorResolver.java:486) ~[spring-beans-5.3.5.jar:5.3.5] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1334) ~[spring-beans -5.3.5.jar:5.3.5] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177) ~[spring-beans-5.3.5.jar:5.3.5] at org .springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(Ab stractAutowireCapableBeanFactory.java:564) ~[spring-beans-5.3.5.jar:5.3.5] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3 .5.jar:5.3.5] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.5.jar:5.3.5] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.5.jar:5.3.5] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:333)~[spring-beans-5.3.5.jar:5.3.5] at org.spri ngframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.5.jar:5.3.5] at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor .java:276) ~[spring-beans-5.3.5.jar:5.3.5] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) ~[spring-beans-5.3. 5.jar:5.3.5] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.5.jar:5.3.5] at org.springframework. beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887)~[spring-beans- 5.3.5.jar:5.3.5] at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ~[spring-beans-5.3.5.jar:5.3.5]... 39个常见框架省略 原因:org.springframework.beans.BeanInstantiationException:无法实例化[com.remondis.remap.Mapper]:工厂方法'userDTOUserMapper'抛出异常; nested exception is com.remondis.remap.MappingException: The get-method for property 'enabled' in type com.userlogintask.userlogintask.model.UserEntity is not a valid Java Bean property. 在 org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)~[spring-beans-5.3.5.jar:5.beans.3.5] 在支持.Constructorframework. instantiate(ConstructorResolver.java:653) ~[spring-beans-5.3.5.jar:5.3.5]... 53 common frames omitted Caused by: com.remondis.remap.MappingException: The get-method for property 'enabled ' 类型 com.userlogintask.userlogintask.model.UserEntity 不是有效的 Java Bean 属性。 at com.remondis.remap.MappingException.notAProperty(MappingException.java:55) ~[remap-4.2.5.jar:4.2.5] at com.remondis.remap.MappingConfiguration.getPropertyDescriptorOrFail(MappingConfiguration.java:574) ~[ remap-4.2.5.jar:4.2.5] at com.remondis.remap.MappingConfiguration.getPropertyFromFieldSelector(MappingConfiguration.java:550) ~[remap-4.2.5.jar:4.2.5] at com.remondis.remap. MappingConfiguration.omitInDestination(MappingConfiguration.java:117) ~[remap-4.2.5.jar:4.2.5] at com.userlogintask.userlogintask.mapping.ApiMappingConfig.userDTOUserMapper(ApiMappingConfig.Z93F725A07423FE1C889F448B33D21F 46Z:23) ~[classes/:na] at com.userlogintask.userlogintask.mapping.ApiMappingConfig$$EnhancerBySpringCGLIB$$952967e9.CGLIB$userDTOUserMapper$0() ~[classes/:na] at com.userlogintask.userlogintask.mapping. ApiMappingConfig$$EnhancerBySpringCGLIB$$$952967e9$$FastClassBySpringCGLIB$$7199a018.invoke() ~[classes/:na] at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244) ~[spring-core-53Z:244) .5.jar:5.3.5] at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331) ~[spring-context-5.3.5.jar:5.3.5] at com.userlogintask .userlogintask.mapping.ApiMappingConfig$$EnhancerBySpringCGLIB$$952967e9.userDTOUserMapper() ~[classes/:na] 在 java.base/jdk.internal.reflect .NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64) ~[na:na] at java.base/jdk.internal. reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na] at org.springframework. beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.3.5.jar:5.3.5] ... 54个普通帧省略进程完成退出代码
我的 Pom.xml
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.userlogintask</groupId>
<artifactId>userlogintask</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>userlogintask</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>15</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.20</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.remondis</groupId>
<artifactId>remap</artifactId>
<version>4.2.5</version>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>javax.persistence-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<version>4.3.5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.4.4</version>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
问题是什么? 我不明白
好的,看起来错误是:
.MappingException: The get-method for property 'enabled' in type com.userlogintask.userlogintask.model.UserEntity is not a valid Java Bean property. at
这就是为什么无法按需要创建映射器的原因,这反过来又会导致服务的BeanInitializationException
。
查看您的实体,您使用: Boolean
用于enabled
属性,但吸气剂返回boolean
(不是包装器 class 而是真正的原语)。 尝试改变它,看看会发生什么。
现在我还没有使用过 Mappers,所以我无法真正评论您在创建映射器时调用的omitInDestination
方法的语义。 但是我认为您可以放置一个断点并确保 spring 从您的配置中初始化映射器,这是一种通用的“常识”建议。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.