【问题标题】:I am not able to run spring boot我无法运行弹簧靴
【发布时间】:2016-11-24 11:29:38
【问题描述】:

我已经使用 gradle 创建了 spring boot data jpa 应用程序,我的项目结构如下所示。

com.duregesh

 --TestSpringBootDataJpaApplication.java

com.durgesh.controller

 --UserController.java

com.durgesh.model

 --User.java

com.durgesh.repositories

 --UserJpaRepository.java

com.durgesh.services

 --UserServiceImpl.java

当我在下面运行 spring boot 时,异常正在触发 说明:

com.durgesh.services.UserServiceImpl 中的字段 userJpaRepository 需要一个名为“emf”的 bean,但无法找到。

行动: 考虑在您的配置中定义一个名为“emf”的 bean。


@SpringBootApplication
public class TestSpringBootDataJpaApplication {
    public static void main(String[] args) {
        SpringApplication.run(TestSpringBootDataJpaApplication.class, args);
    }
-------------
public interface UserJpaRepository extends JpaRepository<User, Long> {}
-------------
@Entity
@Table(name = "USER")   
public class User implements Serializable{
        @Id
        private Long id;
        @Column(unique = true)
        private String uid;
        private String password;
        public Long getId() {
            return id;
        }
        public void setId(Long id) {
            this.id = id;
        }
        public String getUid() {
            return uid;
        }
        public void setUid(String uid) {
            this.uid = uid;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        }
----------------
@Service
@EnableJpaRepositories(basePackages="com.construction.de.*", entityManagerFactoryRef="emf")
public class UserServiceImpl implements UserService {
    @Autowired
    private UserJpaRepository userJpaRepository;
    @Override
    public User add(final User user) {
        return userJpaRepository.save(user);
    }
    @Override
    public User findById(final Long id) {
        final User user = userJpaRepository.findOne(id);
            return user;
    }
}
----
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;
    @RequestMapping(value ="/",method = RequestMethod.POST)
    public User add( @RequestBody final User user){
        return userService.add(user);
    }
    @RequestMapping(value ="/{id}",method = RequestMethod.GET)
    public User findById(@PathVariable("id") final Long id){
        return userService.findById(id);        
    }
}

【问题讨论】:

  • 如果直接在 UserController.java 中使用 UserJpaRepository.java 工作正常
  • @SpringBootApplication 公共类 TestSpringBootDataJpaApplication { public static void main(String[] args) { SpringApplication.run(TestSpringBootDataJpaApplication.class, args); }
  • 你是怎么配置spring的! .. 似乎是 bean 配置中的问题。你有任何名为 'emf' 的 bean 可能是你的 EntityManagerFactory .. 你是如何将它连接到你的 dao
  • hmm 看起来你混合了来自不同代码示例的不同配置。第一个问题是,在您的服务层“UserServiceImpl”中,您尝试连接一个名为emf 的bean,在您的spring 配置中(尚未发布)我确信您还没有定义一个名称为emf 的实体管理器。第二个问题,为什么要在服务层连接 entityManager ? Spring Data 将处理您的存储库,因此您只需像一开始那样自动装配存储库类
  • 只需删除@EnableJpaRepositories spring boot 会自动执行此操作。您现在已经自己配置了它,并且使用了错误的 entitymanagerfactory 名称对其进行了配置。但是使用 Spring Boot 时不需要整个注解。

标签: spring spring-mvc spring-boot spring-data spring-boot-gradle-plugin


【解决方案1】:

问题在于您的数据库entityManager 配置,您需要按照以下步骤操作:

(1) 如下所示将@EnableJpaRepositories 提供给Application 类(将其从服务中删除)。

@SpringBootApplication
@EnableJpaRepositories(basePackages="com.duregesh.*")
public class TestSpringBootDataJpaApplication {
    public static void main(String[] args) {
        SpringApplication.run(TestSpringBootDataJpaApplication.class, args);
}

(2) 提供您在application.properties(eclipse 中src/main/resources 或服务器WEB-INF/classes 文件夹下)中配置的数据库驱动程序和连接属性,如下所示:

spring.datasource.url: YOUR_DB_URL
spring.datasource.driverClassName: YOUR_DB_DRIVER_CLASS
spring.datasource.username: YOUR_DB_USER
spring.datasource.password: YOUR_DB_PWD

【讨论】:

  • 仍然面临同样的问题
  • 你需要这样做::: @EnableJpaRepositories(basePackages="com.duregesh.*")
  • 在 TestSpringBootDataJpaApplication 上注释 @EnaleJpaRepositories 后也没有解决
  • 感谢小伙子的快速回复
猜你喜欢
  • 2018-02-16
  • 2018-02-14
  • 2021-04-10
  • 2016-02-16
  • 2017-12-22
  • 1970-01-01
  • 2019-05-03
  • 2021-04-20
  • 1970-01-01
相关资源
最近更新 更多