Spring UnsatifiedPendencyException:创建名为的bean时出错
我正在尝试在Spring上创建db服务器,并研究了许多类似的问题,但没有人能帮到我。我无法解决此错误: org.springframework.beans.factory.unsatifiedpendencyException:创建名为“groupController”的bean时出错:通过字段“gs”表示未满足的依赖关系;嵌套异常为org.springframework.beans.factory.unsatifiedpendencyException:创建名为“groupServiceImpl”的bean时出错:未满足的依赖项通过字段“gr”表示;嵌套异常为org.springframework.beans.factory.beancreatitionException:创建名为“groupRepository”的bean时出错:在设置bean属性“entityManager”时,无法创建[org.springframework.orm.jpa.SharedEntityManagerCreator]类型的内部bean(内部bean)#1a3c15e0;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“(内部bean)#1a3c15e0”的bean时出错:设置构造函数参数时无法解析对bean“entityManagerFactory”的引用;嵌套异常为org.springframework.beans.factory.NoSuchBean定义异常:没有名为“entityManagerFactory”的bean可用 以下是我的课程: GroupController.javaSpring UnsatifiedPendencyException:创建名为的bean时出错,spring,spring-mvc,Spring,Spring Mvc,我正在尝试在Spring上创建db服务器,并研究了许多类似的问题,但没有人能帮到我。我无法解决此错误: org.springframework.beans.factory.unsatifiedpendencyException:创建名为“groupController”的bean时出错:通过字段“gs”表示未满足的依赖关系;嵌套异常为org.springframework.beans.factory.unsatifiedpendencyException:创建名为“groupServiceImp
@RestController
public class GroupController {
@Autowired
private GroupService gs;
@RequestMapping(value = "/groups", method = RequestMethod.GET)
@ResponseBody
public List<Group> getAllGroups(){
// return mocklist();
return gs.getAll();
}
private List<Group> mocklist() {
Group g= new Group();
g.setId(1);
g.setGroupName("333");
g.setTutorName("shcefsa");
List<Group> list = new ArrayList<Group>();
list.add(g);
g.setId(2);
g.setGroupName("333");
g.setTutorName("shc321efsa");
list.add(g);
return list;
}
@RequestMapping(value = "/groups/{id}", method = RequestMethod.GET)
@ResponseBody
public Group getGroupById(@PathVariable("id") int groupId){
return gs.getById(groupId);
}
@RequestMapping(value = "/groups", method = RequestMethod.POST)
@ResponseBody
public Group addGroup(@RequestBody Group group){
return gs.add(group);
}
@RequestMapping(value = "/groups", method = RequestMethod.POST)
@ResponseBody
public Group updateGroup(@RequestBody Group group){
return gs.add(group);
}
@RequestMapping(value = "/groups/{id}", method = RequestMethod.POST)
@ResponseBody
public void deleteGroup(@PathVariable("id") int groupId){
gs.deleteById(groupId);
}
}
@Repository
public interface GroupRepository extends JpaRepository<Group, Integer> {
}
@Service
public interface GroupService {
List<Group> getAll();
Group getById(int id);
Group add(Group group);
void deleteById(int id);
}
@Configuration
@EnableJpaRepositories("com.homestudio.tutor.server.repository")
@EnableTransactionManagement
@PropertySource("classpath:db.properties")
@ComponentScan("com.homestudio.tutor.server")
public class DatabaseConfig {
@Resource
private Environment env;
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(){
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource());
em.setPackagesToScan(env.getRequiredProperty("db.entity.package"));
em.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
em.setJpaProperties(getHibernateProperties());
return em;
}
@Bean
public PlatformTransactionManager platformTransactionManager(){
JpaTransactionManager manager = new JpaTransactionManager();
manager.setEntityManagerFactory(entityManagerFactoryBean().getObject());
return manager;
}
@Bean
public DataSource dataSource(){
BasicDataSource ds = new BasicDataSource();
ds.setUrl(env.getRequiredProperty("db.url"));
ds.setDriverClassName(env.getRequiredProperty("db.driver"));
ds.setUsername(env.getRequiredProperty("db.username"));
ds.setPassword(env.getRequiredProperty("db.password"));
ds.setInitialSize(Integer.valueOf(env.getRequiredProperty("db.initialSize")));
ds.setMinIdle(Integer.valueOf(env.getRequiredProperty("db.minIdle")));
ds.setMaxIdle(Integer.valueOf(env.getRequiredProperty("db.maxIdle")));
ds.setTimeBetweenEvictionRunsMillis(Long.valueOf(env.getRequiredProperty("db.timeBetweenEvictionRunsMilles")));
ds.setMinEvictableIdleTimeMillis(Long.valueOf(env.getRequiredProperty("db.minEvictableIdleTimeMilles")));
ds.setTestOnBorrow(Boolean.valueOf(env.getRequiredProperty("db.testOnBorrow")));
ds.setValidationQuery(env.getRequiredProperty("db.validationQuery"));
return ds;
}
public Properties getHibernateProperties() {
try {
Properties properties = new Properties();
InputStream is = getClass().getClassLoader().getResourceAsStream("hibernate.properties");
properties.load(is);
return properties;
} catch (IOException e) {
throw new IllegalArgumentException("Cannot find file \"hibernate.properties\" in classpath");
}
}
}
@Configuration
@EnableWebMvc
@ComponentScan("com.homestudio.tutor.server")
public class WebConfig extends WebMvcConfigurerAdapter{
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setObjectMapper(new ObjectMapper());
converter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON));
converters.add(converter);
}
}
WebConfig.java
@RestController
public class GroupController {
@Autowired
private GroupService gs;
@RequestMapping(value = "/groups", method = RequestMethod.GET)
@ResponseBody
public List<Group> getAllGroups(){
// return mocklist();
return gs.getAll();
}
private List<Group> mocklist() {
Group g= new Group();
g.setId(1);
g.setGroupName("333");
g.setTutorName("shcefsa");
List<Group> list = new ArrayList<Group>();
list.add(g);
g.setId(2);
g.setGroupName("333");
g.setTutorName("shc321efsa");
list.add(g);
return list;
}
@RequestMapping(value = "/groups/{id}", method = RequestMethod.GET)
@ResponseBody
public Group getGroupById(@PathVariable("id") int groupId){
return gs.getById(groupId);
}
@RequestMapping(value = "/groups", method = RequestMethod.POST)
@ResponseBody
public Group addGroup(@RequestBody Group group){
return gs.add(group);
}
@RequestMapping(value = "/groups", method = RequestMethod.POST)
@ResponseBody
public Group updateGroup(@RequestBody Group group){
return gs.add(group);
}
@RequestMapping(value = "/groups/{id}", method = RequestMethod.POST)
@ResponseBody
public void deleteGroup(@PathVariable("id") int groupId){
gs.deleteById(groupId);
}
}
@Repository
public interface GroupRepository extends JpaRepository<Group, Integer> {
}
@Service
public interface GroupService {
List<Group> getAll();
Group getById(int id);
Group add(Group group);
void deleteById(int id);
}
@Configuration
@EnableJpaRepositories("com.homestudio.tutor.server.repository")
@EnableTransactionManagement
@PropertySource("classpath:db.properties")
@ComponentScan("com.homestudio.tutor.server")
public class DatabaseConfig {
@Resource
private Environment env;
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(){
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource());
em.setPackagesToScan(env.getRequiredProperty("db.entity.package"));
em.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
em.setJpaProperties(getHibernateProperties());
return em;
}
@Bean
public PlatformTransactionManager platformTransactionManager(){
JpaTransactionManager manager = new JpaTransactionManager();
manager.setEntityManagerFactory(entityManagerFactoryBean().getObject());
return manager;
}
@Bean
public DataSource dataSource(){
BasicDataSource ds = new BasicDataSource();
ds.setUrl(env.getRequiredProperty("db.url"));
ds.setDriverClassName(env.getRequiredProperty("db.driver"));
ds.setUsername(env.getRequiredProperty("db.username"));
ds.setPassword(env.getRequiredProperty("db.password"));
ds.setInitialSize(Integer.valueOf(env.getRequiredProperty("db.initialSize")));
ds.setMinIdle(Integer.valueOf(env.getRequiredProperty("db.minIdle")));
ds.setMaxIdle(Integer.valueOf(env.getRequiredProperty("db.maxIdle")));
ds.setTimeBetweenEvictionRunsMillis(Long.valueOf(env.getRequiredProperty("db.timeBetweenEvictionRunsMilles")));
ds.setMinEvictableIdleTimeMillis(Long.valueOf(env.getRequiredProperty("db.minEvictableIdleTimeMilles")));
ds.setTestOnBorrow(Boolean.valueOf(env.getRequiredProperty("db.testOnBorrow")));
ds.setValidationQuery(env.getRequiredProperty("db.validationQuery"));
return ds;
}
public Properties getHibernateProperties() {
try {
Properties properties = new Properties();
InputStream is = getClass().getClassLoader().getResourceAsStream("hibernate.properties");
properties.load(is);
return properties;
} catch (IOException e) {
throw new IllegalArgumentException("Cannot find file \"hibernate.properties\" in classpath");
}
}
}
@Configuration
@EnableWebMvc
@ComponentScan("com.homestudio.tutor.server")
public class WebConfig extends WebMvcConfigurerAdapter{
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setObjectMapper(new ObjectMapper());
converter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON));
converters.add(converter);
}
}
@配置
@EnableWebMvc
@组件扫描(“com.homestudio.tutor.server”)
公共类WebConfig扩展了WebMVCConfigureAdapter{
@凌驾
public void configureMessageConverters(列表我想这里的主要部分是“NoSuchBeanDefinitionException:没有名为'entityManagerFactory'的bean可用”。看起来您的GroupRepository需要初始化一些spring数据jpa。您能提供您的spring上下文定义吗?@Normal这对我来说是新概念,我不完全理解。它是关于ServletContext的?不,我指的是主spring框架配置。通常是“@configuration”或“@SpringBootApplication”注释类或者spring xml文件。@Normal我添加了这个类。我根据您的来源创建了一个示例项目,问题在方法重命名后消失了。您是否有机会创建一个模拟项目,重现这个问题并共享它(例如通过github)?我想这里的主要部分是NoSuchBeanDefinitionException:没有名为“entityManagerFactory”的bean可用"。看起来您的GroupRepository需要初始化一些spring数据jpa。您能提供您的spring上下文定义吗?@Normal这对我来说是新概念,我不完全理解。它是关于ServletContext的?不,我指的是主spring框架配置。通常是“@configuration”或“@SpringBootApplication”注释类或spring xml文件。@Normal我添加了这个类。我根据您的来源创建了一个示例项目,问题在方法重命名后就消失了。您是否有机会创建一个模拟项目来重现这个问题并共享它(例如通过github)?