在spring boot[jpa]中创建名为datasourcetransactionmanager的bean时出错

cu6pst1q  于 2021-07-23  发布在  Java
关注(0)|答案(1)|浏览(894)

所以我一直在遵循一些关于如何使用springbootjpa配置类来访问数据的教程,但是我不断地遇到错误,似乎找不到我做错了什么。我一步一步地学习了教程,但似乎什么都不管用,以下是一些来源:https://github.com/spring-guides/gs-accessing-data-jpa/tree/master/completehttpshttp://bezkoder.com/spring-boot-upload-file-database/https://www.baeldung.com/spring-boot-configure-data-source-programmatic
除了examcontroller之外,所有这些源代码的结构似乎都与我的类似,但我不认为这是问题所在。
你知道为什么会这样吗?我也在stackoverflow上寻找了其他类似的问题,但是找不到任何适合我的问题。
以下是一些代码:
考试.java

  1. package webapptest.spring_jpa.model;
  2. import javax.persistence.*;
  3. import java.sql.Time;
  4. import java.util.Date;
  5. @Entity
  6. @Table(name = "exam")
  7. public class Exam {
  8. @Id
  9. @GeneratedValue(strategy = GenerationType.AUTO)
  10. private Integer eid;
  11. @Column(name = "title")
  12. private String title;
  13. @Column(name = "date")
  14. private Date date;
  15. @Column(name = "start_time")
  16. private Time startTime;
  17. @Column(name = "end_time")
  18. private Time endTime;
  19. @Column(name = "attempts")
  20. private int attempts;
  21. @Column(name = "answers")
  22. private int answers;
  23. public Exam() {}
  24. public Exam(String title, Date date, Time startTime, Time endTime, int attempts, int answers) {
  25. this.title = title;
  26. this.date = date;
  27. this.startTime = startTime;
  28. this.endTime = endTime;
  29. this.attempts = attempts;
  30. this.answers = answers;
  31. }
  32. //getters and setters
  33. @Override
  34. public String toString() {
  35. return getEid()+" "+getTitle()+" "+getDate()+" "+getStartTime()+" "+getEndTime()+" "+getAttempts()+" "+getAnswers();
  36. }
  37. }

examrepository.java文件

  1. package webapptest.spring_jpa.repository;
  2. import org.springframework.data.jpa.repository.JpaRepository;
  3. import webapptest.spring_jpa.model.Exam;
  4. public interface ExamRepository extends JpaRepository<Exam, Integer> {}

examcontroller.java

  1. package webapptest.spring_jpa.controller;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.http.HttpStatus;
  4. import org.springframework.http.ResponseEntity;
  5. import org.springframework.web.bind.annotation.GetMapping;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.RestController;
  8. import webapptest.spring_jpa.repository.ExamRepository;
  9. import webapptest.spring_jpa.model.Exam;
  10. import java.util.ArrayList;
  11. import java.util.List;
  12. @RestController
  13. @RequestMapping("/api")
  14. public class ExamController {
  15. @Autowired
  16. ExamRepository examRepository;
  17. @GetMapping("/exams")
  18. public ResponseEntity<List<Exam>> getAllExams(String title){
  19. try{
  20. List<Exam> exams = new ArrayList<>();
  21. if(title == null)
  22. examRepository.findAll().forEach(exams::add);
  23. if (exams.isEmpty())
  24. return new ResponseEntity<>(HttpStatus.NO_CONTENT);
  25. return new ResponseEntity<>(exams, HttpStatus.OK);
  26. } catch (Exception e){
  27. return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
  28. }
  29. }
  30. }

tblapp.java文件

  1. package webapptest;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
  5. import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
  6. @SpringBootApplication(exclude = {SecurityAutoConfiguration.class})
  7. @EnableJpaRepositories
  8. public class TBLApp {
  9. public static void main(String[] args){
  10. SpringApplication.run(TBLApp.class, args);
  11. }
  12. }

