我正在使用Eclipse和maven与Java 1.8尝试构建一个基于maven项目的Spring启动项目,因此我构建了自己的Entity underName
Candidat
使用此完整代码块
package com.example.demo.entities;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity(name = "CandidatTable")
public class Candidat implements Serializable {
@Id @GeneratedValue
private Long id;
private String name;
private String prenom;
private String reference;
private String resumeCandidate;
public Candidat() {
super();
}
public Candidat(String name, String prenom, String reference, String resumeCandidate) {
super();
this.name = name;
this.prenom = prenom;
this.reference = reference;
this.resumeCandidate = resumeCandidate;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPrenom() {
return prenom;
}
public void setPrenom(String prenom) {
this.prenom = prenom;
}
public String getReference() {
return reference;
}
public void setReference(String reference) {
this.reference = reference;
}
public String getResumeCandidate() {
return resumeCandidate;
}
public void setResumeCandidate(String resumeCandidate) {
this.resumeCandidate = resumeCandidate;
}
}
在正常情况下,我们应该在其中构建一个接口,我们应该像我们所说的那样定义我们的服务方法:save()
,findAllRecords()
,findSpecificRecordByID()
,updateRecordLine()
,{{1等等,但在我的情况下,我在我的maven项目中使用了Spring-data,在我的web.xml文件中我有这种依赖:
deleteRecord()
所以没有必要定义我们的方法,因为Spring-data在我们创建扩展Generic Interface <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
的接口的情况下使用它自己的方法,所以我的界面看起来像这样:
JpaRepository
最后,主类代码就是这个:
package com.example.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import com.example.demo.entities.Candidat;
public interface ICandidate extends JpaRepository<Candidat, Long>{
//no need to define our methods, because we gonna use methods difined
// by SpringData whose comes from JPA specification.
}
我的应用程序应该转好,查看web.xml以管理应用程序依赖性,然后查看包含包含此代码的文件package com.example.demo;
import java.util.List;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import com.example.dao.ICandidate;
import com.example.demo.entities.Candidat;
@SpringBootApplication
public class CatWebServiceApplication {
public static void main(String[] args) {
ApplicationContext context =
SpringApplication.run(CatWebServiceApplication.class, args);
ICandidate condidateRep = context.getBean(ICandidate.class);
condidateRep.save(
new Candidat("UserName_1", "FirstName_1", "Ref_1", "/Home/file/docFile_1.docx")); //insert data using Ioc later after runing urself
condidateRep.save(
new Candidat("UserName_2", "FirstName_2", "Ref_2", "/Home/file/docFile_2.docx"));
List<Candidat> cnds = condidateRep.findAll();
cnds.forEach(p-> System.out.println(p.getResumeCandidate()));
}
}
的路径src/main/resources
:
application.properties
我突然在eclipse控制台上收到此错误消息:
线程中的异常&#34; main&#34; org.springframework.beans.factory.NoSuchBeanDefinitionException:没有 属于&#39;
# DataSource settings: spring.datasource.url = jdbc:mysql://localhost:3306/softherWebService spring.datasource.username = root spring.datasource.password = dbPassword spring.datasource.driverClassName = com.mysql.jdbc.Driver # Specify the DBMS spring.jpa.database = MYSQL # Show or not log for each sql query spring.jpa.show-sql = true # Hibernate ddl auto (create, create-drop, update) spring.jpa.hibernate.ddl-auto = update # Naming strategy spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
&#39;的限定bean可在 org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:353) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:340) 在 org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1090) 在 com.example.demo.CatWebServiceApplication.main(CatWebServiceApplication.java:19)
所以getBean()行中的问题,我也使用了CommandLineRunner但是没有解决我在获取bean时遇到的问题。
答案 0 :(得分:0)
使用自动隐含@SpringBootApplication
的@ComponentScan
时。 RadComboBox
的默认行为是,当未明确定义@ComponentScan
时,是从已定义的类开始扫描包。对于Spring Boot,这也适用于所有其他自动配置,如检测实体,检测Spring Data存储库等。
现在,basePackages
中的CatWebServiceApplication
和com.example.demo
中的ICandidate
定义后者将不会被扫描,因为它不属于{{1}包裹。
有几种方法可以解决这个问题。
首先,您可以在com.example.dao
上指定com.example.demo
以检测到组件,但这不会解决此问题,因为您还需要scanBasePackages
和@SpringBootApplication
在扩展技术时还需要更多。
最简单,最推荐的方法是将@EnableJpaRepositories("com.example.dao")
放在@EntityScan("com.example.dao")
包中,以便涵盖所有子包,您无需考虑所有其他注释需要补充。
答案 1 :(得分:0)
在界面定义上方添加@Repository
批注以解决错误。