最近我一直在努力学习弹簧靴。我有以下相关文件:
映射到mysql表的实体类和UserRepository类(使用@Repository注释)。我试图通过@Autowire注释注入crudrepository类,但是Spring很难为它创建数据源,因为它无法找到mysql驱动程序。令我困惑的是我在maven中有mysql依赖,我在glassfish 4服务器上部署它,但是Spring正在尝试使用apache tomcat连接到数据库。下面是我的堆栈跟踪,代码片段和mysql-connector:
相关堆栈跟踪(内部异常)
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.tomcat.jdbc.pool.DataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.IllegalStateException: Cannot load driver class: com.mysql.jdbc.driver
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
... 62 common frames omitted
Caused by: java.lang.IllegalStateException: Cannot load driver class: com.mysql.jdbc.driver
注意到这是如何尝试使用org.apache.tomcat创建数据源,即使我使用的是glassfish服务器。这有关系吗?
源代码:当spring尝试将作为参数的数据源bean注入此方法并且无法创建它时,会发生第一个相关异常
@Configuration
@EnableAutoConfiguration
public class AppConfigUtil {
@Autowired
@Bean
public EntityManagerFactory entityManagerFactory(DataSource dataSource) {
LocalContainerEntityManagerFactoryBean bean = new LocalContainerEntityManagerFactoryBean();
bean.setPackagesToScan("com.connor");
bean.setDataSource(dataSource);
return bean.getObject();
}
maven(pom.xml)for mysql jar:
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
application.properties:这是我用于生成数据源的application.properties文件的全部内容
spring.datasource.url=jdbc:mysql://localhost:3307/craigslist
spring.datasource.username=dbadmin
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.jdbc.driver
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.show_sql=true
hibernate.format_sql=true
这是我的maven依赖项的图片:mysql jar存在: downloaded maven dependencies: including mysql jar
有关如何解决这个问题的想法吗?
答案 0 :(得分:0)
假设您正在使用Spring启动 这里有一些你可以做的事情来使它工作(你可能已经做了一些,我添加了任何我能想到的只是为了确保):
@SpringBootApplication
添加到ConnerApplication.java
班级spring-boot-starter-data-jpa
依赖一些旁注:
@Autowire
不打算用@Bean
注释标记。 @Autowire可用于自动装配用@Bean
注释的bean。
编辑:
我意识到OP想要在Glassfish上部署它。在这种情况下,您需要调整Spring以生成可部署的war文件,并配置应用程序容器(glassfish)以包含jdbc驱动程序。所有这些都是可行的,但需要付出很多努力
如果你将Spring-boot用于新项目,我建议你使用嵌入式tomcat方法。它基本上是战斗准备。你几乎不会出错。
答案 1 :(得分:0)
您无需在pom.xml
spring.datasource.driver-class-name=com.mysql.jdbc.driver
您可以使用Spring Boot here
在简单的应用程序中阅读我的配置此外,如果您正在使用Spring Boot,则不需要使用代码“源代码:当spring尝试将作为参数的数据源bean注入此方法但无法创建它时,会发生第一个相关异常。 ..“