应用程序属性

  1. spring.datasource.url= jdbc:postgresql://localhost:5432/postgres
  2. spring.datasource.username= postgres
  3. spring.datasource.password= 0
  4. spring.datasource.driver-class-name=org.postgresql.Driver
  5. spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation= true
  6. spring.jpa.properties.hibernate.dialect= org.hibernate.dialect.PostgreSQLDialect
  7. # Hibernate ddl auto (create, create-drop, validate, update)
  8. spring.jpa.hibernate.ddl-auto= create

pom.xml文件

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-jpa</artifactId>
  4. <version>2.3.7.RELEASE</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.postgresql</groupId>
  8. <artifactId>postgresql</artifactId>
  9. <version>42.2.19</version>
  10. <scope>runtime</scope>
  11. </dependency>
  12. <dependency>
  13. <groupId>javax.xml.bind</groupId>
  14. <artifactId>jaxb-api</artifactId>
  15. <version>2.3.1</version>
  16. </dependency>

完全错误堆栈跟踪

  1. org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration$JdbcTransactionManagerConfiguration': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration$JdbcTransactionManagerConfiguration] from ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader@3764951d]
  2. at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:289) ~[spring-beans-5.3.3.jar:5.3.3]
  3. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1286) ~[spring-beans-5.3.3.jar:5.3.3]
  4. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1203) ~[spring-beans-5.3.3.jar:5.3.3]
  5. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:571) ~[spring-beans-5.3.3.jar:5.3.3]
  6. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531) ~[spring-beans-5.3.3.jar:5.3.3]
  7. at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.3.jar:5.3.3]
  8. at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.3.jar:5.3.3]
  9. at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.3.jar:5.3.3]
  10. at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.3.jar:5.3.3]
  11. at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944) ~[spring-beans-5.3.3.jar:5.3.3]
  12. at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:923) ~[spring-context-5.3.3.jar:5.3.3]
  13. at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:588) ~[spring-context-5.3.3.jar:5.3.3]
  14. at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) ~[spring-boot-2.4.2.jar:2.4.2]
  15. at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767) ~[spring-boot-2.4.2.jar:2.4.2]
  16. at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) ~[spring-boot-2.4.2.jar:2.4.2]
  17. at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) ~[spring-boot-2.4.2.jar:2.4.2]
  18. at org.springframework.boot.SpringApplication.run(SpringApplication.java:326) ~[spring-boot-2.4.2.jar:2.4.2]
  19. at org.springframework.boot.SpringApplication.run(SpringApplication.java:1311) ~[spring-boot-2.4.2.jar:2.4.2]
  20. at org.springframework.boot.SpringApplication.run(SpringApplication.java:1300) ~[spring-boot-2.4.2.jar:2.4.2]
  21. at webapptest.TBLApp.main(TBLApp.java:14) ~[classes/:na]
  22. at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
  23. at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64) ~[na:na]
  24. at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
  25. at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]
  26. at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.4.2.jar:2.4.2]
  27. Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration$JdbcTransactionManagerConfiguration] from ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader@3764951d]
  28. at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:481) ~[spring-core-5.3.3.jar:5.3.3]
  29. at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:321) ~[spring-core-5.3.3.jar:5.3.3]
  30. at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:267) ~[spring-beans-5.3.3.jar:5.3.3]
  31. ... 24 common frames omitted
  32. Caused by: java.lang.NoClassDefFoundError: org/springframework/jdbc/support/JdbcTransactionManager
  33. at java.base/java.lang.Class.getDeclaredMethods0(Native Method) ~[na:na]
  34. at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3325) ~[na:na]
  35. at java.base/java.lang.Class.getDeclaredMethods(Class.java:2466) ~[na:na]
  36. at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:463) ~[spring-core-5.3.3.jar:5.3.3]
  37. ... 26 common frames omitted
  38. Caused by: java.lang.ClassNotFoundException: org.springframework.jdbc.support.JdbcTransactionManager
  39. at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:606) ~[na:na]
  40. at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168) ~[na:na]
  41. at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) ~[na:na]
  42. ... 30 common frames omitted
lh80um4z

lh80um4z1#

我设法通过在pom.xml中包含与之相同的级别来修复它

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>2.3.9.RELEASE</version>
  5. </parent>

相关问题